Optimisation code, addition sur une rangée

Résolu
cs_elcano Messages postés 2 Date d'inscription dimanche 27 août 2006 Statut Membre Dernière intervention 6 avril 2007 - 5 avril 2007 à 20:31
Rico 95 Messages postés 18 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 21 mai 2008 - 14 avril 2007 à 13:03
Bonsoir,


Je débute dans la programmation VBA sous excel, j'ai réussi a créer une
checkbox et à faire ce que je voulais faire, c'est à dire lorsque
qu'elle est active, j'additionne une valeur dans mon tableau... mais je
trouve ce code un peu lourd !

Quelqu'un a t'il une idée pour l'optimiser ?
Private Sub CheckBox1_Click()

    If CheckBox1.Value = True Then

            [d5] = "=Sum(d4+28+24)"

            [e5] = "=Sum(e4+28+24)"

            [f5] = "=Sum(f4+28+24)"

            [g5] = "=Sum(g4+28+24)"

            [h5] = "=Sum(h4+28+24)"

            [i5] = "=Sum(i4+28+24)"

            [j5] = "=Sum(j4+28+24)"

            [k5] = "=Sum(k4+28+24)"

            [l5] = "=Sum(l4+28+24)"

            [m5] = "=Sum(m4+28+24)"

            [n5] = "=Sum(n4+28+24)"

            [o5] = "=Sum(o4+28+24)"

            [p5] = "=Sum(p4+28+24)"

            [q5] = "=Sum(q4+28+24)"

            [r5] = "=Sum(r4+28+24)"

            [s5] = "=Sum(s4+28+24)"

            [t5] = "=Sum(t4+28+24)"

        Else

            [d5] = "=Sum(d4+28)"

            [e5] = "=Sum(e4+28)"

            [f5] = "=Sum(f4+28)"

            [g5] = "=Sum(g4+28)"

            [h5] = "=Sum(h4+28)"

            [i5] = "=Sum(i4+28)"

            [j5] = "=Sum(j4+28)"

            [k5] = "=Sum(k4+28)"

            [l5] = "=Sum(l4+28)"

            [m5] = "=Sum(m4+28)"

            [n5] = "=Sum(n4+28)"

            [o5] = "=Sum(o4+28)"

            [p5] = "=Sum(p4+28)"

            [q5] = "=Sum(q4+28)"

            [r5] = "=Sum(r4+28)"

            [s5] = "=Sum(s4+28)"

            [t5] = "=Sum(t4+28)"

    End If

End Sub


Merci.

7 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
6 avril 2007 à 05:34
Salut,

il faut faire une boucle sur les colonnes, voici le code :

Const Ajout1 As Long =  52 '24 + 28
Const Ajout2 As Long = 28

Private Sub CheckBox1_Click()
    Dim i As Long
    
If CheckBox1.Value = True Then
    For i = 4 To 20
        Cells(5, i).Value = Cells(4, i).Value + Ajout1
    Next i
Else
    For i = 4 To 20
        Cells(5, i).Value = Cells(4, i).Value + Ajout2
    Next i
End If
End Sub

~ <small> Mortalino ~ Colorisation automatique </small>

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 avril 2007 à 08:49
Salut,
Ou bien encore.

Private Sub CheckBox1_Click()
Dim ValeurAjout As Integer
Dim i As Integer
   If CheckBox1.Value Then
       ValeurAjout = 28 + 24
   Else
       ValeurAjout = 28
   End If
   
   For i = 4 To 20
       Cells(5, i).Value = Cells(4, i).Value + ValeurAjout
   Next i
End Sub , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 avril 2007 à 08:51
Re,
A celle la est encore mieux (quoique moins facile à comprendre peu être)

Private Sub CheckBox1_Click()
   For i = 4 To 20
       Cells(5, i).Value = Cells(4, i).Value + IIf(CheckBox1.Value, 28 + 24, 28)
   Next i
End Sub , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
cs_elcano Messages postés 2 Date d'inscription dimanche 27 août 2006 Statut Membre Dernière intervention 6 avril 2007
6 avril 2007 à 10:05
Merci beaucoup pour vos réponses, les 3 réponses sont parfaites, mais je vais opter pour la 1ère qui reste dans le style ou j'avais écrit, car si je veut modifier mon code plus tard la 3ème sera pas du gateau pour moi :)

Bonne journée et encore merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Rico 95 Messages postés 18 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 21 mai 2008
6 avril 2007 à 11:57
Bonjour à tous,

J'ai une question de même type:

Dans mon prog j'utilise beaucoup de WorkSheets ("Feuill1").Cells (...) et je veux maintenant y ajouté une référence au classeur actif:

WorkBook ("Book1").WorkSheets ("Feuill1").Cells (1,1)

Y a t'il un moyen d'allèger ces instructions ? En remplaçant dans un premier temps le WorkSheets ("Feuill1") par un objet ou une donnée qui s'appellerai par exemple W_f qui serait reconnu dans tous le classeur ?

J'ai essayé des Dim ou Public sans succès. Est ce la bonne méthode ?

Merci d'avance

Rico
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 avril 2007 à 13:43
Salut,
IL existe avec Excel les objet Suivant:
ActiveWorkBook : type WorkBook représentant le classeur actif.
ActiveSheet: Type WorkSheet représentant la feuille active.

Autre idée.
'Dans un module
Public W_F As Worksheet

'Dans le code de ThisWorkBook
Private Sub Workbook_Open()
   Set W_F = ActiveWorkbook.Worksheets("Feuil1")
End Sub , ----
[code.aspx?ID=41455 By Renfield]

W_F représentera alors pour le classeur ouvert Worksheets( "Feuil1" ) et ce PARTOUT normalement

@+: =89254 Ju£i?n
Pensez: Réponse acceptée
0
Rico 95 Messages postés 18 Date d'inscription mardi 13 mars 2007 Statut Membre Dernière intervention 21 mai 2008
14 avril 2007 à 13:03
Merci, en effet ça marche !!
0
Rejoignez-nous