Comparer les cellules d'une même colonne deux à deux
Bonjour!!
Je suis nouveau sur le forum et débutant en VBA. J'ai un problème concernant la comparaison de cellule.
En fait dans la même colonne j'aimerais comparer la cellule n à la cellule n+1, puis la cellule n + 1 à la cellule n + 2 etc... Et ajouter une ligne vierge entre les 2 quand les deux valeurs sont différentes. J'ai essayé avec la fonction "for... to...step" mais le résultat n'est jamais bon.
Je sais pas si c'est possible de faire ça mais merci d'avance pour vos réponses
Salut Maroon,
tu pourras tout faire en VBA!
Il faut juste commencer avec quelques bonnes petites leçons, un bon livre, chipoter quelques codes pour voir et comprendre!
Et surtout, quand tu demandes un coup de main, procurer un fichier (pas trop éloigné de tes besoins réels!) pour nous permettre de bien cibler nos réponses!
Bienvenue au club!
A+
D'accord,
j'ai mis un fichier avec un extrait du tableau parce que l'original est trop lourd. Dans la colonne B il y a des valeurs que j'aimerais séparer par une ligne vierge (sur toute la longueur du tableau) à chaque fois qu'elles changent.
Pour insérer la ligne ça pose pas de problème, mais j'arrive pas à écrire le code pour parcourir les cellules et les comparer sur la même colonne...
J'ai essayé le code suivant mais il y a une erreur dans la ligne du if et je ne la trouve pas!
Sub test()
Dim i As Integer
For i = 2 To 2381 Step 1
If Cells(i, B).Value <> Cells(i + 1, B).Value Then
Rows(i).Insert
End If
Next i
End Sub
Bonjour,
pour insérer ou supprimer il est préférable de commencer par le bas
Sub test()
Dim zz As Integer
zz = [A65000].End(xlUp).Row
For i = zz To 2 Step -1
If Cells(i, "B").Value <> Cells(i - 1, "B").Value Then
Rows(i).Insert
End If
Next i
End Sub
P.
ça marche!! Merci beaucoup!!!
Rebonjour,
J'ai encore un problème concernant l'insertion d'une nouvelle ligne. La ligne est introduite sous une condition et j'aimerais appliquer des calculs sur cette nouvelle ligne sous certaine condition aussi!!! En partant du code de Patrick1957 j'ai fait:
Sub séparer_EA()
Dim zz As Integer, x As Integer
zz = [A65000].End(xlUp).Row
x = 1
For i = zz To 2 Step -1
If Cells(i, "B").Value <> Cells(i - 1, "B").Value Then
Rows(i).Insert
End If
Next i
End Sub
Sub sum()
While Cells(i - x, "B").Value = Cells(i - 2, "B").Value ###En fait je veux additionner les cellules de la colonne C au-dessus de la nouvelle ligne créée tant que la valeur des cellules de la colonne B rest la même###
Cells(i, "C").Formula = sum(Range(Cells(i - 1, "C").Value, Cells(i - x, "C").Value)) ###Addition des cellules i-1,"C" à (i-x),"C". La valeur de x dépends du nombre de cellule B qui ont la même valeur.###
Wend
End Sub
Bonjour!
décidément je n'arrive pas à m'en sortir! J'ai toujours un problème pour la comparaison des cellules.
J'ai trié les lignes de mon tableau en classant les valeurs de la colonne G par ordre croissant. Il y a plusieurs lignes pour lesquelles la valeur de G est identique ( donc il y a un groupe de ligne pour chaque valeur différente de G) . Et en fait il faut que j'applique des calculs sur chaque groupe de ligne et copier les résultats dans une nouvelle feuille excel.
Est-ce que quelqu'un peut me donner une indication dans les fonctions à utiliser et leur enchainement.
J'ai essayé avec différentes fonctions (while, if ) mais je pense que j'ai un problème au niveau de la variable qui permet de passer au groupe de ligne suivant. Et surtout comment dire de copier la nouvelle valeur de chaque calcul dans une cellule différente ou une nouvelle ligne
Sub macro()
Dim bdd As Integer 'je déclare la variable qui correspond à chaque cellule de la colonne G
Static a As Long
Dim feuille As Worksheet 'variable qui correspondra à la nouvelle feuille
surface = 0
bdd = Range("B2").End(xlUp).Row
Set feuille = Sheets.Add
feuille.Name = "selection" & a 'créer la nouvelle feuille et renommer
Sheets("feuil1").Select 'selectionner la feuille contenant le tableau
Range("B2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort Key1:=Range("B2") 'trier les cellules de a colonne B à partir de B2
For i = bdd To 2 Step -1
While Cells(i, "B").Value = Cells(i - 1, "B")
surface = surface + Cells(i, "D").Value
Sheets("selection" & a).Cells(1, "A").Value = surface 'exemple d'opération : somme des valeurs de la colonne D pour les ligne avec la même valeur de G et copie dans la cellule A1 de la nouvelle feuille
Wend
Next i
End Sub
Ça m'a l'air très compliqué donc j'aimerais au moins des indications ou conseils parce que je ne vais pas m'en sortir!
Merci d'avance!!
Rebonjour,
J'ai revu mon code mais il y a toujours un problème. En fait lorsque que lorsque j'utilise la fonction somme que les valeurs des sommes des cellules précédentes soient conservées jusqu'à ce que la condition ne soit plus respectée.
Sub macro1()
Dim ligne As Integer
Dim Sum As Long
Dim feuille As Worksheet
Sum = 0
ligne = 2 'les données démarrent à partir de la seconde ligne
Range("B2").Select 'je trie les données
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort Key1:=Range("B2")
Do While Cells(ligne, 2).Value <> Null 'données à comparées en colonne 2
If Cells(ligne, 2).Value = Cells(ligne + 1, 2) Then
Sum = Sum + Cells(ligne, 4).Value
End If
ligne = ligne + 1
Loop
'je mets les résultats dans un autre onglet
Set feuille = Sheets.Add
feuille.Name = "selection" & a
Worksheets("selection" & a).Cells(1, 1).Value = Sum
End Sub
Bonjour Maroon,
j'espère que tu as pu dormir sereinement!
C'est ce genre de chose que tu cherches ?
A+
Bonjour!
Merci beaucoup curulis57!! Je suis entrain de voir le code que tu m'as envoyé! Je ferai un retour une fois que j'ai terminé!
Merci encore!
Salut curulis57!
Merci beaucoup pour ta réponse!! ce n'est pas exactement ce que je veux mais il y a certaine étape de ton code qui vont me servir!
Comment je fais pour ouvrir le code? je suis allé dans macro mais il n'y a rien!
Grace aux différentes aides que j'ai reçu je suis arrivé à ce code:
Option Explicit
Sub macro2()
Dim ligne As Integer
Dim total As Double
Dim feuille As Worksheet
Dim Flag_Ok As Boolean
Dim NL As Integer 'moi
Dim NB As Integer
Dim x As Integer
Dim ST As Double
NL = 1
NB = 1
ligne = 2
total = Worksheets("feuil1").Range("D" & ligne).Value
'Problème 1:la cellule à partir de laquelle la somme commence doit correspondre (voir exemple)
'feuille selection existe ??
For x = 1 To Worksheets.Count
If Worksheets(x).Name = "selection" Then
Flag_Ok = True
Exit For
End If
Next x
'ajout feuille si existe pas
If Not Flag_Ok Then
Set feuille = Sheets.Add
feuille.Name = "selection"
End If
With Worksheets("feuil1")
.Range("B2:D" & .Range("B" & Rows.Count).End(xlUp).Row).Sort Key1:=.Range("B2") 'tri zone par Colonne B. Probleme2: il faut que le tri soit étendu au tableau ( j'utilise des tableaux de tailles variables)
Do While .Cells(ligne, 2).Value <> "" 'données à comparées en colonne 2
If .Cells(ligne, 2).Value = .Cells(ligne + 1, 2) Then
total = total + .Cells(ligne + 1, 4).Value
NB = NB + 1
Else
'je mets les résultats dans un autre onglet
If NB > 1 Then 'x cellules colonnes 2 egales
ST = total + .Cells(ligne + 1, 4).Value
Else 'une seule cellule
ST = .Cells(ligne, 4).Value
End If
Worksheets("selection").Cells(NL, 1).Value = ST
NL = NL + 1 'incremente ligne feuille resultat
total = 0 'initialisation Somme. Probleme 3: lié au problème 1
End If
ligne = ligne + 1 'incremente ligne feuille donnees
Loop
End With
End Sub
Par exemple si j'ai :
A B C D
1 1 2 1
3 1 3 5
4 0 3 1
0 0 3 3
alors je dois additionner 1 + 5 et copier 6 dans une cellule, puis 1 + 3 et copier 4 dans une autre cellule (car on passe de 1 à 0 dans B)
Si tu as encore de l'aide à m'accorder!!
Rebonjour!
Je poste le code final qu'on m'a donné bien gentiment!
Donc dans le tableau suivant la colonne B sert de référence et lorsque ça valeur change l'addition des cellules correspondantes de la colonne D est effectuée.
Donc ici on a 6+5=11 copié dans la cellule d'une nouvelle feuille, ensuite 1+3+2=6 copié dans la cellule suivante etc...
A B C D
1 1 2 6
3 1 3 5
4 0 3 1
0 0 3 3
3 0 7 2
Option Explicit
Sub macro5()
Const n = "selection"
Dim f As Worksheet
Dim c As Range
Dim d As Range 'destination
Dim t As Double
On Error Resume Next
Set f = Worksheets(n)
On Error GoTo 0
If f Is Nothing Then
Set f = Worksheets.Add
f.Name = n
End If
Set d = f.Cells(1, 1)
With Worksheets("feuil1").Range("A1").CurrentRegion
.Sort Key1:=.Cells(2, 2), Header:=xlYes
With .Resize(.Rows.Count - 1).Offset(1)
For Each c In .Columns("B").Cells
If c.Value = c.Offset(-1).Value Then
t = t + c.Offset(0, 2).Value
d.Value = t
Else
t = c.Offset(0, 2).Value
If c.Row > .Row Then Set d = d.Offset(1)
d.Value = t
End If
Next c
End With
End With
End Sub