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.

TooFatBoy

XLDnaute Barbatruc

TooFatBoy

XLDnaute Barbatruc
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.
 

Pièces jointes

  • Gestion_Heures_Camping_YB_(TooFatBoy-v1).xlsm
    313.5 KB · Affichages: 1

ReneDav14000

XLDnaute Occasionnel
Merci TooFatBoy, ça m'a l'air très bien. La copie se fait correctement.
Il y a seulement un petit détail, dans la feuille BDD, la partie commentaires reste entourée de pointillés.
Est-ce que je peux supprimer les lignes et les colonnes que tu as ajouté autour des tableaux ?
Merci beaucoup pour ton aide.
Je vais regarder pour DataBodyRange que je ne connaissais pas.
Tu m'enlèves une épine du pied.
 

TooFatBoy

XLDnaute Barbatruc
Il y a seulement un petit détail, dans la feuille BDD, la partie commentaires reste entourée de pointillés.
Il suffit d'ajouter un Application.CutCopyMode = False après le collage (à la fin de la macro).


Est-ce que je peux supprimer les lignes et les colonnes que tu as ajouté autour des tableaux ?
Oui, bien sûr. ;)


Je vais regarder pour DataBodyRange
DataBodyRange, ce sont les données d'un tableau structuré, autrement dit c'est ledit tableau sans les en-têtes. ;)
 
Dernière édition:

ReneDav14000

XLDnaute Occasionnel
Il suffit d'ajouter un Application.CutCopyMode = False après le collage (à la fin de la macro).



Oui, bien sûr. ;)



DataBodyRange, ce sont les données d'un tableau structuré, autrement dit c'est ledit tableau sans les en-têtes. ;)
Très bien. Merci pour tes réponses. Je vais pouvoir continuer à travailler sur mon projet.
Encore merci pour ton aide et mes remerciements à tous ceux qui ont participés à cette discussion. 👏
Bonne soirée ;)
 

ReneDav14000

XLDnaute Occasionnel
Bonjour le forum,
Je reviens vers vous un instant pour une dernière question.
Une fois le copier-coller réalisé, j'ai mis en place ce code qui permet de mettre la date du jour du transfert en colonne A.
Je l'ai mis dans une procédure "Selection_change" de la feuille "Temps" mais ce n'est pas l'idéal car je suis obligé de revenir en colonne B afin que la date s'affiche en colonne A et cela à chacune des lignes.
Existe-t-il une procédure qui permettrait l'affichage de la date aussitôt après le transfert sans qu'il y une intervention de l'utilisateur ?
Merci par avance pour vos suggestions.

Mon code ci-dessous

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("B2:B1000")) Is Nothing Then Exit Sub
    If Target <> "" And Cells(Target.Row, "A") = "" Then Cells(Target.Row, "A") = Date
End Sub
 

ReneDav14000

XLDnaute Occasionnel
Je pense qu'il faudrait mettre l'instruction d'écriture de la date, juste après le collage.
Bonjour TooFatBoy,
J'ai essayé de faire ça avec ton code, mais ça ne fonctionne pas très bien car je n'ai qu'une seule date qui arrive dans la colonne A. Ce qui est normal puisqu'il n'y qu'une seule donnée de date en K3 de la feuille BDD.
J'ai ajouté les lignes 18 à 20
Que dois-je faire pour que cela fonctionne mieux ?

Code:
Sub BoutCopie()
'
Dim DerLig As Long

    If Sheets("BDD").ListObjects("Tableau1").DataBodyRange Is Nothing Then Exit Sub

    With Sheets("Temps").ListObjects("Tableau2")

        .ListRows.Add
        DerLig = .DataBodyRange.Rows.Count

        Range("Tableau1[[NOM et Prénom employé(e)]:[Heure départ soir]]").Copy
        .DataBodyRange(DerLig, 2).PasteSpecial xlPasteValues

        Range("Tableau1[Commentaires]").Copy
        .DataBodyRange(DerLig, 20).PasteSpecial xlPasteValues
      
    Range("K3").Select
    Selection.Copy
    .DataBodyRange(DerLig, 1).PasteSpecial xlPasteValues

Application.CutCopyMode = False
    
    Sheets("Temps").Activate
    ActiveSheet.Cells(1, 1).Select
    
    End With

End Sub
 

ReneDav14000

XLDnaute Occasionnel
J'ai trouvé la solution. Voici le code

J'ai remplacé les lignes 18 à 20 par les lignes 18 à 20 de ce nouveau code. :)

VB:
Sub BoutCopie()
Dim DerLig As Long
Dim Jour As Range

    If Sheets("BDD").ListObjects("Tableau1").DataBodyRange Is Nothing Then Exit Sub

    With Sheets("Temps").ListObjects("Tableau2")

        .ListRows.Add
        DerLig = .DataBodyRange.Rows.Count

        Range("Tableau1[[NOM et Prénom employé(e)]:[Heure départ soir]]").Copy
        .DataBodyRange(DerLig, 2).PasteSpecial xlPasteValues

        Range("Tableau1[Commentaires]").Copy
        .DataBodyRange(DerLig, 20).PasteSpecial xlPasteValues
      
For Each Jour In Sheets("Temps").Range("Tableau2[Date]")
    If Jour = "" Then Jour.Value = Sheets("BDD").Range("K3").Value
    Next Jour

Application.CutCopyMode = False
    
    Sheets("Temps").Activate
    ActiveSheet.Cells(1, 1).Select
    
    End With

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 491
Messages
2 110 177
Membres
110 690
dernier inscrit
Zeppelin