Appel d'une macro dans une autre macro
Bonjour,
J'ai besoin de votre aide pour faire un appel de macro dans une autre macro.
Explication de ma situation:
J'ai dans une colonne donnée de mon fichier Excel (la colonne D précisemment) des mnémoniques qui décrivent les variables d'un code.
Par exemple: "Débit d'une pompe de relèvement"
Ma macro principale me permet de chercher des mots clés dans le mnémonique et de remplir une autre cellule, ( grâce à un offset), l'unité de mesure qui correspond.
Dans mon exemple: Ma macro va détecter le mot "débit" et va écrire dans la colonne Z: "m3/h" qui est son unité de mesure.
Or il peut y avoir deux unités différentes pour un débit : m3/h et l/h
J'ai donc fait une deuxième macro qui me permet de créer une liste déroulante dans une cellule me permettant de choisir entre l'une ou l'autre des unités de mesure.
Mon problème actuellement est le suivant:
J'aimerais appeler la deuxième macro depuis ma macro principale de façon à ce qu'à chaque fois qu'elle détecte le mot clé (qui est "bit", cf la macro plus bas), elle lance ma deuxième macro, et uniquement quand il détecte le mot clé.
Ma macro principale est:(Je n'ai mis qu'une partie de la macro pour éviter de surcharger)
Sub Remplissage_BDD()
Dim TM As Variant 'déclare la variable TM (Tableau des Mots)
Dim TC As Variant 'déclare la variable TC (Tableau des Correspondances)
Dim PL1 As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
'définit le tablau des mots TM
TM = Array("consigne", "taux", "bit", "cadence", "tempo", "quence", "temps", "dur", "heure", "minute", "nombre", "concentration", "but plage", "pressi", "commut", "volume", "position", "ouvertu", "niveau", "densit", "oxy", "ch4", "h2s", "nh3", "ph", "tempé", "pes", "vite", "uv", "charg mass", "second", "turb", "irrad", "GSM")
'définit le tablau des correspondances TC
TC = Array("mg/l", "g/m3", "m3/h", "min", "s", "Hz", "min", "min", "heure", "min", " ", "g/l", "HHMM", "bar", " ", "m3", "%", "%", "m", "g/m3", "mg/l", "ppm", "ppm", "ppm", " ", "°C", "kg", "rpm", "W/cm²", "g/l", "sec", "NTU", "mS/cm", "db")
'définit la plage PL
Set PL1 = Sheets("Tr").Range("D1:D" & Range("D" & Rows.Count).End(xlUp).Row)
For Each CEL In PL1 ' boucle 1 : sur toutes les cellule CEL de la palge PL
For I = 0 To UBound(TM) 'boucle 2 : sur tous les mots du tableau des mots TM
'si le mot du tableau est contenu dans la cellule CEL, renvoie dans la colonne H le mot correspondant tu tableau des correspondances, sort de la boucle 2
If InStr(1, CEL.Value, TM(I), vbTextCompare) <> 0 Then CEL.Offset(0, 21).Value = TC(I)
If InStr(1, CEL.Value, TM(I), vbTextCompare) <> 0 Then CEL.Offset(0, 20).Value = TF(I)
Next I 'prochain mot de la boucle 2
Next CEL 'prochaine cellule de la boucle 1
End Sub
Ma deuxième macro, qui crée la liste déroulante est:
Sub Macro10()
With Range("K1").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="m3/h,l/h"
End With
End Sub
Bonsoir FGR,
Pour appeler ta deuxième macro, il suffit de placer Call le nom de ta macro dans le code de la première.
Dans ton cas,
Call Macro10à placer au bon endroit dans ta première macro.
Cordialement,
Bonjour XORSANKUKAI,
oui j'ai déjà essayé cette façon, mais le soucis c'est que je fais l'appel de la macro 10 dans le tableau des correspondances, donc je fais :
'définit le tablau des mots TM
TM = Array("consigne", "taux", "bit", "cadence", "tempo", "quence", "temps", "dur", "heure", "minute", "nombre", "concentration", "but plage", "pressi", "commut", "volume", "position", "ouvertu", "niveau", "densit", "oxy", "ch4", "h2s", "nh3", "ph", "tempé", "pes", "vite", "uv", "charg mass", "second", "turb", "irrad", "GSM")
'définit le tablau des correspondances TC
TC = Array("mg/l", "g/m3", "Call macro 10", "min", "s", "Hz", "min", "min", "heure", "min", " ", "g/l", "HHMM", "bar", " ", "m3", "%", "%", "m", "g/m3", "mg/l", "ppm", "ppm", "ppm", " ", "°C", "kg", "rpm", "W/cm²", "g/l", "sec", "NTU", "mS/cm", "db")
et logiquement ça m'écrit dans la cellule cible "Call macro 10", mais ça n'exécute pas cette macro. J'ai essayé avec plusieurs syntaxes mais je n'y parvient pas.
Etant débutant dans le VBA, j'aurais besoin de votre aide.
Bonjour FGR,
Je ne suis pas non plus un pro du vba, mais c'est sûr que ta macro ne se lancera pas depuis:
TC = Array("mg/l", "g/m3", "Call macro 10", "min", "s", "Hz", "min", "min", "heure", "min", " ", "g/l", "HHMM", "bar", " ", "m3", "%", "%", "m", "g/m3", "mg/l", "ppm", "ppm", "ppm", " ", "°C", "kg", "rpm", "W/cm²", "g/l", "sec", "NTU", "mS/cm", "db")puisqu'ici, tu n'appelles pas une procédure.
De plus sans fichier joint, difficile de comprendre comment fonctionne ton classeur et définir la chronologie des évènements,
Si tu veux qu'un pro vienne à ton secours, joint ton fichier et mets tes codes sous balises dans tes messages
Cordialement,