Bonjour à tous,
Aimant à compliquer un peu tout, ( j'apprends en même temps ), je me
suis mis en tête qu'il vallait mieux une seule grosse macro que
plusieurs petites .
1/ est-ce vrai ?
2/ je veux effacer plusieurs trucs dans plusieurs feuilles, Or bien
que ce soit toujours les même feuilles qui soient concernées elles ne
le sont pas toutes en même temps, donc au lieu de faire la méthode
simple d'une sub pour chaque feuille et d'appeler les diverses sub
j'ai fait celle là :
Sub vide (ParamArray bte() As Variant)
Application.ScreenUpdating = False
For i = 0 To UBound(bte)
Select Case bte(i)
Case "feuil1"
MsgBox "feuil1"
'*Effacer PdP*
Case "feuil 2"
MsgBox "synth"
'**Efface "feuil2"**
Case "feuil3"
MsgBox "feuil3"
'***Efface "feuil3"***
Case "feuil4"
MsgBox "feuil4"
'***Efface "feuil4"***
End Select
Next i
Application.ScreenUpdating = True
Exit Sub
End Sub
Sub eff()
Call vide("feuil1", "feuil3")
End Sub
Voilà, tout ceci fonctionne très bien, sauf que je me dis qu'au final
une boucle n'est pas si élégant que cela
et que des sub videfeuil1, videfeuil2, etc.. seraient plus efficaces
et moins gourmande même si je dois répéter la définition des variables
de chacune à chaque fois.
C'était juste histoire d'avoir votre avis sur la question,
Merci,
Bonjour à tous,
Aimant à compliquer un peu tout, ( j'apprends en même temps ), je me
suis mis en tête qu'il vallait mieux une seule grosse macro que
plusieurs petites .
1/ est-ce vrai ?
2/ je veux effacer plusieurs trucs dans plusieurs feuilles, Or bien
que ce soit toujours les même feuilles qui soient concernées elles ne
le sont pas toutes en même temps, donc au lieu de faire la méthode
simple d'une sub pour chaque feuille et d'appeler les diverses sub
j'ai fait celle là :
Sub vide (ParamArray bte() As Variant)
Application.ScreenUpdating = False
For i = 0 To UBound(bte)
Select Case bte(i)
Case "feuil1"
MsgBox "feuil1"
'*Effacer PdP*
Case "feuil 2"
MsgBox "synth"
'**Efface "feuil2"**
Case "feuil3"
MsgBox "feuil3"
'***Efface "feuil3"***
Case "feuil4"
MsgBox "feuil4"
'***Efface "feuil4"***
End Select
Next i
Application.ScreenUpdating = True
Exit Sub
End Sub
Sub eff()
Call vide("feuil1", "feuil3")
End Sub
Voilà, tout ceci fonctionne très bien, sauf que je me dis qu'au final
une boucle n'est pas si élégant que cela
et que des sub videfeuil1, videfeuil2, etc.. seraient plus efficaces
et moins gourmande même si je dois répéter la définition des variables
de chacune à chaque fois.
C'était juste histoire d'avoir votre avis sur la question,
Merci,
Bonjour à tous,
Aimant à compliquer un peu tout, ( j'apprends en même temps ), je me
suis mis en tête qu'il vallait mieux une seule grosse macro que
plusieurs petites .
1/ est-ce vrai ?
2/ je veux effacer plusieurs trucs dans plusieurs feuilles, Or bien
que ce soit toujours les même feuilles qui soient concernées elles ne
le sont pas toutes en même temps, donc au lieu de faire la méthode
simple d'une sub pour chaque feuille et d'appeler les diverses sub
j'ai fait celle là :
Sub vide (ParamArray bte() As Variant)
Application.ScreenUpdating = False
For i = 0 To UBound(bte)
Select Case bte(i)
Case "feuil1"
MsgBox "feuil1"
'*Effacer PdP*
Case "feuil 2"
MsgBox "synth"
'**Efface "feuil2"**
Case "feuil3"
MsgBox "feuil3"
'***Efface "feuil3"***
Case "feuil4"
MsgBox "feuil4"
'***Efface "feuil4"***
End Select
Next i
Application.ScreenUpdating = True
Exit Sub
End Sub
Sub eff()
Call vide("feuil1", "feuil3")
End Sub
Voilà, tout ceci fonctionne très bien, sauf que je me dis qu'au final
une boucle n'est pas si élégant que cela
et que des sub videfeuil1, videfeuil2, etc.. seraient plus efficaces
et moins gourmande même si je dois répéter la définition des variables
de chacune à chaque fois.
C'était juste histoire d'avoir votre avis sur la question,
Merci,
je me suis mis en tête qu'il vallait mieux une seule grosse macro que
plusieurs petites .
1/ est-ce vrai ?
C'était juste histoire d'avoir votre avis sur la question,
je me suis mis en tête qu'il vallait mieux une seule grosse macro que
plusieurs petites .
1/ est-ce vrai ?
C'était juste histoire d'avoir votre avis sur la question,
je me suis mis en tête qu'il vallait mieux une seule grosse macro que
plusieurs petites .
1/ est-ce vrai ?
C'était juste histoire d'avoir votre avis sur la question,
Merci beaucoup pour vos réponses, je n'espérait pas faire un tel
carton avec cette question
En tout cas toutes vos remarques me rendent la pratique plus
compréhensible (et pas uniquement sur ce post) merci encore.
Je vais donc opter pour les subs par feuilles, cependant 2 petites
questions encore :
MichDenis, je suis assez adepte de (et l'utilise beaucoup) :
DerLig = .Range("A:A").Find("*", , xlFormulas, , , xlPrevious).Row
mais quelle différence avec DerLig > Sheets(1).Range("A65000").End(xlUp).Row, en terme de ressources,
résultat ?
j'ai fini par remplacé la plus part de
mes .Range("A:A").Find("*", , xlFormulas, , , xlPrevious).Row
par .Range("A65000").End(xlUp).Row pour une question de gain de temps
de frappe, mais intuitivement, je préfère la première solution.
anonymousA, quand tu parles de la seule limite qui est la taille du
module ne devant pas dépasser 64 ko, il s'agit bien de chaque module
et non pas de l'ensemble des modules ? car sinon je crois que j'ai pas
mal de ménage à faire....
Voilà, j'abandonne cette idée que pleins de petites subs étaient moins
lisibles qu'une grosse fourre-tout (et ma grosse sub de création de
menus et de barres outils va se prendre un coup de tronçonneuse).
Enfin, grace à cet exemple j'aurais découvert ParamArray.
Une dernière question sur l'emploi de exit sub.
utilisant tout de même pas mal d'appel d'appel de petites sub, je me
suis retrouvé avec un plantage en mode auto et un bon fonctionnement
en pas à pas.
Une réponse lue sur le forum solutionnait ce problème en indiquant de
faire un sheets(x).select dès que possible s'il y avait des manip sur
plusieurs feuilles, ce que je fis et cela fonctionna bien. Mais ayant
cherché dans l'aide, je trouvais exit sub, que j'employais dans une
sub, or après il m'a fallu l'employer tout le temps pour ne plus avoir
de problème d'arret entre appel de sub. Vaut il mieux éviter l'emploi
de exit sub ?
Merci encore de vos remarques
@+
Merci beaucoup pour vos réponses, je n'espérait pas faire un tel
carton avec cette question
En tout cas toutes vos remarques me rendent la pratique plus
compréhensible (et pas uniquement sur ce post) merci encore.
Je vais donc opter pour les subs par feuilles, cependant 2 petites
questions encore :
MichDenis, je suis assez adepte de (et l'utilise beaucoup) :
DerLig = .Range("A:A").Find("*", , xlFormulas, , , xlPrevious).Row
mais quelle différence avec DerLig > Sheets(1).Range("A65000").End(xlUp).Row, en terme de ressources,
résultat ?
j'ai fini par remplacé la plus part de
mes .Range("A:A").Find("*", , xlFormulas, , , xlPrevious).Row
par .Range("A65000").End(xlUp).Row pour une question de gain de temps
de frappe, mais intuitivement, je préfère la première solution.
anonymousA, quand tu parles de la seule limite qui est la taille du
module ne devant pas dépasser 64 ko, il s'agit bien de chaque module
et non pas de l'ensemble des modules ? car sinon je crois que j'ai pas
mal de ménage à faire....
Voilà, j'abandonne cette idée que pleins de petites subs étaient moins
lisibles qu'une grosse fourre-tout (et ma grosse sub de création de
menus et de barres outils va se prendre un coup de tronçonneuse).
Enfin, grace à cet exemple j'aurais découvert ParamArray.
Une dernière question sur l'emploi de exit sub.
utilisant tout de même pas mal d'appel d'appel de petites sub, je me
suis retrouvé avec un plantage en mode auto et un bon fonctionnement
en pas à pas.
Une réponse lue sur le forum solutionnait ce problème en indiquant de
faire un sheets(x).select dès que possible s'il y avait des manip sur
plusieurs feuilles, ce que je fis et cela fonctionna bien. Mais ayant
cherché dans l'aide, je trouvais exit sub, que j'employais dans une
sub, or après il m'a fallu l'employer tout le temps pour ne plus avoir
de problème d'arret entre appel de sub. Vaut il mieux éviter l'emploi
de exit sub ?
Merci encore de vos remarques
@+
Merci beaucoup pour vos réponses, je n'espérait pas faire un tel
carton avec cette question
En tout cas toutes vos remarques me rendent la pratique plus
compréhensible (et pas uniquement sur ce post) merci encore.
Je vais donc opter pour les subs par feuilles, cependant 2 petites
questions encore :
MichDenis, je suis assez adepte de (et l'utilise beaucoup) :
DerLig = .Range("A:A").Find("*", , xlFormulas, , , xlPrevious).Row
mais quelle différence avec DerLig > Sheets(1).Range("A65000").End(xlUp).Row, en terme de ressources,
résultat ?
j'ai fini par remplacé la plus part de
mes .Range("A:A").Find("*", , xlFormulas, , , xlPrevious).Row
par .Range("A65000").End(xlUp).Row pour une question de gain de temps
de frappe, mais intuitivement, je préfère la première solution.
anonymousA, quand tu parles de la seule limite qui est la taille du
module ne devant pas dépasser 64 ko, il s'agit bien de chaque module
et non pas de l'ensemble des modules ? car sinon je crois que j'ai pas
mal de ménage à faire....
Voilà, j'abandonne cette idée que pleins de petites subs étaient moins
lisibles qu'une grosse fourre-tout (et ma grosse sub de création de
menus et de barres outils va se prendre un coup de tronçonneuse).
Enfin, grace à cet exemple j'aurais découvert ParamArray.
Une dernière question sur l'emploi de exit sub.
utilisant tout de même pas mal d'appel d'appel de petites sub, je me
suis retrouvé avec un plantage en mode auto et un bon fonctionnement
en pas à pas.
Une réponse lue sur le forum solutionnait ce problème en indiquant de
faire un sheets(x).select dès que possible s'il y avait des manip sur
plusieurs feuilles, ce que je fis et cela fonctionna bien. Mais ayant
cherché dans l'aide, je trouvais exit sub, que j'employais dans une
sub, or après il m'a fallu l'employer tout le temps pour ne plus avoir
de problème d'arret entre appel de sub. Vaut il mieux éviter l'emploi
de exit sub ?
Merci encore de vos remarques
@+