VBA bouton invisible

Bonjour,

Novice en BVA, c'est certainement le bazar dans mon classeur...

Depuis aujourd'hui, mes boutons de formulaire sont invisibles. Lorsque je passe la souris sur leur emplacement je peux néanmoins cliquer dessus et démarrer ma macro.

Seulement, je ne comprends pas pourquoi...

Est-ce que dans mes codes je dois écrire qqc pour faire apparaître les boutons ? Si oui, où donc ?

Merci de votre aide !

Sub EnregistrerPlanning()
' Macro7 Macro
Dim col As Byte

Feuil13.Unprotect 'feuille Issin

With Feuil13.ListObjects("TabPLANNING16") 'feuille Issin
    If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    For col = 1 To 11
        .DataBodyRange.Item(lig, col) = Feuil12.Cells(ActiveCell.Row, col)
    Next col
End With
With Feuil10.ListObjects("Tableau212") 'feuille Mantes
If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    For col = 1 To 8
 If Feuil12.Cells(ActiveCell.Row, 2) = "MANTESLAJOLIE" Then .DataBodyRange.Item(lig, col) = Feuil12.Cells(ActiveCell.Row, col)
    Next col
End With

With Feuil11.ListObjects("Tableau213") 'feuille GARGES
If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    For col = 1 To 8
 If Feuil12.Cells(ActiveCell.Row, 2) = "GARGES" Then .DataBodyRange.Item(lig, col) = Feuil12.Cells(ActiveCell.Row, col)
    Next col
End With

With Feuil2.ListObjects("Tableau2") 'feuille NANTERRE
If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    For col = 1 To 8
 If Feuil12.Cells(ActiveCell.Row, 2) = "NANTERRE" Then .DataBodyRange.Item(lig, col) = Feuil12.Cells(ActiveCell.Row, col)
    Next col
End With

With Feuil4.ListObjects("Tableau25") 'feuille VERSAILLES
If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    For col = 1 To 8
 If Feuil12.Cells(ActiveCell.Row, 2) = "VERSAILLES" Then .DataBodyRange.Item(lig, col) = Feuil12.Cells(ActiveCell.Row, col)
    Next col
End With

With Feuil5.ListObjects("Tableau258") 'feuille CERGY
If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    For col = 1 To 8
 If Feuil12.Cells(ActiveCell.Row, 2) = "CERGY" Then .DataBodyRange.Item(lig, col) = Feuil12.Cells(ActiveCell.Row, col)
    Next col
End With

With Feuil6.ListObjects("Tableau29") 'feuille ANTONY
If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    For col = 1 To 8
 If Feuil12.Cells(ActiveCell.Row, 2) = "ANTONY" Then .DataBodyRange.Item(lig, col) = Feuil12.Cells(ActiveCell.Row, col)
    Next col
End With

With Feuil8.ListObjects("Tableau210") 'feuille PARIS
If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    For col = 1 To 8
 If Feuil12.Cells(ActiveCell.Row, 2) = "PARIS" Then .DataBodyRange.Item(lig, col) = Feuil12.Cells(ActiveCell.Row, col)
    Next col
End With

With Feuil9.ListObjects("Tableau211") 'feuille CRETEIL
If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    'Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    For col = 1 To 8
 If Feuil12.Cells(ActiveCell.Row, 2) = "CRETEIL" Then .DataBodyRange.Item(lig, col) = Feuil12.Cells(ActiveCell.Row, col)
    Next col
End With

With Feuil12.ListObjects("TabPLANNING")
    Rows(ActiveCell.Row).Delete
End With

Sheets("ISSIN").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    Sheets("PLANNING").Select

End Sub

autre code même problème

Sub EnregistrerInterprete()
Dim lig As Integer, Numinterp As Integer
Dim col As Byte

With Feuil15.ListObjects("TabINTERPRETES") 'feuille repertoire interpretes
    Numinterp = .ListRows.Count + 1 'numero interprete

    If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    Else: .ListRows.Add: lig = .ListRows.Count 'insérer à la dernière ligne
    'Else: .ListRows.Add Position:=1: lig = 1 'insérer a la 1igne 1
    End If

    With .DataBodyRange
        For col = 1 To 8
            .Item(lig, col) = Feuil14.Cells(10, col).Value 'tel
        Next col

        .Item(lig, 9) = UCase(Feuil14.Cells(10, 2).Value) & " " & Application.Proper(Feuil14.Cells(10, 3).Value) & " " & Numinterp 'ref interprete
    End With

Call Effaceform2 'effacer formulaire

End With
End Sub

et le dernier...

Sub TestEnregistrerLangue()
Dim col As Integer, lig As Integer

With Feuil1 'feuille LANGUESINTERPRETES
    .Unprotect

    'recherche position d'export
    On Error Resume Next 'en cas d'erreur ligne suivante
    col = .Range("A1:DC1").Find(Range("B18")).Column 'range("B18") dans feuille active ˆ savoir celle du formulaire
    On Error GoTo 0 'on remet le paramtre par d_faut pour les erreurss

    If col = 0 Then
        MsgBox "La langue " & Range("B18") & " est introuvable.", vbInformation, "Langue introuvable"
        Exit Sub
    End If

    If .Cells(2, col) = "" Then
        lig = 2
    Else
        lig = .Cells(1, col).End(xlDown).Row + 1
    End If

    'export
    .Cells(lig, col) = Range("A18")
End With

With Feuil14 'FORMULAIRE
Range("B18").ClearContents
End With
End Sub

Bonjour,

Déprotège les feuilles et exécute la macro :

Sub Affiche()
  Dim Ws As Worksheet, Sh As Shape
  For Each Ws In Sheets
    For Each Sh In Ws.Shapes
      Sh.Visible = True
    Next Sh
  Next Ws
End Sub

Daniel

Merci !

Vous avez compris ce que je n'aurais pas du faire ?

J'ai regardé le code et je n'ai pas vu d'endroit ou vous auriez pu masquer les boutons. Est-ce que ça se produit systématiquement à l'exécution du code ?

Daniel

Non, c'est bon, depuis que vous m'avez donné votre code tout va mieux mais je me demande ce que j'ai bien pu faire...

Merci encore

Finalement, ça se reproduit... et le code que vous m'aviez donné ne fonctionne plus...

15classeur3.xlsm (301.32 Ko)

Je poste le fichier pour que vous y jetiez un oeil.

Merci

Bonjour,

Est-ce qu'il s'agît des deux boutons de la feuille FORMULAIRE ? J'ai ouvert le classeur et les deux boutons sont visibles. Est-ce qu'il ne pourrait pas s'agir d'une interaction avec un autre classeur qui serait ouvert en même temps que celui-ci ?

Bonjour Cynthia75, DanielC

@Cynthia75, si je puis me permettre, éviter de coder comme ça (exemple)

Feuil10.ListObjects("Tableau212")

Mais plutôt comme ceci

Sheets("MANTESLAJOLIE").ListObjects("Tableau212")

Cela vous évitera des mésaventures par la suite

A+

Bonjour DanielC, Bonjour BrunoM45,

Merci pour vos réponses. C'est certainement ça ! J'ai bien d'autres classeurs, dans lesquels il y a des feuilles intitulées Feuil12 et nommées dans des macros.

Mon diagnostique de départ était bon : c'est l'heure du ménage !

Juste une question : Pour les tableaux, je risque le même problèmes si j'ai des tableaux qui portent le même nom dans d'autres classeurs ? Si c'était le cas, ce serait un vrai problème car il y a des tableaux que je n'arrive pas à renommer. Je crois que cela se produit avec les tableaux que je copie / colle mais pas sûre...

Il n'y a pas de risque en ce qui concerne la visibilité des tableaux. Par contre, il y en a concernant l'intégrité des données, oui. Je ne suis pas au courant pour le renommage des tableaux. Est-ce qu'il y a un tel tableau dans le classeur ?

Daniel

Salut!

Oui, si tu vas dans le gestionnaire de noms tu verras des tableaux grisés. Je pense que c'est le fait d'une liaison avec un autre classeur.

Peux-tu me donner un nom de ces tableaux (je travaille avec une version Excel Windows et la présentation est peut-être différente).

Daniel

capture d ecran 2022 11 17 a 12 33 37

Tableau14

Tableau18

Tableau2

etc.

Par contre, tu peux modifier le nom de tes deux boutons.

Pardon, mais je ne comprends pas. Où vois-tu que je peux modifier les noms ? et pourquoi faire ça ? C'est à cause des noms des boutons qu'ils deviennent invisibles ?

Oui, tu devrais modifier les noms des boutons. Ca éviterait qu'ils soient modifiés par erreur. Pour les tableaux, c'est la zone "Fait référence à" qui est grisée, ce qui est normal, puisque tu ne peux pas changer la dimension d'un tableau qui contient des données. C'est trop dangereux de le faire par le gestionnaire de noms, en tout cas. Mais tu peux tout à fait changer le nom en cliquant sur Modifier :

capture d ecran 20221117 150720

Daniel

Désolée mais je cherche depuis tout à l'heure comment modifier les boutons : je suis dans Visual Basic et je ne vois pas ce qui pourrait m'aider à les modifier ?

Le plus simple est de sélectionner le bouton en faisant un clic droit dessus et en changeant son nom dans la zone d'adresse :

capture d ecran 20221117 161514

Daniel

Bizarre... chez moi il s'appelle ellipse 3 et je n'arrive pas à le modifier (contrairement aux 3 autres). Y a un truc bizarre qui se passe dans mon Mac... Je reposte mon classeur pour que tu vois de ton côté si tu as la même chose que moi. Par ailleurs regarde cette capture / C'est quoi ce fichier avec un dollar enregistré à 20h20 ? Je deviens folle

capture d ecran 2022 11 17 a 20 24 33
6classeur3.zip (220.14 Ko)

Bonjour,

Ellipse 4 se trouve sur la feuille PLANNING. Je peux le modifier. Si tu veux que je le fasse, dis-moi comment tu veux que je le renomme. Pour le fichier avec la tilde, c'est un fichier qui enregistre les modifications du classeur, en cas de problème. Ce sont des fichiers qui sont automatiquement supprimés une fois que le classeur est fermé.

Daniel

Rechercher des sujets similaires à "vba bouton invisible"