Regrouper plusieurs macros en une seule

Bonjour à toutes et à tous.

Voilà je m'explique ! J'aimerai regrouper 3 macros en une seule. Ce qui diffère entre chacunes des macros ci-dessous ne sont

que les plages de sélection et destination. J'ai pense à ajouter un STEP dans un for mais je ne vois quand même comment faire ! Pourriez-vous m'aider ?

Merci d'avance

Sub MultiplieParMille()

Dim Tabl

Dim i As Integer, j As Integer

Tabl = Range("A:A").Value ( Plage de selection)

For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row

For j = 1 To 1

If IsNumeric(Tabl(i, j)) And Not IsEmpty(Tabl(i, 1)) Then

Tabl(i, j) = Tabl(i, j) * 1000

End If

Next j

Next i

Application.ScreenUpdating = False

Range("B:B") = Tabl (Plage de destination)

End Sub

Sub MultiplieParMille2()

Dim Tabl

Dim i As Integer, j As Integer

Tabl = Range("C:C").Value ( Plage de selection)

For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row

For j = 1 To 1

If IsNumeric(Tabl(i, j)) And Not IsEmpty(Tabl(i, 1)) Then

Tabl(i, j) = Tabl(i, j) * 1000

End If

Next j

Next i

Application.ScreenUpdating = False

Range("D:D") = Tabl (Plage de destination)

End Sub

Sub MultiplieParMille3()

Dim Tabl

Dim i As Integer, j As Integer

Tabl = Range("E:E").Value ( Plage de selection)

For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row

For j = 1 To 1

If IsNumeric(Tabl(i, j)) And Not IsEmpty(Tabl(i, 1)) Then

Tabl(i, j) = Tabl(i, j) * 1000

End If

Next j

Next i

Application.ScreenUpdating = False

Range("F:F") = Tabl (Plage de destination)

End Sub

Bonjour,

Peut-être ainsi :

Sub mult_1000()
Dim J As Long
Dim I As Byte
Dim Tabl
Dim DerLig As Long
DerLig = Cells.Find("*", , , , xlByRows, xlPrevious).Row
Tabl = Range("A1:F" & DerLig)
For J = LBound(Tabl) To UBound(Tabl)
    For I = 1 To 5 Step 2
        If IsNumeric(Tabl(J, I)) And Not IsEmpty(Tabl(J, I)) Then Tabl(J, I + 1) = Tabl(J, I) * 1000
    Next I
Next J
Range("A1:F" & DerLig) = Tabl
End Sub

Bonne journée

Merci beaucoup pour ta réponse ! Étant débutante en vba pourquoi tu met tabl(i, j+1) ?!

Re-,

Tu as remarqué que je recherche la dernière ligne remplie de l'onglet par DerLig.

Ensuite, je rentre dans le tableau VBA (Tbl) la plage concernée. (de A1 à F&DerLig)

Ce tableau comporte donc "DerLig" lignes, et 6 colonnes.

Puis je fais une première boucle (la plus longue), qui balaie toutes les lignes. (matérialisée par la variable J)

Et j'y imbrique une deuxième, pour les colonnes, et je ne traite que les colonnes 1, 3 et 5 (soit A, C et E) (par la variable I)

Les colonnes 2, 4 et 6 (soit B, D et F) sont donc les colonnes qui vont recevoir le résultat de la multiplication

Je regarde si la valeur Tabl(J, I) est numérique, et non vide, et je mets donc dans la colonne suivante du tableau "Tabl(J, I+1)" le résultat de la multiplication par 1000

Et je recolle le tableau à sa place...

Bonne fin de journée

Edit, ce n'est pas Tabl(I, J), mais Tabl(J, I) qui doit être numérique et non vide (correction effectuée)

Merci c'est nettement plus claire !

Bonjour,

Sais-tu pourquoi si je change la plage de selection et de destination Range("B2:G" & Derlig) ainsi que la boucle I la macro ne fonctionne plus ?

Sub mult_1000()

Dim J As Long

Dim I As Byte

Dim Tabl

Dim DerLig As Long

DerLig = Cells.Find("*", , , , xlByRows, xlPrevious).Row

Tabl = Range("B2:G" & DerLig)

For J = LBound(Tabl) To UBound(Tabl)

For I = 2 To 7 Step 2

If IsNumeric(Tabl(J, I)) And Not IsEmpty(Tabl(J, I)) Then Tabl(J, I + 1) = Tabl(J, I) * 1000

Next I

Next J

Range("B2:G" & DerLig) = Tabl

End Sub

Bonsoir,

Il n'est nul besoin de modifier la boucle de la variable I

En effet, I désigne la colonne du Tableau (Tabl), et non la colonne du classeur. Et comme tout se passe dans le tableau VBA, on s'en fout un peu des colonnes du classeur...

Donc tu gardes 1 To 5.

Bonne soirée

Rechercher des sujets similaires à "regrouper macros seule"