Lancement automatique d'une macro
Fermé
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
-
9 avril 2020 à 12:20
gurumiam Messages postés 16 Date d'inscription lundi 6 avril 2020 Statut Membre Dernière intervention 18 août 2021 - 13 avril 2020 à 18:45
gurumiam Messages postés 16 Date d'inscription lundi 6 avril 2020 Statut Membre Dernière intervention 18 août 2021 - 13 avril 2020 à 18:45
A voir également:
- Lancement automatique d'une macro
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Message automatique thunderbird - Guide
- Macro word - Guide
- Logiciel de sauvegarde automatique gratuit - Guide
12 réponses
Mike-31
Messages postés
18352
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 décembre 2024
5 110
9 avril 2020 à 12:53
9 avril 2020 à 12:53
Bonjour,
déjà il faut savoir si ta macro fonctionne parfaitement avec un déclenchement exemple par bouton
ensuite si ta macro est sur un module dans Worksheet_Change il faut appeler la macro
Call nom de la macro
des codes spécifiques créé dans un module ne fonctionne pas de la même façon sur une Sheet exemple ActiveCell dans un module peu être Target dans Worksheet
déjà il faut savoir si ta macro fonctionne parfaitement avec un déclenchement exemple par bouton
ensuite si ta macro est sur un module dans Worksheet_Change il faut appeler la macro
Call nom de la macro
des codes spécifiques créé dans un module ne fonctionne pas de la même façon sur une Sheet exemple ActiveCell dans un module peu être Target dans Worksheet
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
9 avril 2020 à 13:36
9 avril 2020 à 13:36
effectivement elle ne marche pas avec un bouton...
pour créer les macros j'ai simplement ouvert Visual Basic et entrer les codes correspondants dans chaque onglet (je ne suis pas sûre que ça réponde à ta question ?)
en voulant vérifier les façons d'activer la macro, je me suis rendu compte qu'il manque un élément... peut-être que tu peux aussi m'aider à la corriger:
je souhaite masquer des lignes en fonction de la valeur d'une cellule d'une autre feuille, ma macro répond à cette demande, mais une fois que des lignes ont été masquées elle ne les ré-affiche pas alors que la cellule de référence est remplie. J'ai pensé ajouter une macro pour faire l'inverse, mais je me demande si je ne peux pas simplement modifier celle-ci:
Sub masquer_ligne_vide()
Dim Cel As Range
Dim C As Byte
For C = 6 To 34
For Each Cel In Range(Cells(C, 6), Cells(C, 34))
If Cel.Value <> "" And Cel.Value <> 0 Then GoTo suite1
Next Cel
Rows(C).Hidden = True
suite1:
Next C
For C = 6 To 34
For Each Cel In Range(Cells(C, 6), Cells(C, 34))
If Cel.Value <> "" And Cel.Value <> 0 Then GoTo suite2
Next Cel
Rows(C).Hidden = True
suite2:
Next C
End Sub
pour créer les macros j'ai simplement ouvert Visual Basic et entrer les codes correspondants dans chaque onglet (je ne suis pas sûre que ça réponde à ta question ?)
en voulant vérifier les façons d'activer la macro, je me suis rendu compte qu'il manque un élément... peut-être que tu peux aussi m'aider à la corriger:
je souhaite masquer des lignes en fonction de la valeur d'une cellule d'une autre feuille, ma macro répond à cette demande, mais une fois que des lignes ont été masquées elle ne les ré-affiche pas alors que la cellule de référence est remplie. J'ai pensé ajouter une macro pour faire l'inverse, mais je me demande si je ne peux pas simplement modifier celle-ci:
Sub masquer_ligne_vide()
Dim Cel As Range
Dim C As Byte
For C = 6 To 34
For Each Cel In Range(Cells(C, 6), Cells(C, 34))
If Cel.Value <> "" And Cel.Value <> 0 Then GoTo suite1
Next Cel
Rows(C).Hidden = True
suite1:
Next C
For C = 6 To 34
For Each Cel In Range(Cells(C, 6), Cells(C, 34))
If Cel.Value <> "" And Cel.Value <> 0 Then GoTo suite2
Next Cel
Rows(C).Hidden = True
suite2:
Next C
End Sub
Mike-31
Messages postés
18352
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 décembre 2024
5 110
9 avril 2020 à 13:43
9 avril 2020 à 13:43
Re:
quel est la plage de déclenchement de ta macro si la valeur de la cellule change pour limiter la zone de déclenchement
quel est la plage de déclenchement de ta macro si la valeur de la cellule change pour limiter la zone de déclenchement
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
9 avril 2020 à 13:54
9 avril 2020 à 13:54
ah je me mélange, désolée tu auras remarqué que je n'y connais rien en VBA...
cette macro fais référence à la même feuille (plage de déclenchement = C6:C34), car elles se remplissent en fonction du contenu de la feuille à laquelle j'ai fais référence plus tôt...
cette macro fais référence à la même feuille (plage de déclenchement = C6:C34), car elles se remplissent en fonction du contenu de la feuille à laquelle j'ai fais référence plus tôt...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié le 9 avril 2020 à 14:19
Modifié le 9 avril 2020 à 14:19
Bonjour gurumiam,
Salut Mike, ca va ?
pour masquer les lignes vides dans la colonne C
On error resume next évite de planter si il n'y a pas de cellule danx C6;C34
Au passage
2/ Les "goto" de nos Grands pères ne sont utilisés que pour les gestion des erreurs
Salut Mike, ca va ?
pour masquer les lignes vides dans la colonne C
Sub masquer_si_vide()
On Error Resume Next
Range("C6:C34").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub
On error resume next évite de planter si il n'y a pas de cellule danx C6;C34
Au passage
2/ Les "goto" de nos Grands pères ne sont utilisés que pour les gestion des erreurs
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
9 avril 2020 à 14:20
9 avril 2020 à 14:20
Bonjour Michel,
Merci mais il ne se passe rien avec ça... j'ai remplacer l'intégralité de la macro par ta réponse, je n'aurais peut-être pas du ?
ou peut-être que ça vient du fait que mes cellules contiennent des formules ?
Merci mais il ne se passe rien avec ça... j'ai remplacer l'intégralité de la macro par ta réponse, je n'aurais peut-être pas du ?
ou peut-être que ça vient du fait que mes cellules contiennent des formules ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
9 avril 2020 à 14:32
9 avril 2020 à 14:32
ça vient du fait que mes cellules contiennent des formules ?
oui,
la valeur "" résultat d'une formule dans une cellule entraine que la cellule n'est pas vide ("rien" ce n'est pas "vide" pour parodier Raymond Devos)
il aurait utile de préciser ou mieux de joindre le fichier
oui,
la valeur "" résultat d'une formule dans une cellule entraine que la cellule n'est pas vide ("rien" ce n'est pas "vide" pour parodier Raymond Devos)
il aurait utile de préciser ou mieux de joindre le fichier
Mike-31
Messages postés
18352
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 décembre 2024
5 110
9 avril 2020 à 14:32
9 avril 2020 à 14:32
Re,
Bizarre que le code de Michel (salut) ne fonctionne pas
si ton code placé dans un module fonctionne, ajoute ce qui suit
clic droit sur l'onglet de ta feuille concernée/visualiser le code
et ce code
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C6:C34")) Is Nothing Then
Call masquer_ligne_vide
End If
End Sub
Bizarre que le code de Michel (salut) ne fonctionne pas
si ton code placé dans un module fonctionne, ajoute ce qui suit
clic droit sur l'onglet de ta feuille concernée/visualiser le code
et ce code
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C6:C34")) Is Nothing Then
Call masquer_ligne_vide
End If
End Sub
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
9 avril 2020 à 15:28
9 avril 2020 à 15:28
je suis un peu perdue...
cette dernière réponse permet d'automatiser l'exécution de la macro ou bien de la corriger ?
je l'ai ajouté à mon code de base et ça ne change rien... (la macro ne s'exécute pas suite aux modification et les lignes ne se ré-affichent pas non plus)
voici ce que j'ai en ajoutant le dernier code :
Sub masquer_ligne_vide()
Dim Cel As Range
Dim C As Byte
For C = 6 To 34
For Each Cel In Range(Cells(C, 6), Cells(C, 34))
If Cel.Value <> "" And Cel.Value <> 0 Then GoTo suite1
Next Cel
Rows(C).Hidden = True
suite1:
Next C
For C = 6 To 34
For Each Cel In Range(Cells(C, 6), Cells(C, 34))
If Cel.Value <> "" And Cel.Value <> 0 Then GoTo suite2
Next Cel
Rows(C).Hidden = True
suite2:
Next C
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C6:C34")) Is Nothing Then
Call masquer_ligne_vide
End If
End Sub
cette dernière réponse permet d'automatiser l'exécution de la macro ou bien de la corriger ?
je l'ai ajouté à mon code de base et ça ne change rien... (la macro ne s'exécute pas suite aux modification et les lignes ne se ré-affichent pas non plus)
voici ce que j'ai en ajoutant le dernier code :
Sub masquer_ligne_vide()
Dim Cel As Range
Dim C As Byte
For C = 6 To 34
For Each Cel In Range(Cells(C, 6), Cells(C, 34))
If Cel.Value <> "" And Cel.Value <> 0 Then GoTo suite1
Next Cel
Rows(C).Hidden = True
suite1:
Next C
For C = 6 To 34
For Each Cel In Range(Cells(C, 6), Cells(C, 34))
If Cel.Value <> "" And Cel.Value <> 0 Then GoTo suite2
Next Cel
Rows(C).Hidden = True
suite2:
Next C
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C6:C34")) Is Nothing Then
Call masquer_ligne_vide
End If
End Sub
Mike-31
Messages postés
18352
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
21 décembre 2024
5 110
Modifié le 9 avril 2020 à 15:45
Modifié le 9 avril 2020 à 15:45
Non, ce bout de code ne doit pas être dans un module mais dans les propriétés de ta feuille
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C6:C34")) Is Nothing Then
Call masquer_ligne_vide
End If
End Sub
supprime le du module et je t'ai écrit
clic droit sur l'onglet de ta feuille concernée/visualiser le code
et colle ce code à ce niveau et pas ailleurs
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C6:C34")) Is Nothing Then
Call masquer_ligne_vide
End If
End Sub
A+
Mike-31
Je suis responsable de ce que je dis, pas de ce que tu comprends...
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C6:C34")) Is Nothing Then
Call masquer_ligne_vide
End If
End Sub
supprime le du module et je t'ai écrit
clic droit sur l'onglet de ta feuille concernée/visualiser le code
et colle ce code à ce niveau et pas ailleurs
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C6:C34")) Is Nothing Then
Call masquer_ligne_vide
End If
End Sub
A+
Mike-31
Je suis responsable de ce que je dis, pas de ce que tu comprends...
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
9 avril 2020 à 15:54
9 avril 2020 à 15:54
je ne comprends pas, c'est bien ce que j'ai fait... quand je clic sur visualiser le code j'arrive directement sur le code (fenetre avec 2 menus déroulants : 1 général/worksheet et 1 déclarations/masquer ligne vide
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié le 9 avril 2020 à 16:39
Modifié le 9 avril 2020 à 16:39
tu as écris que dans C6:C34 que les valeurs inscrites étaient le résultat d'une formule d'où la valeur "" si la condition n'est pas remplie
DONC c'est la zone où tu effectues une saisie qui va déclencher la procédure pour masquer (et de plus: nouvelle demande : démasquer) les cellules de la colonne C6:C34
C'est ça ou pas ?
Pour en finir enfin, joins ta feuille de classeur en coloriant les différentes saisies possibles
nota:
Les macros événementielles comme worksheet_change ne sont pas compliquées mais demande une certaine habitude du VBA.... Alors, panique pas!
DONC c'est la zone où tu effectues une saisie qui va déclencher la procédure pour masquer (et de plus: nouvelle demande : démasquer) les cellules de la colonne C6:C34
C'est ça ou pas ?
Pour en finir enfin, joins ta feuille de classeur en coloriant les différentes saisies possibles
Mettre le classeur sans données confidentielles en pièce jointe sur
https://mon-partage.fr
Dans lien de téléchargement
faire un clic droit- copier l’adresse du lien et le coller dans votre message en cours sur ccm
nota:
Les macros événementielles comme worksheet_change ne sont pas compliquées mais demande une certaine habitude du VBA.... Alors, panique pas!
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
10 avril 2020 à 16:57
10 avril 2020 à 16:57
Bonjour Michel,
Merci pour ton aide, je sais que je ne demande pas le plus clairement^
Voici le lien de mon fichier sans données : https://mon-partage.fr/f/qXriQQFm/
Et un récap de mes besoins:
Utilisation du fichier : l'utilisateur va copier/coller des données en feuille "SM_Extract" dans la plage A3:DG32, il 1 à 30 lignes de données. Cela va remplir des "formulaires" en feuille "Answers" (le but du fichier est de rendre utilisables les données d'une extraction imbuvable, en faisant apparaître sous forme de "formulaire" les réponses d'un candidat, l'utilisateur peut avoir 1 à 30 candidats)
1/ Feuille "Results" : je souhaite que les lignes (contenant des formules) du tableau (D4 à AQ33) ne s'affichent que lorsqu'elles sont remplies et que cette macro s'exécute dès qu'une modification a été apportée à la feuille "SM_Extract" (dès que l'utilisateur a intégrer les données, mais que s'il décide de faire une nouvelle saisie ou de supprimer des données, mon tableau en feuille "Results" s'ajuste automatiquement). J'ai actuellement donc ajouté ce matin une colonne (B) qui affiche 1 si la ligne est à afficher ou pas et j'ai réussi à faire une macro "masquer_les_lignes" qui affiche ou masque mais qui ne s'exécute pas automatiquement lors des changements en feuille "SM_Extract".
2/ Feuille "Answers": je souhaite masquer les colonnes inutiles. En effet, j'ai 30 "formulaires" pour 30 candidats possibles, je souhaite masquer les "formulaires" qui ne sont pas remplis (si je n'ai que 3 candidats, je voudrais que seuls les 3 "formulaires" remplis soient visibles). J'ai une macro "masquer_formulaire" qui se base sur le contenu d'une cellule du "formulaire" pour le masquer, elle fonctionne très bien, mais avant de la recopier pour chaque "formulaire" je me demande s'il n'y a pas un moyen de lui dire de le faire pour tous, sachant que les "formulaires" démarrent toutes les 11 colonnes. Et bien-sûr il faudrait que ça se fasse automatiquement tout comme le besoin 1/ :)
3/ Excepté la macro que je mentionne en besoin 2/, toutes celles que j'ai actuellement dans mon fichier sont très longues à s'exécuter. Je suppose que c'est parce que je ne sais pas ce que je fais et qu'il y a un moyen moins lourd. Si elles doivent rester si longues, j'aimerai m'assurer que l'utilisateur attende bien la fin de l'exécution avant de s'énerver. J'ai donc tenté de faire un UserForm avec une barre de progression qui s'affiche pendant l'exécution d'une macro "Show_closed_questions" activée par bouton par l'utilisateur (encore autre chose oui... qui masque des ligne en feuille "Answers"), mais je n'arrive pas à intégrer cette barre dans les macros. L'idée c'est que l'utilisateur sache qu'il doit attendre, sachant que je ne suis pas fan du fait qu'il voit les lignes se masquer et s'afficher les unes après les autres en attendant... Le mieux bien-sûr serait d'avoir des macros qui mettent moins de temps à s'exécuter, et si ce n'est pas possible de "cacher" complètement la feuille en précisant qu'il faut attendre pendant l'exécution.
J'ai conscience de l'éloignement par rapport à ma demande initiale, notamment sur la quantité... je pense avoir passé bien 5 jours à essayer de régler ces différents problèmes alors tant qu'à faire je demande tout, qui ne tente rien !
J'espère avoir été précise et claire cette fois-ci,
Un grand merci d'avance pour ce que tu pourras m'apporter :)
Merci pour ton aide, je sais que je ne demande pas le plus clairement^
Voici le lien de mon fichier sans données : https://mon-partage.fr/f/qXriQQFm/
Et un récap de mes besoins:
Utilisation du fichier : l'utilisateur va copier/coller des données en feuille "SM_Extract" dans la plage A3:DG32, il 1 à 30 lignes de données. Cela va remplir des "formulaires" en feuille "Answers" (le but du fichier est de rendre utilisables les données d'une extraction imbuvable, en faisant apparaître sous forme de "formulaire" les réponses d'un candidat, l'utilisateur peut avoir 1 à 30 candidats)
1/ Feuille "Results" : je souhaite que les lignes (contenant des formules) du tableau (D4 à AQ33) ne s'affichent que lorsqu'elles sont remplies et que cette macro s'exécute dès qu'une modification a été apportée à la feuille "SM_Extract" (dès que l'utilisateur a intégrer les données, mais que s'il décide de faire une nouvelle saisie ou de supprimer des données, mon tableau en feuille "Results" s'ajuste automatiquement). J'ai actuellement donc ajouté ce matin une colonne (B) qui affiche 1 si la ligne est à afficher ou pas et j'ai réussi à faire une macro "masquer_les_lignes" qui affiche ou masque mais qui ne s'exécute pas automatiquement lors des changements en feuille "SM_Extract".
2/ Feuille "Answers": je souhaite masquer les colonnes inutiles. En effet, j'ai 30 "formulaires" pour 30 candidats possibles, je souhaite masquer les "formulaires" qui ne sont pas remplis (si je n'ai que 3 candidats, je voudrais que seuls les 3 "formulaires" remplis soient visibles). J'ai une macro "masquer_formulaire" qui se base sur le contenu d'une cellule du "formulaire" pour le masquer, elle fonctionne très bien, mais avant de la recopier pour chaque "formulaire" je me demande s'il n'y a pas un moyen de lui dire de le faire pour tous, sachant que les "formulaires" démarrent toutes les 11 colonnes. Et bien-sûr il faudrait que ça se fasse automatiquement tout comme le besoin 1/ :)
3/ Excepté la macro que je mentionne en besoin 2/, toutes celles que j'ai actuellement dans mon fichier sont très longues à s'exécuter. Je suppose que c'est parce que je ne sais pas ce que je fais et qu'il y a un moyen moins lourd. Si elles doivent rester si longues, j'aimerai m'assurer que l'utilisateur attende bien la fin de l'exécution avant de s'énerver. J'ai donc tenté de faire un UserForm avec une barre de progression qui s'affiche pendant l'exécution d'une macro "Show_closed_questions" activée par bouton par l'utilisateur (encore autre chose oui... qui masque des ligne en feuille "Answers"), mais je n'arrive pas à intégrer cette barre dans les macros. L'idée c'est que l'utilisateur sache qu'il doit attendre, sachant que je ne suis pas fan du fait qu'il voit les lignes se masquer et s'afficher les unes après les autres en attendant... Le mieux bien-sûr serait d'avoir des macros qui mettent moins de temps à s'exécuter, et si ce n'est pas possible de "cacher" complètement la feuille en précisant qu'il faut attendre pendant l'exécution.
J'ai conscience de l'éloignement par rapport à ma demande initiale, notamment sur la quantité... je pense avoir passé bien 5 jours à essayer de régler ces différents problèmes alors tant qu'à faire je demande tout, qui ne tente rien !
J'espère avoir été précise et claire cette fois-ci,
Un grand merci d'avance pour ce que tu pourras m'apporter :)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
11 avril 2020 à 07:55
11 avril 2020 à 07:55
Bonjour,
merci de m'envoyer ton classeur au format xlsm (xlsb refusé chez moi avec xl2007)
quelle est ta version Excel ? si 365, problème car cette version est caractérielle
merci de m'envoyer ton classeur au format xlsm (xlsb refusé chez moi avec xl2007)
quelle est ta version Excel ? si 365, problème car cette version est caractérielle
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
>
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
11 avril 2020 à 09:47
11 avril 2020 à 09:47
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
Modifié le 13 avril 2020 à 18:31
Modifié le 13 avril 2020 à 18:31
Bonjour,
Désolé, mais je ne connais pas Office 365 :-(
réponse tardive mais j'ai essayé de contacter des habitués pendant le WE ainsi que sur internet mais il y aurait pas mal de problèmes...
Désolé, mais je ne connais pas Office 365 :-(
réponse tardive mais j'ai essayé de contacter des habitués pendant le WE ainsi que sur internet mais il y aurait pas mal de problèmes...
gurumiam
Messages postés
16
Date d'inscription
lundi 6 avril 2020
Statut
Membre
Dernière intervention
18 août 2021
>
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
13 avril 2020 à 18:45
13 avril 2020 à 18:45
Je comprends, merci d'avoir essayé ! Je vais ajouter un bouton actualiser pour exécuter les macros (en espérant qu'il fonctionne ^^) et je tâcherai de préciser ma version excel pour les prochains posts ;)