URGENT, BESOIN D'AIDE POUR DU CODE VBA !!!!!!!! - Windows & Software
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+
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?
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)
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
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"
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!