Boucle avec des CommandButton

Bonjour,

Je suis débutant en VBA et je recherche à simplifier un code pour que le fichier soit moins lourd.

J'ai un Userform intitulé Electrodes sur laquelle il y a 24 CommandButton qui permet d'enrregistrer une traça et de remettre un compteur à zéro sur une feuille excel.

Voici le code pour un CommandButton :

Private Sub CommandButton1_Click()
Dim L As Double
If MsgBox(" Confirmez-vous la saisie? ", vbYesNo, " Demande de confirmation ") = vbYes Then
    With Worksheets("Bilan Suivi Electrode")
        L = .Range("I201000").End(xlUp).Row + 1
        Range("I" & L).Value = Cells(2, 4)
        Range("J" & L).Value = TextBox30.Value
        Range("K" & L).Value = TextBox29.Value
        Range("M" & L).Value = Cells(2, 2)
        Range("N" & L).Value = Cells(2, 3)
    End With
Range("D" & 2).Value = TextBox30.Value
Range("E" & 2).Value = TextBox29.Value
TextBox1.Value = Cells(2, 3)
End If
End Sub

En clair le CommandButton va être relié à chaque fois à la ligne i+1 des différentes cellules.

Donc le code pour le CommandButton2 sera :

Private Sub CommandButton2_Click()
Dim L As Double
If MsgBox(" Confirmez-vous la saisie? ", vbYesNo, " Demande de confirmation ") = vbYes Then
    With Worksheets("Bilan Suivi Electrode")
        L = .Range("I201000").End(xlUp).Row + 1
        Range("I" & L).Value = Cells(3, 4)
        Range("J" & L).Value = TextBox30.Value
        Range("K" & L).Value = TextBox29.Value
        Range("M" & L).Value = Cells(3, 2)
        Range("N" & L).Value = Cells(3, 3)
    End With
Range("D" & 3).Value = TextBox30.Value
Range("E" & 3).Value = TextBox29.Value
TextBox2.Value = Cells(3, 3)
End If
End Sub

Quelle est l'astuce pour ne pas avoir à répéter ce code pour chaque Commandbutton?

Je vous remercie par avance.

Grataloup Ghislain

Hello

Dans le cas de 10 textbox
For i = 1 to 10

Controls("Textbox" & i ) = ...

Next i

@+

Bonjour,

Quand vous ouvrez votre fichier cela arrive automatiquement sur une userform Electrode en plein écran
Vous en sortez comment ?
Pas de bouton.... donc à part faire un CTRL +ALT + DELETE et passer par le gestionnaire de taches de windows pour ferme excel....

Embêtant pour celui qui ouvre votre fichier sur le forum

Pour votre souci, plutôt que de répéter les lignes de code liés à chaque bouton, vous mettez ce qui est commun dans un code séparé
Ensuite vous liez chaque bouton dans votre userform à ce code

Edit : Voici ce que vous pouvez faire

1. Dans votre USF en première ligne au dessus (donc juste au dessus de la ligne Private Sub BoucleCommandButton_Click()), mettez cette ligne

Public j As Byte

2. Dans votre USF
- sélectionnez chaque bouton "Changement"
- dans les propriétés de l'objet, allez sur la propriété TAG
- Ajoutez 1 pour le bouton command1_click
- Faites de même pour les autres boutons . donc 2 pour command2_click, 3 pour command3_click, etc...

3. Dans votre USF, ajoutez ce code

Private Sub valider()
Dim L As Long
If MsgBox(" Confirmez-vous la saisie? ", vbYesNo, " Demande de confirmation ") = vbYes Then
    With Worksheets("Bilan Suivi Electrode")
        L = .Range("I" & Rows.Count).End(xlUp).Row + 1
        .Range("I" & L).Value = .Cells(j + 1, 4)
        .Range("J" & L).Value = TextBox30.Value
        .Range("K" & L).Value = TextBox29.Value
        .Range("M" & L).Value = .Cells(j + 1, 2)
        .Range("N" & L).Value = .Cells(j + 1, 3)
    End With
'pour ces 3 lignes il faudrait savoir sur quelle feuille vous êtes ????
    Range("D" & j + 1).Value = TextBox30.Value
    Range("E" & j + 1).Value = TextBox29.Value
    Me.Controls("TextBox" & j).Value = Cells(j + 1, 3)
End If
End Sub

Sachant que l'on ajoute 1 à la variable J, le code fonctionnera jusqu'au bouton 7. Pour le bouton 8 et les suivants il faudrait avoir plus d'info sur la ligne concernée avec l'instruction cells(ligne, col) pour les range I, J, K, M N.

4. Pour chaque code Private Sub CommandButtonX_Click(). Mettez ces 2 lignes. Exemple pour le bouton 1

Private Sub CommandButton1_Click()
j = CommandButton1.Tag
Call valider
End sub

Remarque : Cela n'a rien à voir avec votre souci mais pour votre code Initialize, je ferais plutôt ceci

Private Sub UserForm_Initialize()
Dim couleurF, couleurB
Dim i As Byte

Me.Height = 650
Me.Width = 1200

TextBox30.Value = Date
TextBox29.Value = Time

For i = 1 To 24

    Me.Controls("Textbox" & i) = Cells(i + 1, 3).Value
    Select Case i
        Case 1 To 19
            Select Case Me.Controls("TextBox" & i).Value
                Case Is < 5500: couleurF = RGB(0, 255, 0): couleurB = RGB(0, 116, 0)
                Case Is >= 5500: couleurF = RGB(255, 0, 0): couleurB = RGB(255, 169, 169)
            End Select

        Case 20 To 24
            Select Case Me.Controls("TextBox" & i).Value
                Case Is < 11000: couleurF = RGB(0, 255, 0): couleurB = RGB(0, 116, 0)
                Case Is >= 11000: couleurF = RGB(255, 0, 0): couleurB = RGB(255, 169, 169)
            End Select
    End Select
    With Me.Controls("TextBox" & i)
        .ForeColor = couleurF
        .BackColor = couleurB
    End With

Next i
End Sub

Cordialement

Bonjour,

Salut Dan : Effectivement, encore et toujours des lignes de code dans l'Open du WorkBook...

Et un Query close interdit pour les usf... (PS, sur l'usf1, tu cliques sur "Suivant", tu arrives à l'usf2, et tu cliques sur "Quitter"...)

Pas top, quand on met un fichier en ligne

@ Ghislain:

Il ne manquerait pas une colonne? ("Qui", de la colonne L n'est pas renseigné...)

Tu avais bien commencé, en partant sur un module de classe..

Je regarde, mais ça peut prendre du temps (on n'est pas dans ta tête, et il faut adapter tes labels et autres données avec les données des onglets...)

Tu confirmes qu'on ne travaille que sur l'onglet "Bilan suivi Electrode"?

Bonne journée

Bonjour à tous et déjà merci pour votre réactivité, c'est bluffant

Comment est construit le fichier :

- Ouverture directement sur l'userform Electrode pour évaluer le nombre de cycle par électrode afin d'avertir les opérateurs qu'il va falloir changer bientôt d'électrode.

- Un userform Production, pour que chaque équipe de production relève les quantitées produites, qui ira alimenter les compteurs électrodes.

Sur le userform Electrode, le bouton changement permettra la traça sur : qui a fait le changement (reste à faire la textbox), le jour et heure du changement et de garder en mémoire la quantité produite et le jour de sa mise en service.

Pour mon problème, oui je te confirmes Consinhub, c'est que sur l'userform Electrodes, apres si il faut modifier les modules pas de soucis.

@Dan:

Merci Dan pour ton retour, je vais checker cette aprem :)

Salut Dan : Effectivement, encore et toujours des lignes de code dans l'Open du WorkBook...

L'objectif, je pense vous l'avez compris c'est que les opérateurs n'est pas accès à la BDD.

Je reviens vers vous.

Re-,

Ok, pour l'usf "Electrodes" (règlé)

Maintenant, l'usf "Electrodes1", c'est un peu du grand n'imp'...

Il y a 2 TxtBx et 2 CmdBtn (appelons cela un ensemble) pour 1 ligne dans l'onglet Bilan Suivi (ligne 33) - et les dénominations ne collent pas...

Et 2 ensembles pour 3 lignes (lignes 34 à 36)

Et le chargement des valeurs :

TextBox8.Value = Cells(15, 3)
TextBox9.Value = Cells(14, 3)
TextBox10.Value = Cells(13, 3)
TextBox11.Value = Cells(12, 3)
TextBox12.Value = Cells(11, 3)

font références aux lignes 11 à 15, déjà traitées dans le 1er usf...

Bref, quelques explications supplémentaires, stp

Bonjour,

Merci à tous pour votre support, j'ai pris en compte tous vos commentaires et tout marche parfaitement :)

Sujet clos et merci encore.

Rechercher des sujets similaires à "boucle commandbutton"