Executer une macro automatiquement

chris33

XLDnaute Nouveau
Bonjour le forum,

Merci à vous de me donner la solution (je suis encore novice) pour qu'une macro s'execute automatiquement à l'ouverture du fichier excel.

Encore merci pour votre indulgence

Chris33
 

Abel

XLDnaute Accro
Bonjour chris33,

Va dans l'éditeur de macro (Alt+F11).

Sur la gauche de l'écran (en général) est affiché l'explorateur de projets (tu y trouveras la liste de tes fichiers Excel ouverts).
Sélectionne celui qui correspond au fichier dans lequel tu veux voir une macro s'exécuter à l'ouverture.
Sous ce projet s'affichent la liste des onglets, 'ThisWorkBook' et éventuellement la liste des modules (macro) s'il y en a.
Sélectionne 'ThisWorkBook' (double clic)

Une page blanche s'affiche dans laquelle tu peux entrer du code correspondant à 'ThisWorkBook', c'est à dire au classeur sélectionné.
A cet endroit, on entre en général ce qu'on appelle du code évennementiel. Cet à dire quelque chose qui se passe si telle ou telle action a lieu.

Pour ce qui t'intéresse, sur le haut de cet page, tu vas trouver deux listes l'une à côté de l'autre.

Dans celle de gauche, tu sélectionnes 'Workbook' si ce n'est déjà fait et dans celle de droite, tu vas chercher 'Open'.

Un bout de code correspondant à ce qui doit se passer lors de l'ouverture de ce fichier va s'incrire dans la page.

Entre Private Sub Workbook_Open() et End Sub, tu inscris les instructions qui t'intéressent à l'ouverture de ton fichier.

Pour appeler une macro, il suffit d'inscrire le nom de celle ci.

En espérant que cela te dépanne.


Abel.
 

_V1nce_

XLDnaute Nouveau
Re : Executer une macro automatiquement

Bonjour à tous,
Je me permets de déterrer ce topic plutôt que d'en recréé un vue que la problématique est semblable. J'aimerai effectuer le même type de manipulation, et à ce titre j'aurai 2 questions:

1) Idéalement, j'aimerai que Si la case D5=non alors on masque les lignes 36 à 51. Le problème c'est que je ne trouve pas la formulation pour le "=non". Du coup, j'ai mis en D35 la formule =0 si C35= "non" ou =1 si "oui". Du coup, si la case est égale à 0 alors on masque les lignes.

J'ai donc ce petit bout de code:

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sub Effluents()
If Range("d35") = 0 Then
Rows("36:51").EntireRow.Hidden = True
Else
Rows("36:51").EntireRow.Hidden = False
End If
End Sub

2) J'aimerai comme pour le cas ci dessus, que cette macro fonctionne de manière autommatique, elle marche pour le moment uniquement à l'aide d'un bouton d'action. J'aimerai donc que lorsque l'utilisateur selectionne non, les lignes se masquent automatiquement, et reviennent lorsque qu'il sélectionne oui.

J'ai donc appliqué la méthode explicitée plus haut, à savoir, sélectionner la feuille "thisworkbook", choisir en haut à gauche dans la selection:"Workbook" et j'ai mis "SheetActivate" dans la partie droite, en pensant que le simple fait d'avoir la feuille active rende la macro automatique. Mais bien entendu, cela ne marche pas...

Nul doute de vous préciser que je suis débutant en VBA et que l'aide de personnes plus aguerries sera la bienvenue :)
Bonne journée!
 
Dernière modification par un modérateur:

NezQuiCoule

XLDnaute Occasionnel
Re : Executer une macro automatiquement

Bonjour Vince,

Vous y étiez presque !

1) Remplacer If Range("d35") = 0 Then par If Range("d35") = "non"

2) Sélectionnez plutôt la feuille, puis sélectionnez "Worksheet" et enfin dans la partie droite, saisir "Change"
Copiez votre code avec la modification en 1) et ça devrait marcher.

A+
 

_V1nce_

XLDnaute Nouveau
Re : Executer une macro automatiquement

Bonsoir, merci pour vos réponses.
J'ai d’abord tenté la première méthode, mais le message d'erreur suivant apparait à chaque changement sur la feuille:"Erreur de compilation End Sub attendu" Alors que j'ai bien terminé le code par "End Sub", cf:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Sub Effluents()
If Range("d35") = 0 Then
Rows("36:51").EntireRow.Hidden = True
Else
Rows("36:51").EntireRow.Hidden = False
End If
End Sub

Pour la deuxième méthode, peut-être que j'ai loupé quelque chose car les lignes ne se masquent pas automatiquement.

Je me permets de joindre le fichier au cas où:

Pour info, petites modifs: la case "oui/non" est en C23, les lignes à masquer sont de L24 à L31.
Merci par avance et bonne soirée!
 

Pièces jointes

  • Test.xlsm
    17.4 KB · Affichages: 90
  • Test.xlsm
    17.4 KB · Affichages: 88

NezQuiCoule

XLDnaute Occasionnel
Re : Executer une macro automatiquement

Bonjour,

Effectivement, vous avez 2 instructions Sub en début de code, il faut supprimer la ligne "Sub Effluents()"

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Range("c23") = "non" Then
    Rows("24:31").EntireRow.Hidden = True
  Else
    Rows("24:31").EntireRow.Hidden = False
  End If
End Sub

A+

Edit : Attention, VBA prend en compte les majuscules, donc non est différent de Non, faites attention de bien faire correspondre la cellule C23 avec le code proposé
 
Dernière édition:

Discussions similaires