VBA - Comparaison deux facteurs + Suppresion cellules C si facteurs A et B différents

Mr.Nobody

XLDnaute Nouveau
Bonjour,


Merci d'avance pour vos réponses.

Je vous explique mon problème,

Je souhaite créer une macro qui pourra m'aider à comparer deux éléments et agir en conséquence.

Je vous donne un exemple :

Colonne A : Evenement A
Colonne B: Evenement B
Colonne C : Données lié à B
Colonne D: Données lié à B


Je souhaite donc une macro qui :

1) Comparer les infos en A et B,
2) Si A = B alors passer à la ligne et refaire la comparaison.
3) Si A =/ B alors supprimer les cellules ( vers le haut ) en C et D correspondantes à la ligne.


Pour effectuer cela je suis parti sur ce type de macro :

Sub suppr()
'la boucle generale
For a = 1 To 31
'premiere boucle comparaison
effacer = False
i = a
Do While effacer = False And Cells(i, 1).Value <> ""
If Cells(i, 1).Value <> Cells(i, 2).Value Then

Cells(i, 2).Value = ""

effacer = True

End If
i = i + 1
Loop
'Seconde boucle qui fait les decalages
Do While Cells(i, 6).Value <> ""

Cells(i, 2).Value = Cells(i + 1, 2).Value
Loop
'Bonus : couleur cellules si cellules en A = cellules en B
Cells(a, 1).Interior.ColorIndex = 4
Next a



End Sub

Avec ceci, la macro supprime bien les infos en C et D mais suppriment également toutes les infos qui suivent dans ces colonnes mais le " décalage " des cellules vers le haut ne s'effectue pas. Et du coup ça ne vérifie pas " ligne par ligne ".


Pouvez-vous m'apporter une suggestion?

Bien cordialement,
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - Comparaison deux facteurs + Suppresion cellules C si facteurs A et B diffé

Bonjour Mr.Nobody et bienvenu, bonjour le forum,

Puisque tu es nouveau parmi nous je te recommande de lire la
Lien supprimé du forum. Elle donne tous les bons plans pour obtenir une réponse rapidement. Dans ton cas le problème est l'absence de fichier exemple. Tes explications sont longues et manquent cruellement d'un visuel pour mieux comprendre.

Je te propose à tout hasard le code ci-dessous :
Code:
Public Sub Macro1()
Dim dl As Integer

dl = Cells(Application.Rows.Count, 1).End(xlUp).Row
For i = 1 To dl
    If Cells(i, 1) <> Cells(i, 2) Then
        Cells(i, 3).Value = Cells(i + 1, 3).Value
        Cells(i, 4).Value = Cells(i + 1, 4).Value
    Else
        Cells(i, 1).Interior.ColorIndex = 4
    End If
Next i
End Sub
 

Mr.Nobody

XLDnaute Nouveau
Re : VBA - Comparaison deux facteurs + Suppresion cellules C si facteurs A et B diffé

Bonjour Robert,

Merci de ta réponse. Après une légère modification ton code me donne exactement ce que je veux ! Mes lignes " non identiques" remontent bien vers le haut.

Cependant, seul petit détail, je suis obliger de cliquer plusieurs fois sur la macro pour qu'elle supprime toutes les lignes.

C'est pour cela que j'étais parti sur une boucle " Do... While...Loop".

Est-ce possible d'intégrer ce bout de macro en boucle et de la stopper une fois toutes les lignes ok?


Cordialement,
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - Comparaison deux facteurs + Suppresion cellules C si facteurs A et B diffé

Bonjour le fil, bonjour le forum,

Peut-être en inversant la boucle :
Code:
Public Sub Macro1()
Dim dl As Integer

dl = Cells(Application.Rows.Count, 1).End(xlUp).Row
For i = dl To 1 step -1
    If Cells(i, 1) <> Cells(i, 2) Then
        Cells(i, 3).Value = Cells(i + 1, 3).Value
        Cells(i, 4).Value = Cells(i + 1, 4).Value
    Else
        Cells(i, 1).Interior.ColorIndex = 4
    End If
Next i
End Sub
 

Mr.Nobody

XLDnaute Nouveau
Re : VBA - Comparaison deux facteurs + Suppresion cellules C si facteurs A et B diffé

Merci pour cette ajustement. J'ai pu trouver mon bonheur pour cette partie.

Cependant, j'ai juste un dernier soucis avec ma macro...

Ce n'est pas le même sujet, je m'explique :


A la base de cette macro je fais une recherche par critère pour copier les infos à la suite dans une autre feuille avec une boucle .find de tel sorte :


Set ball = onglethandicap.Columns("C").Find("A")


'Copie des informations ------------------------------------------------------------


If Not ball Is Nothing Then
premiereAdresse = ball.Address
Do

ongletbasket.Range("H" & ongletbasket.Rows.Count).End(xlUp).Offset(1, 0).Value = onglethandicap.Range("F" & ball.Row)
ongletbasket.Range("B" & ongletbasket.Rows.Count).End(xlUp).Offset(1, 0).Value = onglethandicap.Range("A" & ball.Row)


Set ball = onglethandicap.Columns("C").FindNext(ball)
Loop Until ball.Address = premiereAdresse
End If '---------------------------------------------------------

De tel sorte, si je trouve la lettre "A" dans la feuille1 alors je copie les infos en F et A dans ma feuille2 en H et B.



En réalité j'aimerai ajouter un second critère de type " OU " pour que ma recherche affiche à la suite les deux types de lignes trouvées.

Concrètement, au lieu d'un seul critère A j'aimerai ajouter un second B >

Recherche. ( A OU B) alors copie infos en feuill2 à la suite selon la recherche A ou la recherche B.

J'ai essayé plusieurs choses pour arriver à cela mais je n'y arrive pas...

Est-ce possible de faire un .find à deux critères "ou" ?

Merci d'avance.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA - Comparaison deux facteurs + Suppresion cellules C si facteurs A et B diffé

Bonjour Mr Nobody, bonjour ke forum,

Une solution qui va ralentir certainement la macro. Une boucle sur toutes les cellules avec une condition du type :
Code:
Dim cel As Range
For Each cel In Range("Ta_plage")
     If cel.Value = "A" Or cel.Value = "B" then ...
Next cel