Simplification code

Bonjour,

Je cherche à simplifier mon code, ce qui me gêne c'est de répéter les 3 lignes entre End If et If chaque fois. J'ai 55 combobox.

J'imaginais un truc plus précis, en l'occurrence : "Quand combobox <> "" alors mon code sinon allez à la prochaine combobox sachant qu'il faut balayer de combobox3 à combobox57". Voici une partie de mon code :

    Sheets("feuille 2").Activate
    Range("A1").Select
    Selection.End(xlDown).Select
    Selection.Offset(1, 0).Select
    If ComboBox3 > 0 Then
    ActiveCell = ComboBox1
    ActiveCell.Offset(0, 1) = lblieu2.Caption
    ActiveCell.Offset(0, 2) = CDate(Format(Now, "dd/mm/yyyy"))
    ActiveCell.Offset(0, 3) = cbitem1.Caption
    ActiveCell.Offset(0, 4) = ComboBox3 * 1
    End If
    Range("A1").Select
    Selection.End(xlDown).Select
    Selection.Offset(1, 0).Select
    If ComboBox4 > 0 Then
    ActiveCell = ComboBox1
    ActiveCell.Offset(0, 1) = lblieu2.Caption
    ActiveCell.Offset(0, 2) = CDate(Format(Now, "dd/mm/yyyy"))
    ActiveCell.Offset(0, 3) = cbitem2.Caption
    ActiveCell.Offset(0, 4) = ComboBox4 * 1
    End If
    Range("A1").Select
    Selection.End(xlDown).Select
    Selection.Offset(1, 0).Select
    If ComboBox5 > 0 Then

Merci beaucoup si quelqu'un a une solution à me proposer !

Bonjour,

Tu peux essayer quelque chose de ce genre j'imagine :

Sheets("feuille 2").Activate
For i = 3 to 57
    If ComboBox(i) > 0 Then
With Range("A1").End(xlDown)
    .Offset(1, 0).value = ComboBox1
    .Offset(1, 1).value = lblieu2.Caption
    .Offset(1, 2).value = CDate(Format(Now, "dd/mm/yyyy"))
    .Offset(1, 3).value = cbitem1.Caption
    .Offset(1, 4).value = ComboBox(i) * 1
End with
    Else:
End If
Next

End sub

Bonjour,

A tester

Sheets("feuille 2").Activate
    For i = 3 To 57
      Range("A1").Select
      Selection.End(xlDown).Select
      Selection.Offset(1, 0).Select

      If Me.Controls("Combobox" & i) > 0 Then
        ActiveCell = ComboBox1
        ActiveCell.Offset(0, 1) = lblieu2.Caption
        ActiveCell.Offset(0, 2) = CDate(Format(Now, "dd/mm/yyyy"))
        ActiveCell.Offset(0, 3) = cbitem1.Caption
        ActiveCell.Offset(0, 4) = Me.Controls("Combobox" & i) * 1
      End If
    Next i

Merci beaucoup pour vos propositions.

J'ai testé les 2 qui fonctionnent, seulement d'autres problèmes pointent leur nez, naturellement. Je m'explique, à chaque fois que ma combobox prend +1, cbitem.caption doit suivre ou correspondre plutôt à la combobox supérieure à 0. Ici par défaut elle retient cbitem1.caption...

Combobox3 = cbitem1

Combobox4 = cbitem2, etc.

Mon code actuel :

Nb_cmb = 55

Sheets("feuille 2").Activate
For i = 3 To 57
    If Me.Controls("ComboBox" & i) > 0 Then
With Range("A1").End(xlDown)
    .Offset(1, 0).Value = ComboBox1
    .Offset(0, 1) = lblieu2.caption
    .Offset(0, 2) = CDate(Format(Now, "dd/mm/yyyy"))
    .Offset(0, 3) = cbitem1.Caption
    .Offset(0, 4) = Me.Controls("ComboBox" & i) * 1
End With
    Else:
End If
Next

Merci.

Re,

Et comment veux - tu que l'on sache?

Je ne sais pas. Je demande si cela est possible de faire correspondre admettons la combobox4 avec cbitem2 ou la combobox5 avec cbitem3.

Est-ce possible ?

Tu as regardé comment on a fait pour que le reste fonctionne ?

Tu ne vois pas une certaine logique qui te permettrait de faire ce que tu cherches ?

Sincèrement non.

J'ai pensé à un truc du genre :

for i = 3 to 57 celui-là pour les combo

for ii = 1 to 55 cellui-là pour les cbitem (je ne sais pas si on peut donner ce genre d'instruction)

Quoiqu'il arrive ça ne règle pas le problème de correspondance, c'est à dire si c'est la combobox57 il faut le cbitem 55...

et un truc du genre i - 2 ?

En fait j'ai une idée qui sans doute va vous faire sourire parce que je me doute qu'il y a des erreurs :

Sheets("feuille2").Activate
For i = 3 To 57
    Range("A1").Select
    Selection.End(xlDown).Select
    Selection.Offset(1, 0).Select

    If Me.Controls("ComboBox" & i) > 0 Then
    ActiveCell = ComboBox1
    ActiveCell.Offset(0, 1) = lblieu2.caption
    ActiveCell.Offset(0, 2) = CDate(Format(Now, "dd/mm/yyyy"))
    ActiveCell.Offset(0, 3) = Me.Controls("cbitem" & i - 2)
    ActiveCell.Offset(0, 4) = Me.Controls("ComboBox" & i) * 1
End If
Next i

Le cbitem et i qui correspond au numéro de la combo - 2 et ça correspond !?

Si j'ai bien compris ce que tu galères à nous dire, oui.

Après, comme j'ai l'impression que ce n'est pas très clair ... Il reste une possibilité que ce ne soit pas ça.

Alors ça marche, mais quand la valeur de cbitem arrive dans ma cellule excel, il y a inscrit FAUX...

J'ai tenté d'inscrire Me.Controls("cbitem.caption" & i - 2), là ca bug carrément. Je ne suis pas loin.

Dans la structure que j'avais donnée au début, on serait sur du :

cbitem(i -2).Caption

Bonsoir…

à tester :

‘…
    Dim i As Byte, R As Range
    For i = 3 To 57
        Set R = Sheets("feuille2").Range("A1").End(xlDown)(2)
        If Me("Combobox" & i) > 0 Then
            R(1, 2) = lblieu2.Caption
            R(1, 3) = CDate(Format(Now, "dd/mm/yyyy"))
            R(1, 4) = Me("cbitem" & i).Caption
            R(1, 5) = Me("Combobox" & i) * 1
        End If
    Next
‘…

Mais il y a de quoi être mal en point avec autant de boutons !

remarque : Me.Controls( peut se réduire à Me(

J'y suis parvenu, chaque cbitem correspond bien à mes combobox. Merci à vous. Pour ceux que ça intéresse le code :

Sheets("feuille2").Activate
For i = 3 To 57
    Range("A1").Select
    Selection.End(xlDown).Select
    Selection.Offset(1, 0).Select

    If Me("ComboBox" & i) > 0 Then
    ActiveCell = ComboBox1
    ActiveCell.Offset(0, 1) = cblieu2.Caption
    ActiveCell.Offset(0, 2) = CDate(Format(Now, "dd/mm/yyyy"))
    ActiveCell.Offset(0, 3) = Me("cbitem" & i - 2).Caption
    ActiveCell.Offset(0, 4) = Me("ComboBox" & i) * 1
End If
Next i
Rechercher des sujets similaires à "simplification code"