URGENT, BESOIN D'AIDE POUR DU CODE VBA !!!!!!!!

URGENT, BESOIN D'AIDE POUR DU CODE VBA !!!!!!!! - Windows & Software

Marsh Posté le 26-07-2001 à 11:33:49    

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!

Reply

Marsh Posté le 26-07-2001 à 11:33:49   

Reply

Marsh Posté le 26-07-2001 à 11:40:41    

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+

Reply

Marsh Posté le 26-07-2001 à 11:55:15    

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?

Reply

Marsh Posté le 26-07-2001 à 12:02:39    

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)

Reply

Marsh Posté le 26-07-2001 à 12:05:45    

bien sur à la définition les paramètres peuvent s'appeler autrement que sh et j... là c'est pour l'exemple

Reply

Marsh Posté le 26-07-2001 à 12:14:57    

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"

Reply

Marsh Posté le 26-07-2001 à 14:18:16    

up

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed