Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5191 connectés 

 


Dernière réponse
Sujet : URGENT, BESOIN D'AIDE POUR DU CODE VBA !!!!!!!!
Iria_hime up

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Iria_hime up
Iria_hime bon en effet j'avais fais des erreurs dans ma fonctions, je n'avais pas tout modifié!
 
Mais j'ai droit à un autre beau msg d'erreur ! quelle chance!
 
voici mon prog principal ainsi que la déclaration de la fonction:
 
Sub MAJ_Graph()
 
Dim j As Integer
Dim Period As String
Dim sh As Sheets
 
    Windows("ASNSMD - 2001-06.xls" ).Activate
    For Each sh In Sheets
     
        For j = 1 To ActiveSheet.ChartObjects.Count
            Period = TROUV_PERIOD(sh, j)
        Next
         
    Next sh
 
End Sub
 
Function TROUV_PERIOD(ByRef tutu As Sheets, ByRef b As Integer) As String
 
    tutu.Select
    instructions
End Function
 
Voici le nouveau msg d'erreur : "Erreur d'execution '13': Type incompatible"
Kyle_Katarn bien sur à la définition les paramètres peuvent s'appeler autrement que sh et j... là c'est pour l'exemple
Kyle_Katarn Oualb :

Citation :

le VB est un langage de pédés, donc il contient plein d'instructions plus ou moins inutiles, mais bon autant les utiliser. pour parcourir une collection d'objet il faut utiliser "foreach"  


 
Vu les conseils qque tu lui donne tu dois pas programmer souvent ;-)
 
en effet, ce que tu rajoute après next n'est utile que pour le programmeur pour s'y retrouver en cas de boucles imbriquées et ce n'est même pas interprété lors de la compilation...
 
ensuite vu le message d'erreur :  
          Period = TROUV_PERIOD(sh, j)  
       Next        
   Next sh  
 
End Sub  
 
et j'ai le message d'erreur que voici :  
"Erreur de compilation :  
Type d'argument ByRef incompatible"  
je dirais (et il n'y a pas dans ton projet d'autres solutions) que l'erreur vient de : TROUV_PERIOD(sh, j)
 
Assures toi que ta fonction TROUV_PERIOD est définie par  
function TROUV_PERIOD(byref sh as Sheets,byref j as integer)

Iria_hime Premièrement merci beaucoup de ta réponse.
 
Comme je suis une débutante en programmation et en VB c sur que je prends pas les meilleure solutions!
J'avais pensé au For Each mais g préféré en rester a mes bonnes vieilles boucles.
 
Voilà l'intégralité de mon programme principal modifié avec tes conseils:
 
Sub MAJ_Graph()
 
Dim j As Integer
Dim Period As String
Dim sh As Sheets
 
    Windows("ASNSMD - 2001-06.xls" ).Activate
    For Each sh In Sheets
        sh.Select
        For j = 1 To ActiveSheet.ChartObjects.Count
            Period = TROUV_PERIOD(sh, j)
        Next      
    Next sh
 
End Sub
 
et j'ai le message d'erreur que voici :
"Erreur de compilation :
Type d'argument ByRef incompatible"
 
Biezn entendu je n'y comprends rien et je ne vois pas pourquoi il ne veut pas exécuter mon programme!
 
quant au sheets(i).select pour moi il est nécessaire pour bien situer la feuille dont il est question au compilateur, car à l'intérieur de ma fonction j'appelle un autre classeur et une feuille dans celui-ci.
 
Est-ce que j'ai fais une grosse bêtise dans mon programme?
le VB est un langage de pédés, donc il contient plein d'instructions plus ou moins inutiles, mais bon autant les utiliser. pour parcourir une collection d'objet il faut utiliser "foreach"
 
dim sh As Sheet
 
Foreach sh in Sheets
  sh.Select  
  For j = 1 To ActiveSheet.ChartObjects.Count  
     Period = TROUV_PERIOD(i, j)  
  Next j
Next sh
 
et ton deuxieme for tu devrais pouvoir le faire pareil
de plus le select m'a l'air d'etre une solution assez degueulasse, tu devrais essayer de faire autrement, par exemple en passant le parametre sh à ta fonction TROUV_PERIOD
 
si tu veux plus de details, reposte
 
A+
Iria_hime bonjour,
 
j'ai encore un problème avec mon code VBA sous Excel 97. C'est urgent car il faut que je finisse mon programme pour la fin du mois et ON EST LA FIN DU MOIS !!!
 
Mes explications sont longues mais je veux que tout soit clair pour une meilleure compréhension.
 
j'explique : g un classeur Excel avec deux feuilles contenant chacune 3 graphiques. je dois parcourir tous les graphiques de toutes les feuilles pour faire des manip.
Voici mes boucles imbriquées pour les parcourir :
 
For i = 1 To Sheets.Count
   Sheets(i).Select
   For j = 1 To ActiveSheet.ChartObjects.Count
      Period = TROUV_PERIOD(i, j)
   Next
Next
 
la première parcoure les feuilles graphiques et la deuxième, les graphiques. Dans cette dernière j'appelle une fonction quelconque.
 
Mon problème c'est que pour la première feuille, je parcoure les trois graphiques sans problèmes mais il ne veut pas parcourir la deuxième feuille, il sort de la boucle et fini le programme.
 
Je pense que le problème vient de la fonction que j'appele car dans celle ci j'active la feuille voulue (sheets(i).select) et je pense que c'est pour cela qu'il ne veut pas passer à la feuille suivante.
 
Donc g besoin de trouver une ligne de code pour desactiver la feuille en cours et je ne la trouve pas.
 
Si quelqu'un peut m'aider je le remerci d'avance!

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)