Lancement conditionnelle d'une macro?
Résolu/Fermé
castelem
Messages postés
23
Date d'inscription
mercredi 8 août 2007
Statut
Membre
Dernière intervention
12 septembre 2009
-
19 oct. 2007 à 17:44
castelem Messages postés 23 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 12 septembre 2009 - 22 oct. 2007 à 00:31
castelem Messages postés 23 Date d'inscription mercredi 8 août 2007 Statut Membre Dernière intervention 12 septembre 2009 - 22 oct. 2007 à 00:31
A voir également:
- Lancement conditionnelle d'une macro?
- Mise en forme conditionnelle excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Excel liste déroulante conditionnelle - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
5 réponses
Papou93
Messages postés
146
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
5 juin 2012
59
19 oct. 2007 à 20:51
19 oct. 2007 à 20:51
Bonjour castelem,
Voici un exemple de macro que tu peux appeler dans l'événement "Change" ou "SelectionChange" de ta feuille de calcul :
Dans cette macro, les données sont supposées être dans les cellules "A1" à "A10". Il est facile d'adapter cette plage à ton cas particulier.
Nota : si la plage est constituée de cellules non contigües, alors je te conseille de lui donner un nom et de faire référence à ce nom.
espérant avoir répondu,
Cordialement.
Voici un exemple de macro que tu peux appeler dans l'événement "Change" ou "SelectionChange" de ta feuille de calcul :
Sub FinSaisie() Dim Fin As Boolean Fin = False For Each cel In Range("A1:A10") If cel.Value Then Fin = True Else Fin = False Next End Sub
Dans cette macro, les données sont supposées être dans les cellules "A1" à "A10". Il est facile d'adapter cette plage à ton cas particulier.
Nota : si la plage est constituée de cellules non contigües, alors je te conseille de lui donner un nom et de faire référence à ce nom.
espérant avoir répondu,
Cordialement.
Bonjour,
Je suis vraiment un super novice en macro sous Excel...
Je me suis astreint à écrir le détail de mes procédures/hypothèses pour que tu comprennes où j'en suis en terme de conniassance et où ça cloche.
Mon objectif : lancer le tri croissant d'un tableau (col. a= étiquette, col. b=valeur numérique des étiqettes) dés que toutes les valeurs ont été saisies.
J'ai trois questions de base par rapport à ton code :
question 1 :
"appeler dans l'événement "Change" ou "SelectionChange" de ta feuille de calcul ", ça signifie quoi?
- est-ce que cela signifie aller dans outils/Macro/VBE
- double-cliquer dans la fenêtre VBAprojects sur la feuille qui comprend la plage de cellules utiles A1:A10
- séléctionner "Worksheet" dans le 1er onglet onglet de la fenêtre qui s'ouvre puis "Change" dans le second onglet
on obtient alors :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
- A l'intérieur de cette expression, on copie-colle alors ta formule :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sub FinSaisie()
Dim Fin As Boolean
Fin = False
For Each cel In Range("A1:A10")
If cel.Value Then Fin = True Else Fin = False
Next
End Sub
End Sub
question 2 :
est-ce que Sub FinSaisie() fait directement référence à la macro que je veux déclencher de manière conditionnelle (tri croissant des valeursers d'un tableau) et qui s'appellerait alors "FinSaisie" ou est-ce uniquement le nom de la procédure conditionnelle qui suit? dans ce dernier cas, où est-il fait référence à ma macro "tri" pour la déclencher en fonction des conditions de ton code?
Question 3 : je ne comprends pas dans le code en quoi/comment le fait d'obtenir des valeurs True pour chaque cellule de la plage Range peut déclencher ma macro de tri croissant des valeurs de la plage - quelque soit son nom, "FinSaisie" ou "tri"-
J'ai essayé le scénario qui consiste à renommer ma macro de tri en "FinSaisie",mais ça m'adffiche une erreur de compillation et une fléche jaune devant l'éévement "Change"...
Question 4 :
Quelles sont les étapes de cette automatisaisation conditionnelle du déclenchement de ma macro ?
Scénario 1 ?
1) je crée ma macro sur un champ de cellules renseignées : je déclenche l'enregistrement de la macro, je saisis les valeurs, je lance un tri croissant , j'insère un graphique dans la feuille à partir des valeurs et je stoppe l'enregistrement de la macro
2) j'insére le code que tu m'as transmis dans le VBE, j'efface le graphique et la plage de donnée, je remets mes étiquettes de données dans l'ordre initial avant e tri des étiquettes en fonction de leur valeur puis je sauvegarde pour compiler.
3) je test en réouvrant ma feuille
Scénario 2 ?
Ce que j'écris est un non sens total, et ça marche autrement!
Je suis trés motivé pour apprendre, j'espère que tu accpeteras de rentrer dans ce niveau de détail pour que je puisse comprendre ..
Un grand merci!
Je suis vraiment un super novice en macro sous Excel...
Je me suis astreint à écrir le détail de mes procédures/hypothèses pour que tu comprennes où j'en suis en terme de conniassance et où ça cloche.
Mon objectif : lancer le tri croissant d'un tableau (col. a= étiquette, col. b=valeur numérique des étiqettes) dés que toutes les valeurs ont été saisies.
J'ai trois questions de base par rapport à ton code :
question 1 :
"appeler dans l'événement "Change" ou "SelectionChange" de ta feuille de calcul ", ça signifie quoi?
- est-ce que cela signifie aller dans outils/Macro/VBE
- double-cliquer dans la fenêtre VBAprojects sur la feuille qui comprend la plage de cellules utiles A1:A10
- séléctionner "Worksheet" dans le 1er onglet onglet de la fenêtre qui s'ouvre puis "Change" dans le second onglet
on obtient alors :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
- A l'intérieur de cette expression, on copie-colle alors ta formule :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sub FinSaisie()
Dim Fin As Boolean
Fin = False
For Each cel In Range("A1:A10")
If cel.Value Then Fin = True Else Fin = False
Next
End Sub
End Sub
question 2 :
est-ce que Sub FinSaisie() fait directement référence à la macro que je veux déclencher de manière conditionnelle (tri croissant des valeursers d'un tableau) et qui s'appellerait alors "FinSaisie" ou est-ce uniquement le nom de la procédure conditionnelle qui suit? dans ce dernier cas, où est-il fait référence à ma macro "tri" pour la déclencher en fonction des conditions de ton code?
Question 3 : je ne comprends pas dans le code en quoi/comment le fait d'obtenir des valeurs True pour chaque cellule de la plage Range peut déclencher ma macro de tri croissant des valeurs de la plage - quelque soit son nom, "FinSaisie" ou "tri"-
J'ai essayé le scénario qui consiste à renommer ma macro de tri en "FinSaisie",mais ça m'adffiche une erreur de compillation et une fléche jaune devant l'éévement "Change"...
Question 4 :
Quelles sont les étapes de cette automatisaisation conditionnelle du déclenchement de ma macro ?
Scénario 1 ?
1) je crée ma macro sur un champ de cellules renseignées : je déclenche l'enregistrement de la macro, je saisis les valeurs, je lance un tri croissant , j'insère un graphique dans la feuille à partir des valeurs et je stoppe l'enregistrement de la macro
2) j'insére le code que tu m'as transmis dans le VBE, j'efface le graphique et la plage de donnée, je remets mes étiquettes de données dans l'ordre initial avant e tri des étiquettes en fonction de leur valeur puis je sauvegarde pour compiler.
3) je test en réouvrant ma feuille
Scénario 2 ?
Ce que j'écris est un non sens total, et ça marche autrement!
Je suis trés motivé pour apprendre, j'espère que tu accpeteras de rentrer dans ce niveau de détail pour que je puisse comprendre ..
Un grand merci!
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
20 oct. 2007 à 15:45
20 oct. 2007 à 15:45
Bonjour,
je répond à la place de papou93 que tu puisses avancer un peu.
1) Tu as bon sur l'endroit où saisir le code sur evenement change, mais il ne faut par réécrire sub FinSaisie() et le end sub correspondant à l'intérieur. ta procédure dans ce cas s'appelle Worksheet_SelectionChange(...)
Donc soit tu y colles le code, soit tu conserves ton autre procédure FinSaisie et tu l'appelles avec Call FinSaisie
2) papou a répondu à ta question : "automatiser le déclenchement d'une macro juste après que toutes les informations demandées à l'utilisateur ont été saisies dans les cellules prévues à cet effet.".
Il a pris comme exemple que la zone devant etre remplie est A1:A10, dès que cette condition est remplie tu as fin = true
Adapte la reference de la zone à tes besoins (en nommant cette zone comme il le suggere), et après la boucle de test ajoute un appel à ta procedure de tri.
3) Par contre je corrigerai un peu son code car, sans doute il l'a fait vite rapidement, il fait fin= true dès qu'une seule cellule est saisie.
Il faut partir de fin = true et dès qu'une cellule est vide on la passe à false (faux) ce qui donne :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Fin As Boolean
Fin = True
For Each cel In Range("NomDeMaZoneATester")
If cel.Value = "" Then Fin = False
Next
if fin then call TrierMaAZone ' sous-entendu if fin = true
End Sub
Sub TrierMaAZone()
' ici le code de tri
End Sub
4) ta procedure se déclenchera toute seule à chaque saisie dans ta feuille.
Si les conditions sont remplies alors il y aura appel à ta procedure de tri
L'enregistrement qu'il te reste à faire est seulement sélection de ta zone à trier puis tri de cette zone.
eric
je répond à la place de papou93 que tu puisses avancer un peu.
1) Tu as bon sur l'endroit où saisir le code sur evenement change, mais il ne faut par réécrire sub FinSaisie() et le end sub correspondant à l'intérieur. ta procédure dans ce cas s'appelle Worksheet_SelectionChange(...)
Donc soit tu y colles le code, soit tu conserves ton autre procédure FinSaisie et tu l'appelles avec Call FinSaisie
2) papou a répondu à ta question : "automatiser le déclenchement d'une macro juste après que toutes les informations demandées à l'utilisateur ont été saisies dans les cellules prévues à cet effet.".
Il a pris comme exemple que la zone devant etre remplie est A1:A10, dès que cette condition est remplie tu as fin = true
Adapte la reference de la zone à tes besoins (en nommant cette zone comme il le suggere), et après la boucle de test ajoute un appel à ta procedure de tri.
3) Par contre je corrigerai un peu son code car, sans doute il l'a fait vite rapidement, il fait fin= true dès qu'une seule cellule est saisie.
Il faut partir de fin = true et dès qu'une cellule est vide on la passe à false (faux) ce qui donne :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Fin As Boolean
Fin = True
For Each cel In Range("NomDeMaZoneATester")
If cel.Value = "" Then Fin = False
Next
if fin then call TrierMaAZone ' sous-entendu if fin = true
End Sub
Sub TrierMaAZone()
' ici le code de tri
End Sub
4) ta procedure se déclenchera toute seule à chaque saisie dans ta feuille.
Si les conditions sont remplies alors il y aura appel à ta procedure de tri
L'enregistrement qu'il te reste à faire est seulement sélection de ta zone à trier puis tri de cette zone.
eric
Papou93
Messages postés
146
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
5 juin 2012
59
21 oct. 2007 à 10:52
21 oct. 2007 à 10:52
Bonjour à tous,
Merci eriiic d'avoir apporté ces précisions très pertinentes à castelem. J'ai effectivement répondu rapidement, car je devais m'absenter pour la journée !
Je confirme donc tes dires.
Cordialement.
Merci eriiic d'avoir apporté ces précisions très pertinentes à castelem. J'ai effectivement répondu rapidement, car je devais m'absenter pour la journée !
Je confirme donc tes dires.
Cordialement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
castelem
Messages postés
23
Date d'inscription
mercredi 8 août 2007
Statut
Membre
Dernière intervention
12 septembre 2009
2
22 oct. 2007 à 00:31
22 oct. 2007 à 00:31
Pour plus de clarté dans la résolution de ce problème, je renvoie la suite de cette discussion là où elle a continué :
transformat de valeurs excel par comparaison?appreciation= 1&key=85bf0d08267ee2f9ae604832c2873b0b
Merci.
transformat de valeurs excel par comparaison?appreciation= 1&key=85bf0d08267ee2f9ae604832c2873b0b
Merci.