XL 2010 Perte aléatoire de boutons sur lignes masquées/affichées

Orson83

XLDnaute Impliqué
Bonjour à tous,
Dans un processus de masquage/affichage de lignes, certains boutons (non activeX) présents sur certaines lignes se suppriment aléatoirement. Je ne comprends pas pourquoi alors même qu'ils sont paramétrés correctement (Format de Contrôle>Propriété> Déplacer et dimensionner avec les cellules). Ces boutons sont réalisés depuis le menu Développeur>Insérer bouton.
Auriez-vous une astuce pour forcer l'affichage de ces boutons lorsque je clique sur mon (autre) bouton "Afficher les lignes" ?
Merci pour votre aide.
Tchotchodu31
 
Solution
Le fil

VB:
Sub MasqueBouton()
Dim Shp As Shape
Dim i As Integer

'Boucle sur les bouton de la Feuil1 (A adapter)
'Si tu veux tout masquer cette boucle est inutile ==> For i =....
For i = 1 To 7 'Si tes numéros de bouton sont de 1 à 7 (A adapter)
    For Each Shp In Feuil1.Shapes
        If Shp.Name = "Button " & i Then Shp.Visible = False
    Next Shp
Next i
End Sub

Sub AfficheBouton()
Dim Shp As Shape
Dim i As Integer

'Boucle sur les bouton de la Feuil1 (A adapter)
'Si tu veux tout masquer cette boucle est inutile ==> For i =....
For i = 1 To 7 'Si tes numéros de bouton sont de 1 à 7 (A adapter)
    For Each Shp In Feuil1.Shapes
        If Shp.Name = "Button " & i Then Shp.Visible = True
    Next Shp
Next i
End Sub

Edit ...

Orson83

XLDnaute Impliqué
Le fil

@Staple1600 je t'ai répondu ici :

@Tchotchodu31 :

Oui c'est possible dans ton code ou celui de Staple1600
Avant de cacher tes lignes tu masques les boutons
VB:
Worksheets("Données_à_saisir").Shapes("Bouton 428").Visible = False

Et quand tu les démasques tu fais le contraire
VB:
Worksheets("Données_à_saisir").Shapes("Bouton 428").Visible = True

@Phil69970
Le fil,
SUPER et merci Phil69970 ! J'ai adapté le code mais comment rassembler les 7 images ?
Worksheets("Données").Shapes("Bouton 1, Bouton 2").Visible = False ' ça ne marche pas, je vous rassure
Faut-il 1 ligne par image ?
 

Staple1600

XLDnaute Barbatruc
Re

Donc pour les lecteurs du fil
Une macro pour afficher/masquer les boutons
(en espérant qu'il n'y ait que des boutons)
VB:
Sub MasqueAfficherBouton()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
If shp.Type = msoFormControl Then
shp.Visible = Not shp.Visible
End If
Next shp
End Sub
 

Phil69970

XLDnaute Barbatruc
Le fil

VB:
Sub MasqueBouton()
Dim Shp As Shape
Dim i As Integer

'Boucle sur les bouton de la Feuil1 (A adapter)
'Si tu veux tout masquer cette boucle est inutile ==> For i =....
For i = 1 To 7 'Si tes numéros de bouton sont de 1 à 7 (A adapter)
    For Each Shp In Feuil1.Shapes
        If Shp.Name = "Button " & i Then Shp.Visible = False
    Next Shp
Next i
End Sub

Sub AfficheBouton()
Dim Shp As Shape
Dim i As Integer

'Boucle sur les bouton de la Feuil1 (A adapter)
'Si tu veux tout masquer cette boucle est inutile ==> For i =....
For i = 1 To 7 'Si tes numéros de bouton sont de 1 à 7 (A adapter)
    For Each Shp In Feuil1.Shapes
        If Shp.Name = "Button " & i Then Shp.Visible = True
    Next Shp
Next i
End Sub

Edit : @Staple1600 je t'ai vu, tu as bougé...;)
Edit2: Astuce Si tu as que quelques boutons à masquer renomment ces boutons avec une numérotation pouvant être manipuler facilement exemple "Bouton 1" "Bouton 2" etc ..
Tu pourrais les manipuler avec la boucle For i =....

@Phil69970
 
Dernière édition:

Orson83

XLDnaute Impliqué
Le fil

VB:
Sub MasqueBouton()
Dim Shp As Shape
Dim i As Integer

'Boucle sur les bouton de la Feuil1 (A adapter)
'Si tu veux tout masquer cette boucle est inutile ==> For i =....
For i = 1 To 7 'Si tes numéros de bouton sont de 1 à 7 (A adapter)
    For Each Shp In Feuil1.Shapes
        If Shp.Name = "Button " & i Then Shp.Visible = False
    Next Shp
Next i
End Sub

Sub AfficheBouton()
Dim Shp As Shape
Dim i As Integer

'Boucle sur les bouton de la Feuil1 (A adapter)
'Si tu veux tout masquer cette boucle est inutile ==> For i =....
For i = 1 To 7 'Si tes numéros de bouton sont de 1 à 7 (A adapter)
    For Each Shp In Feuil1.Shapes
        If Shp.Name = "Button " & i Then Shp.Visible = True
    Next Shp
Next i
End Sub

Edit : @Staple1600 je t'ai vu, tu as bougé...;)

@Phil69970
Le fil,
Merci beaucoup Phil69970 pour ce code que j'ai adapté à mes boutons d'affichage/masquage. C'est du super travail.
Et mapomme il était où pendant que tu bossais dur et que je préparai un fichier pour rien ! 😂
Je plaisante bien sûr car je sais que vous êtes très très actifs sur ce forum.
Bon weekend à tous les participants de ce fil.
Tchotchodu département 31 ;)
 

Staple1600

XLDnaute Barbatruc
Re

=>Phil69970
En reprenant mon idée du message#22, je l'adapte comme suit aprés la lecture du message#213 (qui se trouve être le tien ;))
Donc toujours une macro All-in-one
(On masque et démasque avec une seule macro)
VB:
Sub MasqueAfficherBouton_bis()
Dim Shp As Shape
For Each Shp In Feuil1.Shapes
If Shp.Name Like "Button*" Then
Shp.Visible = Not Shp.Visible
End If
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

=>Phil69970
Et que penses-tu de ma All-in-one?
Elle est pas Vilaine, Ille, pardon elle, non ?
;)
PS: La question à laquelle je t'invitais à répondre plus bas dans le fil, c'était sur les avantages CommanButton (ActiveX) versus Button ( Formulaire)
(cf message avec une jolie photo ;))
 

Phil69970

XLDnaute Barbatruc
@Staple1600
Le CommanButton (ActiveX) a beaucoup plus d'option que le bouton formulaire et toutes les options sont manipulables en vba assez facilement je pense.

Ta solution est bien sauf si il y a 50 boutons et que l'on veut en masquer que les 20 premiers...
d’où ma précision .
Edit2: Astuce Si tu as que quelques boutons à masquer renomment ces boutons avec une numérotation pouvant être manipuler facilement exemple "Bouton 1" "Bouton 2" etc ..
Tu pourrais les manipuler avec la boucle For i =....
@Phil69970
 

Staple1600

XLDnaute Barbatruc
Re

[Hommage à Jean Schultheis ;)]
Précisions pour Précisions
Si on ne veut masquer que certains parmi tous alors je sors TopLeftCell ;)
Ici ne sont pris compte que les Boutons qui ont une affinité avec le 7.
VB:
Sub MasqueAfficherBouton_ter()
Dim Shp As Shape
For Each Shp In Feuil1.Shapes
If Shp.Name Like "Button*" Then
If Shp.TopLeftCell.Column = 7 Then
Shp.Visible = Not Shp.Visible
End If
End If
Next
End Sub
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote