XL 2016 Interdire le clique sur un bouton avant un autre

ReneDav14000

XLDnaute Occasionnel
Bonjour à toutes et à tous,

Dans mon application j'ai deux boutons : un qui est nommé "BoutZéro" qui efface certaines données de la feuille de calcul "BDD"
et un autre qui est nommé "BoutCopie" qui copie les lignes non vides dans une autre feuille "Temps"
J'aimerai savoir si il est possible d'empêcher l'utilisateur de cliquer sur le bouton "BoutZéro" tant qu'il n'a pas cliqué sur "BoutCopie".
Cela pour ne pas que l'utilisateur efface les données avant de les avoir copiées dans l'autre feuille "Temps"
Merci par avance pour votre aide

Voici le code pour le bouton "BoutZéro"
VB:
Private Sub BoutZéro_Click()
If MsgBox("Etes-vous certain de vouloir effacer les pointages horaires ? Cette action est irréversible - N'oubliez pas de copier les données avant l'effacement.", vbYesNo + vbQuestion, "Effacement des données") = vbYes Then

    Sheets("BDD").Select
    
Dim DerLigne As Long
    DerLigne = Sheets("BDD").Range("A1048576").End(xlUp).Row
    
        If DerLigne >= 6 Then
            Sheets("BDD").Range("G6:L" & DerLigne).Select
            
                Selection.ClearContents
End Sub
 
Solution
J'ai fait un essai, que je te livre tel quel...

Libre à toi de t'en inspirer, ou pas, bien sûr. ;)


ps : j'ai modifié "Tableau1" (intégration de la colonne "Date") et "Tableau2" (intégration de la colonne "Commentaires").
Je n'arrivais pas à bien discerner les limites des tableaux alors j'ai inséré une ligne au-dessus et une colonne à gauche, pour mieux voir les tableaux.

dysorthographie

XLDnaute Accro
bonjour,
tu n'as besoin que d'un seul bouton
VB:
Private Sub CommandButton1_Click()
If CommandButton1.Caption = "BoutZéro" Then
   call BoutZéro
    CommandButton1.Caption = "BoutCopie"
Else
   call  BoutCopie
    CommandButton1.Caption = "BoutZéro"
End If
End Sub
Sub BoutZéro()
MsgBox "BoutZéro"
End Sub
Sub BoutCopie()
MsgBox "BoutCopie"
End Sub
 

Phil69970

XLDnaute Barbatruc
Bonjour @ReneDav14000
Edit : Bonjour @dysorthographie

En début de la macro "BoutZéro" tu lances la macro "BoutCopie"

Sans fichier 🤔 donc à adapter cela pourra donner ceci :

VB:
Sub BoutZero()
BoutCopie 'Ici la macro copiera tes données avant d'effectuer le reste du code

'Mon code qui efface ce que je veux

End Sub

Autre piste et/ou panachage des 2 pistes
On met un "drapeau" qui passe à 1 si la copie est faite et 0 si elle n'est pas faite avec un test dessus avant l'effacement

D’où l'utilité du fichier.......o_O

Merci de ton retour

@Phil69970
 

ReneDav14000

XLDnaute Occasionnel
bonjour,
tu n'as besoin que d'un seul bouton
VB:
Private Sub CommandButton1_Click()
If CommandButton1.Caption = "BoutZéro" Then
   call BoutZéro
    CommandButton1.Caption = "BoutCopie"
Else
   call  BoutCopie
    CommandButton1.Caption = "BoutZéro"
End If
End Sub
Sub BoutZéro()
MsgBox "BoutZéro"
End Sub
Sub BoutCopie()
MsgBox "BoutCopie"
End Sub
Bonjour dysorthographie,
Oui il n'y a que c'est deux seuls boutons qui sont concernés.
Merci pour ton code
 

ReneDav14000

XLDnaute Occasionnel
Bonjour @ReneDav14000
Edit : Bonjour @dysorthographie

En début de la macro "BoutZéro" tu lances la macro "BoutCopie"

Sans fichier 🤔 donc à adapter cela pourra donner ceci :

VB:
Sub BoutZero()
BoutCopie 'Ici la macro copiera tes données avant d'effectuer le reste du code

'Mon code qui efface ce que je veux

End Sub

Autre piste et/ou panachage des 2 pistes
On met un "drapeau" qui passe à 1 si la copie est faite et 0 si elle n'est pas faite avec un test dessus avant l'effacement

D’où l'utilité du fichier.......o_O

Merci de ton retour

@Phil69970
Bonjour Phil69970
Merci pour la suggestion.
L'idée d'un seul bouton qui copierait avant l'effacement me plait assez bien, je n'y avais pas pensé.
Je vais tenter le coup en mixant mes deux codes.
Je n'ai pas mis de fichier car je suis en train de le refaire complètement car j'ai perdu celui sur lequel je travaillais et où j'avais bien avancé. J'ai eu un bug sur mon PC et Hop il a disparu, je l'ai recherché mais sans succès.
Je mettrais ma nouvelle version lorsque j'aurai tenté vos idées à tous les deux.
 

ReneDav14000

XLDnaute Occasionnel
Voici le code que j'ai essayé de mettre en place. Comme vous pourrez le constater, il manque une liaison entre la copie et l'effacement.
Les données copiées sont de A6 à Colonne S de la feuilles "BDD" et vont se coller à la suite des données déjà copiées dans la feuille "Temps" à partir de B2

VB:
Private Sub BoutZéro_Click()
'On copie les données avant de les effacer
Dim MaPlage
Application.ScreenUpdating = False

    If Sheets("BDD").FilterMode Then Sheets("BDD").ShowAllData 'BDD feuille qui doit être copiée
       
        Set MaPlage = Sheets("BDD").UsedRange.Offset(1).Resize(Sheets("BDD").UsedRange.Rows.Count - 1, Sheets("BDD").UsedRange.Columns.Count)
       
        With MaPlage
        On Error Resume Next
        .Offset(1).Resize(plage.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy Sheets("Temps").Range("A" & Sheets("Temps").Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1)
 
   'Là je ne sais pas quoi mettre pour qu'il embraye sur la suite
     
If MsgBox("Etes-vous certain de vouloir effacer les pointages horaires ? Cette action est irréversible - N'oubliez pas de copier les données avant l'effacement.", vbYesNo + vbQuestion, "Effacement des données") = vbYes Then

    Sheets("BDD").Select
   
Dim DerLigne As Long
    DerLigne = Sheets("BDD").Range("A1048576").End(xlUp).Row
   
        If DerLigne >= 6 Then
            Sheets("BDD").Range("G6:L" & DerLigne).Select
           
                Selection.ClearContents
End Sub
 

ReneDav14000

XLDnaute Occasionnel
Bonjour
A tester
mais je n'en vois pas trop l'utilité
Bonsoir JM27,
Merci pour ta solution. C'est ce que je souhaitais faire au départ, mais l'idée d'un seul bouton qui fait les deux choses trotte dans ma tête.
Je vais essayer de terminer le code que j'ai mis plus haut.
Concernant l'utilité, je ne veux pas que l'utilisateur soit tenter d'effacer les données avant de les avoir copiées.
Elles sont essentielles à la bonne marche de l'application.
 

patricktoulon

XLDnaute Barbatruc
bonjour
le principe de bouton toupie est simple
VB:
Private Sub CommandButton1_Click()
    With CommandButton1
        Select Case .Caption
        Case "copie"
            'ici tu met ton code de copie
            'ou tu apelle la sub copie si tu prefère faire des sub c'est comme tu veux
            .Caption = "Tout à zero"

        Case "Tout à zero"
            'ici tu met ton code de tout a zero
            'ou tu apelle la sub tout a zero si tu prefère faire des sub c'est comme tu veux
            .Caption = "copie"
        End Select
    End With
End Su
pas compliqué ;)
 

ReneDav14000

XLDnaute Occasionnel
bonjour
le principe de bouton toupie est simple
VB:
Private Sub CommandButton1_Click()
    With CommandButton1
        Select Case .Caption
        Case "copie"
            'ici tu met ton code de copie
            'ou tu apelle la sub copie si tu prefère faire des sub c'est comme tu veux
            .Caption = "Tout à zero"

        Case "Tout à zero"
            'ici tu met ton code de tout a zero
            'ou tu apelle la sub tout a zero si tu prefère faire des sub c'est comme tu veux
            .Caption = "copie"
        End Select
    End With
End Su
pas compliqué ;)
Bonsoir Patrick,

J'étais parti sur le code ci-dessous, mais ta solution me parait, encore une fois, être plus simple.
Je vais essayer de l'adapter à mon cas.
Merci pour ton aide

Voici quand même mon code :
VB:
Private Sub BoutZéro_Click()
'On copie les données avant de les effacer
Dim MaPlage
Application.ScreenUpdating = False

If MsgBox("Vous allez copier les données avant qu'elles soient effacées ? Cette action est irréversible.", vbYesNo + vbQuestion, "Copie et effacement des heures") = vbYes Then

    If Sheets("BDD").FilterMode Then Sheets("BDD").ShowAllData 'BDD feuille qui doit être copiée
        
        Set MaPlage = Sheets("BDD").UsedRange.Offset(1).Resize(Sheets("BDD").UsedRange.Rows.Count - 1, Sheets("BDD").UsedRange.Columns.Count)
        
        With MaPlage
        On Error Resume Next
        .Offset(1).Resize(plage.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy Sheets("Temps").Range("A" & Sheets("Temps").Cells.Find("*", , , , xlByRows, xlPrevious).Row + 1)
  
   End With
   End If
  
'On efface les données
    Sheets("BDD").Select
    
Dim DerLigne As Long
    DerLigne = Sheets("BDD").Range("A1048576").End(xlUp).Row
    
        If DerLigne >= 6 Then
            Sheets("BDD").Range("G6:L" & DerLigne).Select
            
                Selection.ClearContents
    End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 944
Membres
101 849
dernier inscrit
florentMIG