Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème pour mettre une somme à certaines colonnes en VBA

1 réponse
Avatar
Louise
Voici mon code, je voudrais que lorsque la cellule contenant la valeur 300 de
la colonne b est atteinte, inscrire dans ma feuille serie 30 la formule de
somme pour mettre des totaux aux colonnes concernées.

Sub bt_click()
Range("A4:z65536").Select
Selection.ClearContents
Range("A4").Select
Dim l
l = 4
Application.ScreenUpdating = False
Sheets("Planification").Select

For j = 4 To Range("A65536").End(xlUp).Row
line2:
' si la valeur de la ligne j de la colonne B est 300 on arrête
If Cells(j, 2).Value = "300" Then
'Ici j'aimerais qu'une formule de somme s'inscrive automatiquement
dans ma feuille serie 30
Sheets(2).Select
Exit Sub
Else
' la vérification des cases vides doit être de 11 à 23,mais les colonnes
de 17 à 21 ne sont pas inclue pour la copie
For i = 11 To 23
If Cells(j, i).Value = "" Then
'si vide je ne fait rien
Else
'Je m'assure que les colonnes de 17 à 21 ne soit pas traités
pour l'envoie à line1 pour copier les données dans la feuille serie 30
If i = 17 Or i = 18 Or i = 19 Or i = 20 Or i = 21 Then
' rien faire
Else
GoTo line1
End If
End If
' Passe à l'autre ligne
Next i
End If
Next j
'la copie est terminé donne le focus à la feuille serie 30
Application.ScreenUpdating = True
Sheets(2).Select
Exit Sub

line1:


'copie les cellules de A à H de la ligne j dans la feuille serie30
For k = 1 To 8
Sheets(2).Cells(l, k) = Sheets(1).Cells(j, k)
Next k
'copie les cellules spécifiques seulement de la ligne j dans les bonnes
cellules de la feuille serie30 à la ligne l
Sheets(2).Cells(l, 9) = Sheets(1).Cells(j, 11)
Sheets(2).Cells(l, 11) = Sheets(1).Cells(j, 12)
Sheets(2).Cells(l, 13) = Sheets(1).Cells(j, 13)
Sheets(2).Cells(l, 15) = Sheets(1).Cells(j, 14)
Sheets(2).Cells(l, 17) = Sheets(1).Cells(j, 15)
Sheets(2).Cells(l, 19) = Sheets(1).Cells(j, 16)
Sheets(2).Cells(l, 21) = Sheets(1).Cells(j, 22)
Sheets(2).Cells(l, 23) = Sheets(1).Cells(j, 23)
Sheets(2).Cells(l, 25) = Sheets(1).Cells(j, 30)
'Sheets(2).Cells(l, 26) = Sheets(1).Cells(j, 31)
j = j + 1
l = l + 1
'retourne faire la ligne suivante dans la feuille planification
GoTo line2

End Sub

--
Un gros merci!

1 réponse

Avatar
ST
J'ai fait quelques modifs sur ton code (en rouge) qui évitent quelques
lignes de code supplémentaires.

Cells te permet de travailler sur toutes les cellules de la feuille active

Cells.SpecialCells(xlCellTypeLastCell).Row te permet d'obtenir le numéro de
la dernière ligne de la feuille active.

Par contre, peux tu envoyer un exemplaire de ton fichier car ce n'est pas
forcement clair !!

ST


Sub bt_click()
Cells.ClearContents
Range("A4").Select
Dim l
l = 4
Application.ScreenUpdating = False
Sheets("Planification").Select

For j = 4 To Cells.SpecialCells(xlCellTypeLastCell).Row
line2:
' si la valeur de la ligne j de la colonne B est 300 on arrête
If Cells(j, 2).Value = "300" Then
'Ici j'aimerais qu'une formule de somme s'inscrive automatiquement
dans ma feuille serie 30
Sheets(2).Select
Exit Sub
Else
' la vérification des cases vides doit être de 11 à 23,mais les colonnes
de 17 à 21 ne sont pas inclue pour la copie
For i = 11 To 23
If Cells(j, i).Value = "" Then
'si vide je ne fait rien
Else
'Je m'assure que les colonnes de 17 à 21 ne soit pas traités
pour l'envoie à line1 pour copier les données dans la feuille serie 30
If i = 17 Or i = 18 Or i = 19 Or i = 20 Or i = 21 Then
' rien faire
Else
GoTo line1
End If
End If
' Passe à l'autre ligne
Next i
End If
Next j
'la copie est terminé donne le focus à la feuille serie 30
Application.ScreenUpdating = True
Sheets(2).Select
Exit Sub

line1:


'copie les cellules de A à H de la ligne j dans la feuille serie30
For k = 1 To 8
Sheets(2).Cells(l, k) = Sheets(1).Cells(j, k)
Next k
'copie les cellules spécifiques seulement de la ligne j dans les bonnes
cellules de la feuille serie30 à la ligne l
Sheets(2).Cells(l, 9) = Sheets(1).Cells(j, 11)
Sheets(2).Cells(l, 11) = Sheets(1).Cells(j, 12)
Sheets(2).Cells(l, 13) = Sheets(1).Cells(j, 13)
Sheets(2).Cells(l, 15) = Sheets(1).Cells(j, 14)
Sheets(2).Cells(l, 17) = Sheets(1).Cells(j, 15)
Sheets(2).Cells(l, 19) = Sheets(1).Cells(j, 16)
Sheets(2).Cells(l, 21) = Sheets(1).Cells(j, 22)
Sheets(2).Cells(l, 23) = Sheets(1).Cells(j, 23)
Sheets(2).Cells(l, 25) = Sheets(1).Cells(j, 30)
'Sheets(2).Cells(l, 26) = Sheets(1).Cells(j, 31)
j = j + 1
l = l + 1
'retourne faire la ligne suivante dans la feuille planification
GoTo line2

End Sub