Conditions sur toutes les feuilles d'un classeur
Résolu/Fermé
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
-
19 juin 2015 à 16:53
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 - 10 juil. 2015 à 15:09
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 - 10 juil. 2015 à 15:09
A voir également:
- Conditions sur toutes les feuilles d'un classeur
- Comment faire un livret avec des feuilles a4 - Guide
- Fusionner feuilles excel - Guide
- Copier une feuille excel dans un autre classeur avec liaison ✓ - Forum Excel
- Votre compte a été désactivé pour violation de nos conditions d’utilisation - Guide
- Libreoffice calc si plusieurs conditions ✓ - Forum Excel
13 réponses
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 454
19 juin 2015 à 17:45
19 juin 2015 à 17:45
Bonjour,
C'est quoi le problème... !
C'est quoi le problème... !
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
858
19 juin 2015 à 18:00
19 juin 2015 à 18:00
Bonjour à tous,
je crois que le problème c'est d'abord
et ensuite, c'est
qui devrait être placé après le FOR et en plus qui devrait s'écrire
cordialement
je crois que le problème c'est d'abord
Dim Feuille_énumérée As Integerqui devrait être
Dim Feuille_énumérée As Worksheet
et ensuite, c'est
Feuille_énumérée = ActiveWorkbook.Worksheets(Numération)
qui devrait être placé après le FOR et en plus qui devrait s'écrire
Set Feuille_énumérée = ActiveWorkbook.Worksheets(Numération)
cordialement
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
22 juin 2015 à 14:34
22 juin 2015 à 14:34
Bonjour,
Excusez-moi, c'était un peu lapidaire comme post...
Si on met "Set" avec "Feuille_énumérée As Worksheet"
Erreur d'execution '9': L'indice n'appartient pas à la sélection.
<jaune>Set Feuille_énumérée = ActiveWorkbook.Worksheets(Numération)</jaune>
Sans "Set" c'est la même Erreur.
Si au lieu de mettre:
J'utilise directement
bizarement la macro "tourne" si je mets
La feuille VeryHidden n'est pas dans la boucle (les boutons ne sont pas effacés).
Par contre les boutons sont effacés sur toutes les feuilles ou ils sont présents, mais ne sont rajoutés (maro Call) que sur la première feuille.
Est-ce que le fait de ne pas sélectionner chaque feuille avant de demander une action a une influence ?
Lo.
Excusez-moi, c'était un peu lapidaire comme post...
Dim Énumération_Feuilles_Classeur As Integer Dim Feuille_énumérée As Worksheet Dim Numération As Integer Énumération_Feuilles_Classeur = ActiveWorkbook.Worksheets.Count Set Feuille_énumérée = ActiveWorkbook.Worksheets(Numération) For Numération = 1 To Énumération_Feuilles_Classeur If Feuille_énumérée.Visible = xlSheetVisible Then If Feuille_énumérée.Buttons.Count > 0 Then Feuille_énumérée.Buttons.Delete Call Créer_Boutons_Environ MsgBox Feuille_énumérée.NAME 'pour test de la boucle End If End If Next Numération
Si on met "Set" avec "Feuille_énumérée As Worksheet"
Erreur d'execution '9': L'indice n'appartient pas à la sélection.
<jaune>Set Feuille_énumérée = ActiveWorkbook.Worksheets(Numération)</jaune>
Sans "Set" c'est la même Erreur.
Si au lieu de mettre:
Feuille_énumérée = ActiveWorkbook.Worksheets(Numération)
J'utilise directement
ActiveWorkbook.Worksheets(Numération)dans le code, il ne se passe rien.
bizarement la macro "tourne" si je mets
If Feuille_énumérée.Buttons.Count = 0 Then
La feuille VeryHidden n'est pas dans la boucle (les boutons ne sont pas effacés).
Par contre les boutons sont effacés sur toutes les feuilles ou ils sont présents, mais ne sont rajoutés (maro Call) que sur la première feuille.
Dim Énumération_Feuilles_Classeur As Integer 'Dim Feuille_énumérée As Worksheet Dim Numération As Integer Énumération_Feuilles_Classeur = ActiveWorkbook.Worksheets.Count 'Feuille_énumérée = ActiveWorkbook.Worksheets(Numération) For Numération = 1 To Énumération_Feuilles_Classeur If ActiveWorkbook.Worksheets(Numération).Visible = xlSheetVisible Then If ActiveWorkbook.Worksheets(Numération).Buttons.Count = 0 Then ActiveWorkbook.Worksheets(Numération).Buttons.Delete Call Créer_Boutons_Environ MsgBox ActiveWorkbook.Worksheets(Numération).NAME 'pour test de la boucle End If End If Next Numération
Est-ce que le fait de ne pas sélectionner chaque feuille avant de demander une action a une influence ?
Lo.
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
858
22 juin 2015 à 15:21
22 juin 2015 à 15:21
Bonjour,
Normal que tu aies une Erreur d'execution '9' vu que tu n'as pas mis
Numération est indéfini avant la boucle FOR.
Je vois que tu as changé de code en fin de message. Il doit fonctionner au niveau de la sélection de feuille.
Pour la création des boutons, il faudrait connaître le code de Créer_Boutons_Environ.
Sinon, tu passes la feuille concernée en paramètre de ton appel.
cordialement
Normal que tu aies une Erreur d'execution '9' vu que tu n'as pas mis
Set Feuille_énumérée = ActiveWorkbook.Worksheets(Numération)à l'intérieur de la boucle FOR.
Numération est indéfini avant la boucle FOR.
Je vois que tu as changé de code en fin de message. Il doit fonctionner au niveau de la sélection de feuille.
Pour la création des boutons, il faudrait connaître le code de Créer_Boutons_Environ.
Sinon, tu passes la feuille concernée en paramètre de ton appel.
cordialement
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
>
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
22 juin 2015 à 17:56
22 juin 2015 à 17:56
Bonjour,
La macro
Et
Oui, ça appelle beaucoup dans mes classeurs ! Mais ça me permet de pouvoir réutiliser du code dans d'autres macros et éviter des répétitions...
Lo.
La macro
Créer_Boutons_Environcrée une suite de boutons de ce type:
ActiveSheet.Buttons.Add(3, 3, 57, 47).Select Selection.OnAction = "Créer_Nom_Repertoire" Selection.Characters.Text = "Créer les noms" Call Arial_Normal_8 ' VBA Module_Boutons ActiveSheet.Buttons.Add(60.75, 3, 57, 47).Select Selection.OnAction = "Créer_Repertoires" Selection.Characters.Text = "Créer les répertoires" Call Arial_Normal_8 ' VBA Module_Boutons
Et
Call Arial_Normal_8formate le texte du bouton.
Oui, ça appelle beaucoup dans mes classeurs ! Mais ça me permet de pouvoir réutiliser du code dans d'autres macros et éviter des répétitions...
Lo.
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
>
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
22 juin 2015 à 18:16
22 juin 2015 à 18:16
Pour être vraiment complet
Il s'agit au final de personnaliser une barre de boutons selon l'utilisateur...
Sub Changer_les_Boutons()est déjà appelée par une autre macro, ce que explique le terme Environ.
Sub User_Names() Dim Application_User_Name, Environnement_User_Name As String Application_User_Name = Application.UserName Environnement_User_Name = Environ("UserName") 'MsgBox "Application: " & Chr(10) & Application_User_Name 'MsgBox "Environnement: " & Chr(10) & Environnement_User_Name If Application_User_Name = "Jamon MANTEQUILLA" Or Environnement_User_Name = "SESSION_JM" Then 'MsgBox "Utilisateur: " & Chr(10) & "Jamon MANTEQUILLA" Else Call Changer_les_Boutons End If End Sub
Il s'agit au final de personnaliser une barre de boutons selon l'utilisateur...
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
>
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
22 juin 2015 à 18:39
22 juin 2015 à 18:39
Je viens de faire un essai avec
Et la macro ne fonctionne qu'une fois, si on la rappelle, il ne se passe rien.
Elle n'efface pas les boutons qu'elle a créé (appelé).
Il faut que j'en ajoute de nouveaux pour qu'elle les efface...
Setdans
For, la boucle fonctionne, efface les boutons, mais ne les recrée que dans la feuille active.
Et la macro ne fonctionne qu'une fois, si on la rappelle, il ne se passe rien.
Elle n'efface pas les boutons qu'elle a créé (appelé).
Il faut que j'en ajoute de nouveaux pour qu'elle les efface...
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
>
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
22 juin 2015 à 19:01
22 juin 2015 à 19:01
Pour l'énigme des boutons qui ne s'effacent pas, c'est résolu.
A la fin de la macro
Apparemment le fait de grouper les boutons doit changer quelque-chose qui l'empêche de les effacer...
A la fin de la macro
Créer_Boutons_Environil y a les instructions suivantes:
ActiveSheet.Buttons.Select Selection.ShapeRange.Group.Select Selection.Placement = xlFreeFloating
Apparemment le fait de grouper les boutons doit changer quelque-chose qui l'empêche de les effacer...
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 454
22 juin 2015 à 14:42
22 juin 2015 à 14:42
Bonjour,
Ce que vous désirez : effacer le bouton de commande qui peut se trouver sur une feuille visible du classeur ...Oui / Non... ?
Que faites-vous des feuilles masquées (invisible) ...?
Ce que vous désirez : effacer le bouton de commande qui peut se trouver sur une feuille visible du classeur ...Oui / Non... ?
Que faites-vous des feuilles masquées (invisible) ...?
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
22 juin 2015 à 15:08
22 juin 2015 à 15:08
Bonjour,
Je veux "scanner" toutes les feuilles visibles du classeur actif.
Si il existe des boutons, les effacer et appeler une maro qui en recrée de nouveaux.
Pas de création de bouton, s'il n'y en avait pas auparavant sur la feuille.
On ne touche pas à l'état visible/invisible, c'est juste un argument de sélection.
Lo.
Je veux "scanner" toutes les feuilles visibles du classeur actif.
Si il existe des boutons, les effacer et appeler une maro qui en recrée de nouveaux.
Pas de création de bouton, s'il n'y en avait pas auparavant sur la feuille.
On ne touche pas à l'état visible/invisible, c'est juste un argument de sélection.
Lo.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 454
Modifié par Le Pingou le 22/06/2015 à 15:22
Modifié par Le Pingou le 22/06/2015 à 15:22
Bonjour,
Essayer une fois avec cette procédure :
Note: c'est prévu pour un bouton par feuille...!
Salutations.
Le Pingou
Essayer une fois avec cette procédure :
Sub testbtcmde() Dim c As Object For Each c In Worksheets If c.Visible = True Then If c.Shapes.Count > 0 Then c.Shapes.Item(1).Delete Call Créer_Boutons_Environ MsgBox c.Name 'pour test de la boucle End If End If Next c End Sub
Note: c'est prévu pour un bouton par feuille...!
Salutations.
Le Pingou
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
22 juin 2015 à 17:36
22 juin 2015 à 17:36
J'ai un problème avec Shapes qui englobe trop d'objets.
Beaucoup trop de mauvaises surprises qui m'ont fait préférer Buttons.
Petite modif pour effacer tous les boutons et test de la macro proposée :
L'effacement marche sur toutes les feuilles.
Mais les boutons ne sont "reconstruits" que sur la première feuille du classeur.
Note:
Lo.
Beaucoup trop de mauvaises surprises qui m'ont fait préférer Buttons.
Petite modif pour effacer tous les boutons et test de la macro proposée :
Sub testbtcmde() Dim c As Object Dim obj As Object For Each c In Worksheets If c.Visible = True Then If c.Shapes.Count > 0 Then 'c.Shapes.Item(1).Delete For Each obj In c.Shapes obj.Delete Next obj Call Créer_Boutons_Environ MsgBox c.NAME 'pour test de la boucle End If End If Next c End Sub
L'effacement marche sur toutes les feuilles.
Mais les boutons ne sont "reconstruits" que sur la première feuille du classeur.
Note:
MsgBox c.NAMEn'affiche que les feuilles avec boutons, donc traitées par la macro, ce qui est déjà bon signe...
Lo.
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
858
>
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
22 juin 2015 à 18:59
22 juin 2015 à 18:59
Bonjour,
essaye avec le passage de paramètre :
et l'appel :
cordialement
essaye avec le passage de paramètre :
Sub Créer_Boutons_Environ(sh As Worksheet)
With sh.Buttons.Add(3, 3, 57, 47)
.OnAction = "Créer_Nom_Repertoire"
.Characters.Text = "Créer les noms"
Call Arial_Normal_8 ' VBA Module_Boutons
End With
With sh.Buttons.Add(60.75, 3, 57, 47)
.OnAction = "Créer_Repertoires"
.Characters.Text = "Créer les répertoires"
Call Arial_Normal_8 ' VBA Module_Boutons
End With
End Sub
et l'appel :
Sub testbtcmde()
Dim c As Object
Dim obj As Object
For Each c In Worksheets
If c.Visible = True Then
If c.Shapes.Count > 0 Then
'c.Shapes.Item(1).Delete
For Each obj In c.Shapes
obj.Delete
Next obj
Call Créer_Boutons_Environ(c)
MsgBox c.Name 'pour test de la boucle
End If
End If
Next c
End Sub
cordialement
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
858
22 juin 2015 à 19:07
22 juin 2015 à 19:07
je n'ai pas ton problème d'effacement des boutons créés par la macro.
essaie le code que je t'ai envoyé.
il fonctionne chez moi comme j'ai compris que tu voulais qu'il le fasse.
cordialement
essaie le code que je t'ai envoyé.
il fonctionne chez moi comme j'ai compris que tu voulais qu'il le fasse.
cordialement
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 454
22 juin 2015 à 21:13
22 juin 2015 à 21:13
Bonjour dhaze,
Je pense que vous auriez dû préciser qu'il y avait d'autres types de contrôles sur une feuille et que seules les [CommandButton] doivent être effacées.
Dans ce cas je dois modifier ma proposition.
Je pense que vous auriez dû préciser qu'il y avait d'autres types de contrôles sur une feuille et que seules les [CommandButton] doivent être effacées.
Dans ce cas je dois modifier ma proposition.
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 454
22 juin 2015 à 21:55
22 juin 2015 à 21:55
Bonjour,
En principe la procédure modifiée efface uniquement les boutons de commande.
En principe la procédure modifiée efface uniquement les boutons de commande.
Sub testbtcmde() Dim c As Object Dim Obj As OLEObject For Each c In Worksheets If c.Visible = True Then For Each Obj In c.OLEObjects ' contrôle si bouton de commande If TypeOf Obj.Object Is MSForms.CommandButton Then Obj.Delete Call Créer_Boutons_Environ MsgBox c.Name 'pour test de la boucle End If Next Obj End If Next c End Sub
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
26 juin 2015 à 18:52
26 juin 2015 à 18:52
Bonjour,
Merci pour vos propositions, malheureusement je suis bloquée par une autre macro.
Je voudrais pouvoir résoudre ce problème avant de reprendre celle-ci...
Je n'ai pas abandonné ;-)
Bon WE
Lo.
Merci pour vos propositions, malheureusement je suis bloquée par une autre macro.
Je voudrais pouvoir résoudre ce problème avant de reprendre celle-ci...
Je n'ai pas abandonné ;-)
Bon WE
Lo.
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 454
Modifié par Le Pingou le 26/06/2015 à 22:16
Modifié par Le Pingou le 26/06/2015 à 22:16
Bonjour,
Eh bien il est nécessaire d'avoir plus de détails.... !
Merci de préciser si la dernière procédure que j'ai proposée fonctionne correctement.
Salutations.
Le Pingou
Eh bien il est nécessaire d'avoir plus de détails.... !
Merci de préciser si la dernière procédure que j'ai proposée fonctionne correctement.
Salutations.
Le Pingou
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
9 juil. 2015 à 18:28
9 juil. 2015 à 18:28
Bonjour,
Comme je vous le disais j'étais bloquée sur une autre macro de mon tableau. Ce n'est pas résolu, mais je ne voulais pas passée pour ingrate, et vous donner l'impression que vous aviez travaillés pour rien...
J'ai fait des essais suite à vos réponses, et j'arrive à quelque chose qui fonctionne et semble stable pour la version avec paramètre.
L'appel de la macro "Call Arial_Normal_8" ne fonctionne plus avec cette méthode, j'ai donc rajoutée "en dur" en fin de macro le formatage du texte des boutons.
Quand à la version sans paramètre, j'ai une Erreur :
Lo.
Comme je vous le disais j'étais bloquée sur une autre macro de mon tableau. Ce n'est pas résolu, mais je ne voulais pas passée pour ingrate, et vous donner l'impression que vous aviez travaillés pour rien...
J'ai fait des essais suite à vos réponses, et j'arrive à quelque chose qui fonctionne et semble stable pour la version avec paramètre.
L'appel de la macro "Call Arial_Normal_8" ne fonctionne plus avec cette méthode, j'ai donc rajoutée "en dur" en fin de macro le formatage du texte des boutons.
Sub Changer_les_Boutons_Param() Dim c As Object Dim Obj As Object Application.ScreenUpdating = False For Each c In Worksheets If c.Visible = True Then If c.Shapes.Count > 0 Then For Each Obj In c.Shapes Obj.Delete Next Obj Call Créer_Boutons_Environ_Param(c) End If End If Next c Application.ScreenUpdating = True End Sub Sub Créer_Boutons_Environ_Param(sh As Worksheet) With sh.buttons.Add(3, 3, 57, 47) .OnAction = "Créer_Nom_Repertoire" .Characters.Text = "Créer les noms" End With With sh.buttons.Add(60.75, 3, 57, 47) .OnAction = "Créer_Repertoires" .Characters.Text = "Créer les répertoires" End With With sh.buttons.Font .NAME = "Arial" .FontStyle = "Normal" .Size = 8 End With End Sub
Quand à la version sans paramètre, j'ai une Erreur :
Erreur de compilation:
Type défini par l'utilisateur non défini
>TypeOf Obj.Object Is MSForms.CommandButton<
Lo.
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 454
10 juil. 2015 à 00:05
10 juil. 2015 à 00:05
Bonjour,
Merci pour les informations.
Concerne : Erreur de compilation:
Type défini par l'utilisateur non défini
Il s'agit certainement, que la bibliothèque [MicrosoftForms 2.0 ObjectLibrary] est manquante.
Concerne bouton de commande, n'ayant pas de précision sur le type de bouton que vous utilisez j'ai admis le type [MSForms] là est peut-être le problème.
Merci pour les informations.
Concerne : Erreur de compilation:
Type défini par l'utilisateur non défini
Il s'agit certainement, que la bibliothèque [MicrosoftForms 2.0 ObjectLibrary] est manquante.
Concerne bouton de commande, n'ayant pas de précision sur le type de bouton que vous utilisez j'ai admis le type [MSForms] là est peut-être le problème.
dhaze
Messages postés
109
Date d'inscription
mardi 27 septembre 2011
Statut
Membre
Dernière intervention
6 février 2020
Modifié par dhaze le 10/07/2015 à 11:38
Modifié par dhaze le 10/07/2015 à 11:38
Bonjour,
Effectivement, encore un oubli de ma part.
Là ça fonctionne avec ceci en prologue :
Et c'est vrai, toutes mes excuses pour cela, j'aurais due bien préciser au départ que les boutons de ce tableau sont des boutons(Contrôle de formulaire) et non des boutons de commande(Contrôle ActivX).
Ce qui rend cette macro inopérante...
Lo.
Effectivement, encore un oubli de ma part.
Là ça fonctionne avec ceci en prologue :
Sub Activer_Références_VBProject() With ThisWorkbook.VBProject.References ' > Microsoft Forms 2.0 Object Library : .AddFromGuid GUID:="{0D452EE1-E08F-101A-852E-02608C4D0BB4}", Major:=2, Minor:=0 End With End Sub
Et c'est vrai, toutes mes excuses pour cela, j'aurais due bien préciser au départ que les boutons de ce tableau sont des boutons(Contrôle de formulaire) et non des boutons de commande(Contrôle ActivX).
Ce qui rend cette macro inopérante...
Lo.
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 454
10 juil. 2015 à 15:09
10 juil. 2015 à 15:09
Bonjour,
Merci du retour.
L'important est que votre application fonctionne correctement chez vous.
Merci du retour.
L'important est que votre application fonctionne correctement chez vous.