[Excel][bva] comment créer ss routine

Résolu
Bonjour,
je me lance pour la première fois en BVA Excel.
mon problème: une personne par ligne et surtout 1 bouton pour chaque personne. Ce bouton a le même effet.
Je pourrais bien sûr faire du copier coller du code du 1er bouton sur les autres... mais outre que cela ne me satisfait pas, il faudrait à chaque nouvelle personne intervenir pour modifier le code du nouveau bouton ....
J'ai tenté une procédure commune :
définition d'une variable NomBouton
dans le code de chaque bouton, NomBouton=NomDuBoutonEnCours
mais je bute sur le With qui n'accepte pas With NomBouton dans une procédure

ci dessous mon code (vous risquez de crier au scandale, mais c'est ma première sur Excel...)

Private Sub BoutonARR01_Click()
Lig = 2

With BoutonARR01

'Test si ARRIVE ou PARS
If .Caption = "JE PARS" Then
' appui sur JE PARS
.Caption = "J'ARRIVE" 'le bouton devient J ARRIVE EN VERT
.BackColor = &H80FF80
Range("d" & Lig).Value = Now() 'heure de départ = now
Range("e" & Lig).Value = Range("d" & Lig).Value - Range("c" & Lig).Value 'calcul temps session
Range("f" & Lig).Value = Range("f" & Lig).Value - Range("e" & Lig).Value 'calcul temps total

Range("A" & Lig).Select 'NOM EN VERT
With Selection.Interior
.ColorIndex = 35
.Pattern = xlSolid
End With

Else
' appui sur J'ARRIVE
.Caption = "JE PARS" 'le bouton devient JE PARS EN ROUGE
.BackColor = &HFF&
Range("C" & Lig).Value = Now() 'heure d'arrivée
Range("D" & Lig).Value = "" 'heure d'arrivée RIEN
Range("E" & Lig).Value = "" 'Temps session RIEN
Range("A" & Lig).Select 'NOM EN ROUGE
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
End With
End If

End With
End Sub

Merci à vous

Configuration: Windows XP
Internet Explorer 7.0

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour ppc77,

    Essaies comme celà :

    Private Sub BoutonARR01_Click()

    Maintenant, ça doit marcher.

    Cordialement
    1. Bonjour,

      Les [ boutons ] sont sur une feuille ou sur un formulaire ?

      Lupin
      1. merci, je viens de revenir, je n'aurai pas le temps essayer ce soir, mais :

        Papou : Private Sub BoutonARR01_Click() je le mets où ? c'est ce que j'ai mis sur le bouton de la première ligne

        Lupin : les boutons sont sur une feuille

        A B C D E F

        NOM COMMANDE HEURE ARRIVEE HEURE DEPART TEMPS SESSION TEMPS TOTAL
        SAL 1 (le bouton est là) 17:38 17:58 20:00
        SAL 2 (le bouton est là) 07:00 0:00

        Merci de vos réponses .... avec de la chance il fera jour demain, j'essaierai...
        bonne soirée

        Patrick
        1. Excuses-moi, je me suis "planté" : je voulais te dire de remplacer 'With BoutonARR01' par 'With ActiveSheet.BoutonARR01'.

          Cordialement.
          1. Contributeur
            bonjour ppc77 et les participants

            Il me semble que ta macro ne pourras pas fonctionner pour chaque bouton car tu ne peux intercepter le click que du bouton concerné et pas d'un bouton générique.

            Je te propose de faire la même chose en utilisant la colonne G sans rien changer à tes autres données, mais sans bouton et là, elle fonctionne sur n'importe qu'elle ligne, dès que tu sélectionnes la colonne G.
            Option Explicit
            Private Sub Worksheet_SelectionChange(ByVal sel As Range)
            If sel.Column = 7 Then
            'Test si ARRIVE ou PARS
                If Range("g" & sel.Row).Value = "JE PARS" Then
            ' appui sur JE PARS
                    Range("g" & sel.Row).Value = "J'ARRIVE" 'le bouton devient J ARRIVE EN VERT
                    Range("g" & sel.Row).Interior.ColorIndex = 35
                    Range("d" & sel.Row).Value = Now() 'heure de départ = now
                    Range("e" & sel.Row).Value = Range("d" & sel.Row).Value - Range("c" & sel.Row).Value 'calcul temps session
                    Range("f" & sel.Row).Value = Range("f" & sel.Row).Value - Range("e" & sel.Row).Value 'calcul temps total
                    Range("A" & sel.Row).Interior.ColorIndex = 35 'NOM EN VERT
                    Range("A" & sel.Row).Interior.Pattern = xlSolid
                Else
            ' appui sur J'ARRIVE
                    Range("g" & sel.Row).Value = "JE PARS" 'le bouton devient JE PARS EN ROUGE
                    Range("g" & sel.Row).Interior.ColorIndex = 3
                    Range("C" & sel.Row).Value = Now() 'heure d'arrivée
                    Range("D" & sel.Row).Value = "" 'heure d'arrivée RIEN
                    Range("E" & sel.Row).Value = "" 'Temps session RIEN
                    Range("A" & sel.Row).Interior.ColorIndex = 3 'NOM EN ROUGE
                    Range("A" & sel.Row).Interior.Pattern = xlSolid
                End If
            End If
            End Sub
            
            1. Bonjour à vous

              la solution d'utiliser la colonne au lieu d'un bouton correspond tout à fait ...

              merci beaucoup

              Bonne journée à tous et encore bravo et merci pour les services rendus

              Patrick