Appel de la même macro avec arguments différents : comment optimisé

FLan

XLDnaute Nouveau
Bonjour à tous,

Je cherche à optimiser mon code et à me faciliter la vie en appelant à la suite la même macro avec des arguments différents.
Pour que cela soit plus clair, ci dessous un extrait de mon code :

VB:
Set fBY = Sheets("BY")
Set fCL = Sheets("CL")
Set fCN = Sheets("CN")
Set fE = Sheets("E")
Set fN1 = Sheets("N1")
Set fN2 = Sheets("N2")
Set fP = Sheets("P")
Set fRK = Sheets("RK")
Set fR13 = Sheets("R13")
Set fR21 = Sheets("R21")
Set fR22 = Sheets("R22")
Set fZ = Sheets("Z")
Set fZ2 = Sheets("Z2")
Set fZ7 = Sheets("Z7")
Set fZ8 = Sheets("Z8")


Call clear(f41, "Tabl41")
Call clear(f51, "Tabl51")
Call clear(f5, "Tabl5")
Call clear(f54, "Tabl54")
Call clear(f54E, "Tabl54E")
Call clear(fAF, "TablAF")
Call clear(f54E, "Tabl54E")
Call clear(f54E, "Tabl54E")


comme vous pouvez le voir c'est très répétitif (que cela soit dans la définition des variables que dans l'appel des macros)
Merci d'avance pour votre aide !

Florian
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, FLan, soan

Si j'ai compris ce que fait la macro Clear
Une façon de faire
VB:
Sub test()
mClear ActiveSheet, "A1:C15"
End Sub
Sub testB()
mClear ActiveSheet, "toto" 'ici toto correspond à une plage nommée
End Sub

Private Sub mClear(Feuille As Worksheet, Rng As String)
Feuille.Range(Rng) = ""
End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Peut être :
VB:
Dim X
For Each X In Array("BY", "CL", "CN", "E", "N1", "N2", "P", "RK", "R13", "R21", "R22", "Z", "Z2", "Z7", "Z8")
   Clear Worksheets(X), "Tab" & X
   Next X
Mais je ne suis pas convaincu, C'est une question de contexte inconnu.
 

FLan

XLDnaute Nouveau
Bonjour à tous,

Tout d'abord merci pour vos réponses rapides !

Pour plus de précisions, peu importe la fonction appelé et ce qu'elle fait, l'objectif est de transformer toutes les lignes en une seule (ce que Dranreb propose j'ai l'impression)
En sachant que les f41 , f51 etc etc sont les feuilles et "Tabl41", "Tabl51" ect ect sont les noms des tableaux dans les feuilles correspondante.

Si j'essaye de comprendre, en créant un tableau dans mon code de type Array(feuille1,feuille2,feuille3,....) et un tableau avec comme valeur les nom de tableau ("Tableau1","Tableau2",...)

Je pourrais faire une fonction :


VB:
Dim X
M = Array("BY", "CL", "CN")
N = Array("TablBY", "TablCL", "TablCN" )
For X=1 to 3
   Call fonction(X,X)
next

Qu'en pensez vous ?

(je ne maitrise pas les tableaux créé sous VBA alors c'est peut etre très mal écrit ou absurde comme codage, désolé par avance, je cherche juste à savoir ce qui est faisable ou non)
 

Dranreb

XLDnaute Barbatruc
Comme on pouvait le faire dans vos exemples, je déduisais les noms des tableaux des noms des feuilles en ajoutant "Tab" devant. Mais mon X n'était pas un indice mais le texte lui même.
S'il n'a qu'un tableau dans chaque feuille, vous pouvez récupérer les ListObject plutôt :
VB:
Dim X
For Each X In Array("BY", "CL", "CN", "E", "N1", "N2", "P", "RK", "R13", "R21", "R22", "Z", "Z2", "Z7", "Z8")
   FaireLeTrucSur Worksheets(X).ListObjects(1)
   Next X
 
Dernière édition:

FLan

XLDnaute Nouveau
Merci à tous,

Je m'en suis sortie en faisans un tableau comportant le nom de toute mes feuilles comme Dranreb l'avait fait, c'était je crois le plus simple et ça marche bien :)

(cela nécessite d'avoir bien prévu les noms de ses feuilles et des tableaux donc OUF pour le coup)

Merci pour votre aide !


VB:
N = Array("41", "51", "5", "54", "54E", "AF", "AL", "AM", "AP", "AY", "AZ", "B", "BH", "BI", "BL", "BG", "BY", "CL", "CN", "E", "N1", "N2", "P", "RK", "R13", "R21", "R22", "Z", "Z2", "Z7", "Z8")

For Each X In N
    Call clea(Sheets(X), "Tabl" & X)
Next X