Problème pour mettre une somme à certaines colonnes en VBA
1 réponse
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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