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...

64exemple.xlsx (8.82 Ko)

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!! En tout cas merci beaucoup!

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
Rechercher des sujets similaires à "comparer meme colonne deux"