Raccourcir une procédure
Bonjour à tous,
je souhaiterais si possible raccourcir la procédure suivante (je dois la répéter 12 fois):
Private Sub CommandButton1_saisie_Click()
If mois1.Value = True Then
Sheets("SAISIE M PLF232").Activate
If TextBox1 = "" Then
TextBox1 = Range("c2")
Else
Range("C2") = TextBox1
End If
If TextBox2 = "" Then
TextBox2 = Range("c3")
Else
Range("C3") = TextBox2
End If
If TextBox3 = "" Then
TextBox3 = Range("c4")
Else
Range("C4") = TextBox3
End If
If TextBox4 = "" Then
TextBox4 = Range("c5")
Else
Range("C5") = TextBox4
End If
If TextBox5 = "" Then
TextBox5 = Range("c6")
Else
Range("C6") = TextBox5
End If
If TextBox6 = "" Then
TextBox6 = Range("c7")
Else
Range("C7") = TextBox6
End If
If TextBox7 = "" Then
TextBox7 = Range("c8")
Else
Range("C8") = TextBox7
End If
If TextBox8 = "" Then
TextBox8 = Range("c9")
Else
Range("C9") = TextBox8
End If
If TextBox9 = "" Then
TextBox9 = Range("c10")
Else
Range("C10") = TextBox9
End If
If TextBox10 = "" Then
TextBox10 = Range("c11")
Else
Range("C11") = TextBox10
End If
If TextBox11 = "" Then
TextBox11 = Range("c12")
Else
Range("C12") = TextBox11
End If
If TextBox12 = "" Then
TextBox12 = Range("c13")
Else
Range("C13") = TextBox12
End If
If TextBox13 = "" Then
TextBox13 = Range("c14")
Else
Range("C14") = TextBox13
End If
If TextBox14 = "" Then
TextBox14 = Range("c15")
Else
Range("C15") = TextBox14
End If
If TextBox15 = "" Then
TextBox15 = Range("c16")
Else
Range("C16") = TextBox15
End If
If TextBox16 = "" Then
TextBox16 = Range("c17")
Else
Range("C17") = TextBox16
End If
If TextBox17 = "" Then
TextBox17 = Range("c18")
Else
Range("C18") = TextBox17
End If
If TextBox18 = "" Then
TextBox18 = Range("c19")
Else
Range("C19") = TextBox18
End If
If TextBox19 = "" Then
TextBox19 = Range("c20")
Else
Range("C20") = TextBox19
End If
If TextBox20 = "" Then
TextBox20 = Range("c21")
Else
Range("C21") = TextBox20
End If
If TextBox21 = "" Then
TextBox21 = Range("c22")
Else
Range("C22") = TextBox21
End If
If TextBox22 = "" Then
TextBox22 = Range("c23")
Else
Range("C23") = TextBox22
End If
If TextBox23 = "" Then
TextBox23 = Range("c24")
Else
Range("C24") = TextBox23
End If
If TextBox24 = "" Then
TextBox24 = Range("c25")
Else
Range("C25") = TextBox24
End If
If TextBox25 = "" Then
TextBox25 = Range("c26")
Else
Range("C26") = TextBox25
End If
If TextBox26 = "" Then
TextBox26 = Range("c27")
Else
Range("C27") = TextBox26
End If
If TextBox27 = "" Then
TextBox27 = Range("c28")
Else
Range("C28") = TextBox27
End If
If TextBox28 = "" Then
TextBox28 = Range("c29")
Else
Range("C29") = TextBox28
End If
If TextBox29 = "" Then
TextBox29 = Range("c30")
Else
Range("C30") = TextBox29
End If
Unload Me
pour vous éclairer j'ai inséré une partie de mon fichier.
merci d'avance
Bonsoir Greg.18
Voici ton code largement optimisé
Private Sub CommandButton1_saisie_Click()
Dim Col As Integer, Ind As Integer
Col = 0
For Ind = 1 To 12
If Me("mois" & Ind).Value = True Then Col = Ind: Exit For
Next Ind
If Col = 0 Then
MsgBox ("Merci de sélectionner un mois!")
Exit Sub
End If
' Mise à jour de la bonne colonne
With Sheets("SAISIE M PLF232")
For Ind = 1 To 29
If Me("TextBox" & Ind) = "" Then
Me("TextBox" & Ind) = .Cells(1 + Ind, 2 + Col)
Else
.Cells(1 + Ind, 2 + Col).Value = Me("TextBox" & Ind).Value
End If
Next Ind
End With
Unload Me
End SubA+
Bonjour
Bonjour BrunoM45
Ma petite contribution
Un truc que je ne comprends pas : Remplir les TextBox pour ensuite fermer l'userform
Private Sub CommandButton1_saisie_Click()
Dim I As Integer, K As Integer, Colonne As Integer
With Sheets("SAISIE M PLF232")
For K = 1 To 12
If Me.Controls("mois" & K) = True Then
Colonne = K + 2
For I = 1 To 29
If Me.Controls("TextBox" & I) = "" Then
Me.Controls("TextBox" & I) = .Cells(I + 1, Colonne)
Else
.Cells(I + 1, Colonne) = Me.Controls("TextBox" & I)
End If
Next I
Exit For
End If
Next K
End With
If K > 12 Then
MsgBox ("Merci de sélectionner un mois!")
Else
Unload Me
End If
End SubSalut l'ami Banzai64
Banzai64 a écrit :Un truc que je ne comprends pas : Remplir les TextBox pour ensuite fermer l'userform
Je t'avoue franchement, moi non plus
Merci beaucoup pour la réactivité!
je vais tester ça de suite et je vous redis!
ensuite je vais tenter de vous expliquer pourquoi remplir les TextBox (je me trompe peut-être à 100% je débute):
supposons que j'ai à modifier un des chiffres saisi (genre mi-février mon C.A à fin janvier à légèrement fluctué suite à des ajustements comptables) je dois donc le ressaisir, si je ne saisi pas les autres TextBox les valeurs précédemment saisies seront écrasées non?
yes!!! ça tourne comme une horloge!
maintenant, si vous le permettez, j'aimerais bien comprendre... si vous êtes dispo bien sur.
merci d'avance
Bonsoir
Pour ma macro et grosso modo
Une boucle sur les OptionButton (Mois) et si un de coché, une boucle sur les TextBox dans la bonne colonne
Si on a fait le tour des OptionButton (mois) sans en trouvé un de coché : K vaudra 13 et message d'erreur
Super!
Merci beaucoup!
Bonjour à tous,
je suis navré de vous annoncer que j'ai encore un service à vous demander...
Comme vous pourrez le constater j'ai ajouté quelques éléments au UserForm (OptionButton1:14, CommandButton2 et TextBox35:37), que je souhaiterai lier à tout le reste (sélection du mois à saisir), malgré plusieurs heures passées sur le site dans les cours VBA je suis incapable de le faire moi même...
Si vous pouviez au moins m'aiguiller ce serait vraiment sympa!
Merci d'avance
Bonjour
Tu n'as rien à faire, comme ta base est vide laisse comme cela
Sérieusement que veux tu faire ?
Tu places quelques données et tu dis quand je fais .... je dois avoir ...... dans ..... etc.....
Moi je ne sais pas
Bonjour,
je vais tenter d'être plus précis,
Quand je sélectionne un mois et que je saisi les données dans les 34 premières TextBox je dois avoir celles-ci dans la colonne correspondante (feuille "SAISIE M PLF232" ligne 2 à 35), si une ou plusieurs TextBox ne sont pas saisies il ne faut pas que les données dans les colonnes correspondantes soient écrasées (en cas de saisie en plusieurs fois), si aucun mois (CheckBox) de sélectionné MsgBox : "Merci de sélectionner un mois!", si tentative de cocher deux mois (CheckBox) alors MsgBox : "Un seul choix possible!"
ensuite au click sur le bouton SAISIE les données doivent être incrémentées comme mentionné ci-dessus (jusqu'ici tout fonctionne grâce à ton code de jeudi) et un MsgBox doit apparaître et demander si oui ou non l'utilisateur veut saisir l'affrètement,si non unload si oui il doit choisir quel transporteur via les OptionButton renseigner les trois TextBox (N° 35 36 et 37) et valider avec le bouton saisie affrètement en fonction du transporteur choisi (et du mois choisi dans "sélection du mois à saisir") les données vont dans les cellules correspondantes (ex: transporteur KUEHNE pour janvier C36 C37 C38, transporteur GEFCO pour janvier C39 C40 C41, etc...) et un MsgBox doit demander à l'utilisateur si oui ou non il souhaite continuer de saisir ou non si oui rebelotte si non unload.
J'espère avoir été clair.
Merci d'avance
Bonjour
A vérifier
J'ai remplacé les CheckBox (Mois) par des OptionButton : Cela évite le module de classe
Super! Merci beaucoup.