Microsoft 365 si cellule vide, alors Masquer forme

MACx

XLDnaute Occasionnel
Bonjour,

Contexte :
J'ai en H13 une formule type =FILTRE(xxx;xxx) qui peut s'étendre verticalement jusqu'à 5 lignes, mais le plus souvent ce sont une ou deux lignes.
J'ai placé pour chaque ligne (de H13 à H17) deux formes rectangulaires (alignées aux colonnes K et M) qui me servent de boutons macro.

Besoin :
Selon le résultat du Filtre, j'ai besoin que le libellé de la forme corresponde à la valeur de sa cellule correspondante
Et j'ai également besoin que les formes soient masquées (ou non générées) si la valeur de sa cellule correspondante est vide.

L'idéal serait de générer automatiquement ces formes avec leur libellés correspondants selon et si la valeur de la cellule correspondante n'est pas vide...

J'ai un peu plus schématisé dans le fichier joint, en espérant mieux me faire comprendre.

Merci d'avance XLDnaute !
 

Pièces jointes

  • XLD_MACx_HideShape.xlsm
    23.7 KB · Affichages: 8
Solution
Bonjour MACx, Bernard,

En ligne 13 nommez le 1er bouton PREM_H13 et le 2ème DER_H13.

Faites de même pour les boutons des lignes 14 15 16 17.

Puis placez cette macro évènementielle dans le code de la feuille :
VB:
Private Sub Worksheet_Calculate()
Dim c As Range
For Each c In [H13:H17]
    DrawingObjects("PREM_" & c.Address(0, 0)).Visible = c.Text <> ""
    With DrawingObjects("DER_" & c.Address(0, 0))
        .Visible = c.Text <> ""
        .Text = "AJOUTER UN CONTRAT " & c.Text
    End With
Next
End Sub
Elle se déclenche quand une formule est recalculée.

A+

MACx

XLDnaute Occasionnel
Bonjour,
Merci pour ton retour, mais je vois que mon titre n'étais pas assez explicite malgré le corps de texte.
Je ne cherche pas à masquer des valeurs dans une cellule (mise en forme) mais des formes géométriques (rectangulaires) qui me servent de boutons VB, selon si la valeur de la cellule lui correspondant est vide ou pas.
Et le bouton en question devra contenir la valeur de cette cellule. 😅
Merci en tous cas.

Ceci dit j'étais parti sur cette "formule" mais ça ne me masque que les premiers boutons (première ligne) et pas les autres... Et je n'arrive pas à y inclure la valeur de la cellule dans le bouton

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("H13") = "" Then Me.Shapes("btn_gotoContratH13").Visible = (Cells(8, 13).Value = 1) And _
        Me.Shapes("btn_addNewH13").Visible = (Cells(8, 13).Value = 1)
        
    If Range("H14") = "" Then Me.Shapes("btn_gotoContratH14").Visible = (Cells(8, 14).Value = 1) And _
        Me.Shapes("btn_addNewH14").Visible = (Cells(8, 14).Value = 1)
        
    If Range("H15") = "" Then Me.Shapes("btn_gotoContratH15").Visible = (Cells(8, 15).Value = 1) And _
        Me.Shapes("btn_addNewH15").Visible = (Cells(8, 15).Value = 1)
        
    If Range("H16") = "" Then Me.Shapes("btn_gotoContratH16").Visible = (Cells(8, 16).Value = 1) And _
        Me.Shapes("btn_addNewH16").Visible = (Cells(8, 16).Value = 1)
        
    If Range("H17") = "" Then Me.Shapes("btn_gotoContratH17").Visible = (Cells(8, 17).Value = 1) And _
        Me.Shapes("btn_addNewH17").Visible = (Cells(8, 17).Value = 1)
        

End Sub
 

job75

XLDnaute Barbatruc
Bonjour MACx, Bernard,

En ligne 13 nommez le 1er bouton PREM_H13 et le 2ème DER_H13.

Faites de même pour les boutons des lignes 14 15 16 17.

Puis placez cette macro évènementielle dans le code de la feuille :
VB:
Private Sub Worksheet_Calculate()
Dim c As Range
For Each c In [H13:H17]
    DrawingObjects("PREM_" & c.Address(0, 0)).Visible = c.Text <> ""
    With DrawingObjects("DER_" & c.Address(0, 0))
        .Visible = c.Text <> ""
        .Text = "AJOUTER UN CONTRAT " & c.Text
    End With
Next
End Sub
Elle se déclenche quand une formule est recalculée.

A+
 

job75

XLDnaute Barbatruc
Et est-il possible d'affecter une macro à ces boutons selon leur libellé ? 😅
(Le nom de la macro porterait le même que le libellé du bouton)
Vous n'y êtes pas du tout.

Il y aura une seule macro pour les boutons PREM et une seule macro pour les boutons DER.

La macro affectée à chaque bouton DER :
VB:
Sub Nouveau()
Dim ac As Variant, contrat As String
ac = Application.Caller
If IsError(ac) Then Exit Sub 'sécurité
contrat = Evaluate(Split(ac, "_")(1))
MsgBox contrat 'pour tester
End Sub
 

MACx

XLDnaute Occasionnel
Bonjour MACx, Bernard,

En ligne 13 nommez le 1er bouton PREM_H13 et le 2ème DER_H13.

Faites de même pour les boutons des lignes 14 15 16 17.

Puis placez cette macro évènementielle dans le code de la feuille :
VB:
Private Sub Worksheet_Calculate()
Dim c As Range
For Each c In [H13:H17]
    DrawingObjects("PREM_" & c.Address(0, 0)).Visible = c.Text <> ""
    With DrawingObjects("DER_" & c.Address(0, 0))
        .Visible = c.Text <> ""
        .Text = "AJOUTER UN CONTRAT " & c.Text
    End With
Next
End Sub
Elle se déclenche quand une formule est recalculée.

A+
Super, ça marche ! Vous êtes trop fort.
 

MACx

XLDnaute Occasionnel
Vous n'y êtes pas du tout.

Il y aura une seule macro pour les boutons PREM et une seule macro pour les boutons DER.

La macro affectée à chaque bouton DER :
VB:
Sub Nouveau()
Dim ac As Variant, contrat As String
ac = Application.Caller
If IsError(ac) Then Exit Sub 'sécurité
contrat = Evaluate(Split(ac, "_")(1))
MsgBox contrat 'pour tester
End Sub
Du coup, je n'ai pas compris ce code. Mais je vais le tester. Merci !
 

Discussions similaires

Réponses
4
Affichages
201

Statistiques des forums

Discussions
312 111
Messages
2 085 395
Membres
102 882
dernier inscrit
Sultan94