Hiérarchisation des macros
Résolu
padbollevrai
Messages postés
51
Date d'inscription
Statut
Membre
Dernière intervention
-
padbollevrai Messages postés 51 Date d'inscription Statut Membre Dernière intervention -
padbollevrai Messages postés 51 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voici ce que je dois réussir à faire.
J'ai un programme qui récupère les valeurs d'une feuille, les traite et les transpose dans une colonne d'une autre feuille.
C'est très bien, mais j'ai 12 colonnes à remplir de la sorte !
Basiquement, ce sont 6 colonnes visisées en 2 (valeur min et valeur Max).
MAIS les colonnes Min peuvent aussi être de type "Count", ou de type "Time", auxquels cas il n'y a pas de colonnes Max à coté.
Pour résumer: Les colonnes A, C, E, G, I, K peuvent être soit Min, soit Count, soit Time,
les colonnes B, D, F, G, J, L peuvent être soit Max, soit Rien.
Ma programmation doit donc s'adapter à chaque type de colonne, c'est pourquoi j'ai pensé à une macro Maitre qui commanderait des macros Esclaves en fonction du nom de chaque colonne, de la forme (Attention, c'est juste une esquisse) :
Ca marcherait, mais ce serait un sacré bordel ! En effet, 24 programmes différents alors qu'il n'y a que trois tâches à effectuer...
Ce que je voudrais, c'est avoir un programme pour remplir les Count, un pour les Min, un pour les Max et un pour les Time, commandés par la macro maitresse, et qui s'adapteraient pour ecrire les informations dans les bonnes colonnes biensur.
Es-ce possible, et comment le fait-on ?
Merci !
Voici ce que je dois réussir à faire.
J'ai un programme qui récupère les valeurs d'une feuille, les traite et les transpose dans une colonne d'une autre feuille.
C'est très bien, mais j'ai 12 colonnes à remplir de la sorte !
Basiquement, ce sont 6 colonnes visisées en 2 (valeur min et valeur Max).
MAIS les colonnes Min peuvent aussi être de type "Count", ou de type "Time", auxquels cas il n'y a pas de colonnes Max à coté.
Pour résumer: Les colonnes A, C, E, G, I, K peuvent être soit Min, soit Count, soit Time,
les colonnes B, D, F, G, J, L peuvent être soit Max, soit Rien.
Ma programmation doit donc s'adapter à chaque type de colonne, c'est pourquoi j'ai pensé à une macro Maitre qui commanderait des macros Esclaves en fonction du nom de chaque colonne, de la forme (Attention, c'est juste une esquisse) :
Sub MAIN_FILLING()
If A3 is "Count", then call Filling_Count_A, Else if A3 is "Time", then Call Filling_Time_A, Else Call Filling_Min_A
If B3 is "Max", then call Filling_Max_B, Else ""
If C3 is "Count", then call Filling_Count_C, Else if C3 is "Time", then Call Filling_Time_C, Else Call Filling_Min_C
If D3 is "Max", then call Filling_Max_D, Else ""
If E3 is "Count", then call Filling_Count_E, Else if E3 is "Time", then Call Filling_Time_E, Else Call Filling_Min_E
If F3 is "Max", then call Filling_Max_F, Else ""
If G3 is "Count", then call Filling_Count_G, Else if G3 is "Time", then Call Filling_Time_G, Else Call Filling_Min_G
If H3 is "Max", then call Filling_Max_H, Else ""
If I3 is "Count", then call Filling_Count_I, Else if I3 is "Time", then Call Filling_Time_I, Else Call Filling_Min_I
If J3 is "Max", then call Filling_Max_J, Else ""
If K3 is "Count", then call Filling_Count_K, Else if K3 is "Time", then Call Filling_Time_K, Else Call Filling_Min_K
If L3 is "Max", then call Filling_Max_L, Else ""
End Sub
Ca marcherait, mais ce serait un sacré bordel ! En effet, 24 programmes différents alors qu'il n'y a que trois tâches à effectuer...
Ce que je voudrais, c'est avoir un programme pour remplir les Count, un pour les Min, un pour les Max et un pour les Time, commandés par la macro maitresse, et qui s'adapteraient pour ecrire les informations dans les bonnes colonnes biensur.
Es-ce possible, et comment le fait-on ?
Merci !
A voir également:
- Déclaration existante dans la portée en cours
- Macros word - Guide
- My macros - Télécharger - Organisation
- Ez macros - Télécharger - Divers Utilitaires
- Hierarchisation Table des matières problème !! - Forum Word
- Le classeur macros personnelles dans le dossier de démarrage doit être ouvert ✓ - Forum VB / VBA
4 réponses
Bonjour,
Il te faut donc une fonction (ou une procédure) avec en paramètre, la colonne. Comme ceci :
Tu peux même faire une boucle dans ton main avec un select case etc...
Genre :
Il te faut donc une fonction (ou une procédure) avec en paramètre, la colonne. Comme ceci :
Sub Main() If [A3] = "count" Then Call Filling_Count(1) If [A3] = "time" Then Call Filling_Time(1) If [B3] = "count" Then Call Filling_Count(2) If [B3] = "time" Then Call Filling_Time(2) 'etc... End Sub Sub Filling_Count(NumCol As Integer) With columns(NumCol) 'blabla End With End Sub Sub Filling_Time(NumCol As Integer) With columns(NumCol) 'blabla End With End Sub
Tu peux même faire une boucle dans ton main avec un select case etc...
Genre :
For Col = 1 To 12 Select Case Cells(3, Col) Case "count" Call Filling_Count(Col) Case "min" Call Filling_Min(Col) Case "max" Call Filling_Max(Col) Case "Time" Call Filling_Time(Col) Case Else MsgBox "Erreur Fatale" End Select Next
Wow ! Excellent, merci beaucoup !
Maintenant, dans mes sous-macro, comment remplacer la lettre le la colonne par la variable "Col" ?
Exemple, si j'ai un Range("B" & K).Value, il suffit de mettre Range("Col" & K) ?
Merci
Maintenant, dans mes sous-macro, comment remplacer la lettre le la colonne par la variable "Col" ?
Exemple, si j'ai un Range("B" & K).Value, il suffit de mettre Range("Col" & K) ?
Merci
Merci beaucoup.
Dernière chose: Tu as mis
Or, à la place de "Erreur fatale" en cas de "case else", j'aimerais qu'il passe à la valeur suivante. J'ai donc mis un Next à la place de MsgBox "Erreur Fatale", mais cela fait un doublon de Next... Et il me fait une erreur à la compilation.
Suffit-il de ne rien mettre ou y a-t-il quelque chose de particulier ?
Autre souci: Dans une de mes sous-macro, une erreur de compilation stipule "Déclaration existante dans la portée en cours" sur "Dim Col as Integer".
Je ne déclare qu'une fois cette variable, je ne comprends pas cette erreur, d'autant que les autres sous-macros situées plus haut dans le code n'ont pas renvoyé cette erreur.
Merci
Dernière chose: Tu as mis
For Col = 1 To 12 Select Case Cells(3, Col) Case "count" Call Filling_Count(Col) Case "min" Call Filling_Min(Col) Case "max" Call Filling_Max(Col) Case "Time" Call Filling_Time(Col) Case Else MsgBox "Erreur Fatale" End Select Next
Or, à la place de "Erreur fatale" en cas de "case else", j'aimerais qu'il passe à la valeur suivante. J'ai donc mis un Next à la place de MsgBox "Erreur Fatale", mais cela fait un doublon de Next... Et il me fait une erreur à la compilation.
Suffit-il de ne rien mettre ou y a-t-il quelque chose de particulier ?
Autre souci: Dans une de mes sous-macro, une erreur de compilation stipule "Déclaration existante dans la portée en cours" sur "Dim Col as Integer".
Je ne déclare qu'une fois cette variable, je ne comprends pas cette erreur, d'autant que les autres sous-macros situées plus haut dans le code n'ont pas renvoyé cette erreur.
Merci