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 Sub

A+

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 Sub

Salut 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.

Rechercher des sujets similaires à "raccourcir procedure"