Microsoft 365 Exécuter une macro en fonction de la valeur d'une cellule

iliess

XLDnaute Occasionnel
bonjour
Je souhaite Exécuter une macro en fonction de la valeur d'une cellule d'un classeur sans l'ouvrir
Exemple
Voici le chemin de mon classeur C:\Users\meziani.ilies\Downloads\Grandlivre.xlsx.
Si la cellule B3 dans ce classeur est égale à Grand Livre, la macro s'exécute.
Salutations.
 

Valky68

XLDnaute Nouveau
Bonjour Ilies,
Est-ce que tu veux dire qu’une macro va lire la valeur de cette cellule dans ce fichier pour effectuer une suite d’opérations qui dépend de la valeur de cette cellule ?
Ce n’est pas la valeur de cette cellule qui va déclencher l’exécution d’une macro puisque ton fichier est fermé !
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Iliesss,
Un essai en PJ avec :
VB:
Dim Dossier$, Fichier$, Feuille$, Valeur
'Déclaration chemins, à mettre en dur si figé
Dossier = Range("B2")
Fichier = Range("B3")
Feuille = Range("B4")
'Récupération de la valeur ( cellule en notation R1C1 )
Valeur = ExecuteExcel4Macro("'" & Dossier & "[" & Fichier & "]" & Feuille & "'!R3C2")
'Affichage valeur trouvée pour test
Range("B6") = Valeur
'Analyse valeur trouvée
If Valeur = "Grand Livre" Then
    MsgBox "Execution de la macro désirée car la valeur est bien Grand Livre."
Else
    MsgBox "La valeur de B3 n'est pas Grand Livre."
End If
End Sub
Pour l'exemple en PJ il faut mettre les chemin du fichier en B2 B3 B4, la valeur est remontée en B6.
Evidemment à bidouiller suivant votre contexte. Le chemin peut être intégrée au code, et la valeur non affichée.
Par exemple pour votre fichier cela pourrait ressembler à :
VB:
Sub Importer()
Dim Valeur
'Lire valeur dans fichier fermé
Valeur = ExecuteExcel4Macro("'C:\Users\meziani.ilies\Downloads\[Grandlivre.xlsx]Feuil1'!R3C2")
'Analyse valeur trouvée
If Valeur = "Grand Livre" Then Call NomMacro    ' Lancer la macro désirée
End Sub
 

Pièces jointes

  • Iliesss.xlsm
    14.9 KB · Affichages: 3
Dernière édition:

iliess

XLDnaute Occasionnel
Bonjour M. Sylvanu
merci pour votre code
j'ai testé votre code et j'obtiens un message d'erreur erreur d'exécution 13
Ensuite, j'ai modifié le code de telle sorte que le chemin soit sauvegardé automatiquement dans VBA.
Voici le code:
VB:
Sub Importer()
Dim Chemin As String
ChDrive "C"
ChDir "C:\users\meziani.ilies\downloads"
Chemin = Application.GetOpenFilename("XL* Files (*.xls;*.xlsm;*.xlsx), *.xls;*.xlsm;*.xlsx", 1, "ouvrir un fichier")
If Chemin = "Faux" Then Exit Sub
Range("B6").Formula2R1C1 = "=' Chemin & JournalReport'!R3C2:R3C2"
'Analyse valeur trouvée
If Range("B6").Value = "Grand Livre" Then
    MsgBox "Execution de la macro désirée car la valeur est bien Grand Livre."
Else
    MsgBox "La valeur de B3 n'est pas Grand Livre."
End If
End Sub

Svp j'ai deux question
Pourquoi la fenêtre de choisir le chemin s'ouvre deux fois ?
2-est ce que je peux remplacer Range("B6").Formula2R1C1 par une variable Var sans l'enregistrer dans le classeur
 

Pièces jointes

  • Iliesss_1.xlsm
    15.9 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Pourquoi la fenêtre de choisir le chemin s'ouvre deux fois ?
Sur mon PC elle ne s'ouvre qu'une fois ( avec ma PJ )
est ce que je peux remplacer Range("B6").Formula2R1C1 par une variable Var sans l'enregistrer dans le classeur
Non pas avec votre méthode. Pour une variable il faut passer par Excel4Macro.
En PJ un essai avec :
VB:
Sub Importer()
Dim Dossier$, Chemin$, Valeur, T
Dossier = "C:\Users\PC_PAPA\Desktop\XLD\"  ' A MODIFIER
ChDir Dossier
Chemin = Application.GetOpenFilename("XL* Files (*.xls;*.xlsm;*.xlsx), *.xls;*.xlsm;*.xlsx", 1, "ouvrir un fichier")
If Chemin = "Faux" Then Exit Sub
'Récupération du nom de fichier
T = Split(Chemin, "\")
Fichier = T(UBound(T))
'Lecture valeur
Valeur = ExecuteExcel4Macro("'" & Dossier & "[" & Fichier & "]JournalReport'!R3C2")
'Analyse valeur trouvée, si ok lancer la macro désirée
If Valeur = "Grand Livre" Then MacroIliess
End Sub
Sub MacroIliess()
    MsgBox "Execution de la macro désirée car la valeur est bien Grand Livre."
End Sub
Pensez à modifier le nom de Dossier.
 

Pièces jointes

  • Iliesss_1 (V2).xlsm
    15.4 KB · Affichages: 1

Sequoyah

XLDnaute Nouveau
Bonjour le fil et le Forum, voici ma proposition (à vérifier les noms du chemin, du fichier, de la feuille et de la cellule dans le code):
VB:
Sub test2()
'https://excel-downloads.com/threads/executer-une-macro-en-fonction-de-la-valeur-dune-cellule.20084489/

Dim p As String, f As String, s As String, c As String, VL As Variant

p = "C:\Users\meziani.ilies\Downloads\" 'Chemin
f = "Grandlivre.xlsx" 'Fichier
s = "Feuil1" 'Feuille
c = "B3" '---> cellule

    VL = "'" & p & "[" & f & "]" & _
          s & "'!" & Range(c).Address(True, True, -4150)
          
          If ExecuteExcel4Macro(VL) = "Grand Livre" Then
          
          MsgBox ExecuteExcel4Macro(VL)
         ' macro a lancer
         End If
          
End Sub
 

iliess

XLDnaute Occasionnel
Sur mon PC elle ne s'ouvre qu'une fois ( avec ma PJ )

Non pas avec votre méthode. Pour une variable il faut passer par Excel4Macro.
En PJ un essai avec :
VB:
Sub Importer()
Dim Dossier$, Chemin$, Valeur, T
Dossier = "C:\Users\PC_PAPA\Desktop\XLD\"  ' A MODIFIER
ChDir Dossier
Chemin = Application.GetOpenFilename("XL* Files (*.xls;*.xlsm;*.xlsx), *.xls;*.xlsm;*.xlsx", 1, "ouvrir un fichier")
If Chemin = "Faux" Then Exit Sub
'Récupération du nom de fichier
T = Split(Chemin, "\")
Fichier = T(UBound(T))
'Lecture valeur
Valeur = ExecuteExcel4Macro("'" & Dossier & "[" & Fichier & "]JournalReport'!R3C2")
'Analyse valeur trouvée, si ok lancer la macro désirée
If Valeur = "Grand Livre" Then MacroIliess
End Sub
Sub MacroIliess()
    MsgBox "Execution de la macro désirée car la valeur est bien Grand Livre."
End Sub
Pensez à modifier le nom de Dossier.
merci
mais j'ai bloquer par ce débogage
 

Pièces jointes

  • debogage.png
    debogage.png
    38.7 KB · Affichages: 2

iliess

XLDnaute Occasionnel
Bonjour le fil et le Forum, voici ma proposition (à vérifier les noms du chemin, du fichier, de la feuille et de la cellule dans le code):
VB:
Sub test2()
'https://excel-downloads.com/threads/executer-une-macro-en-fonction-de-la-valeur-dune-cellule.20084489/

Dim p As String, f As String, s As String, c As String, VL As Variant

p = "C:\Users\meziani.ilies\Downloads\" 'Chemin
f = "Grandlivre.xlsx" 'Fichier
s = "Feuil1" 'Feuille
c = "B3" '---> cellule

    VL = "'" & p & "[" & f & "]" & _
          s & "'!" & Range(c).Address(True, True, -4150)
         
          If ExecuteExcel4Macro(VL) = "Grand Livre" Then
         
          MsgBox ExecuteExcel4Macro(VL)
         ' macro a lancer
         End If
         
End Sub
ca marche très bien
mais pour quoi la fenêtre de choisir le fichier ouvre deux fois
première fois
premiere fois.png


deuxième fois

deuxieme fois.png


merci
 

Pièces jointes

  • Iliesss_1 (V3).xlsm
    15.8 KB · Affichages: 1

Valky68

XLDnaute Nouveau
Bonsoir Ilies,
Je vois que tu travailles avec Excel en version MS 365. Es-tu dans un environnement professionnel avec un site Sharepoint où tu peux déposer ton fichier source ?
Sinon, tu peux mettre ton fichier source sur ton OneDrive et aller chercher cette valeur spécifique en nommant la cellule en question et en la récupérant via Power Query. C’est beaucoup plus simple qu’avec des macros (j’en ai fait pendant 30 ans !).
Il faudra évidemment adapter le chemin du fichier Granlivre.xlsx dans Power Query pour que ça fonctionne chez toi.
 

Pièces jointes

  • Grandlivre.xlsx
    8.8 KB · Affichages: 2
  • cible.xlsx
    16.1 KB · Affichages: 2

Discussions similaires

Réponses
5
Affichages
350
Réponses
1
Affichages
143

Membres actuellement en ligne

Statistiques des forums

Discussions
315 087
Messages
2 116 082
Membres
112 653
dernier inscrit
flapynot7x