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

Comparer les cellules de 2 colonnes et agir sur cellules identiques

6 réponses
Avatar
fred
Bonjour,
J'aimerais par une macro comparer 2 colonnes colB, colC ligne par ligne.
Si 2 cellules ont le même contenu (texte), le contenu cellule ColB se
déplace en offset (1,-1) et le contenu de la cellule ColC est effacée.
Merci de votre aide

6 réponses

Avatar
michdenis
Bonjour Fred,

Essaie ceci :

'-----------------------------------
Sub Test()

Dim ColB As Range, ColC As Range
Dim A As Long, DerLig As Long

With Worksheets("Feuil1")
DerLig = .Range("B:C").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set ColB = .Range("b1:b" & DerLig)
Set ColC = .Range("C1.C" & DerLig)
End With

For A = 1 To DerLig
If ColB(A) = ColC(A) Then
ColB(A).Cut ColB(A).Offset(1, -1)
ColC(A).ClearContents
End If
Next

Set ColB = Nothing: Set ColC = Nothing
End Sub
'-----------------------------------


Salutations!


"fred" a écrit dans le message de news: 4339c620$0$8288$
Bonjour,
J'aimerais par une macro comparer 2 colonnes colB, colC ligne par ligne.
Si 2 cellules ont le même contenu (texte), le contenu cellule ColB se
déplace en offset (1,-1) et le contenu de la cellule ColC est effacée.
Merci de votre aide
Avatar
fred
J'ai testé la macro...mais je n'ai rien qui se déplace???
Je ne vois pas le problème!!!


"michdenis" a écrit dans le message de news:

Bonjour Fred,

Essaie ceci :

'-----------------------------------
Sub Test()

Dim ColB As Range, ColC As Range
Dim A As Long, DerLig As Long

With Worksheets("Feuil1")
DerLig = .Range("B:C").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set ColB = .Range("b1:b" & DerLig)
Set ColC = .Range("C1.C" & DerLig)
End With

For A = 1 To DerLig
If ColB(A) = ColC(A) Then
ColB(A).Cut ColB(A).Offset(1, -1)
ColC(A).ClearContents
End If
Next

Set ColB = Nothing: Set ColC = Nothing
End Sub
'-----------------------------------


Salutations!


"fred" a écrit dans le message de news:
4339c620$0$8288$
Bonjour,
J'aimerais par une macro comparer 2 colonnes colB, colC ligne par ligne.
Si 2 cellules ont le même contenu (texte), le contenu cellule ColB se
déplace en offset (1,-1) et le contenu de la cellule ColC est effacée.
Merci de votre aide





Avatar
michdenis
Bonjour Fred,

Avec la macro proposée, tu dois adapter le nom de la feuille où sont tes données :
Dans mon exemple, cette feuille est : "Feuil1"

Est-ce que tes données sont en colonne B et C ?

Est-ce qu'il y a des lignes où la valeur de la colonne b = la valeur de la colonne c ?

Cette procédure devrait fonctionner correctement !

'---------------------------------------
Sub Test()

Dim ColB As Range, ColC As Range
Dim A As Long, DerLig As Long

Application.ScreenUpdating = False

With Worksheets("Feuil1") ' Nom Feuille à déterminer
DerLig = .Range("B:C").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set ColB = .Range("b1:b" & DerLig)
Set ColC = .Range("C1.C" & DerLig)
End With

For A = 1 To DerLig
If ColB(A) = ColC(A) Then
ColB(A).Cut ColB(A).Offset(1, -1)
ColC(A).ClearContents
End If
Next

Set ColB = Nothing: Set ColC = Nothing
End Sub
'---------------------------------------


Salutations!
Avatar
fred
OK je viens de retester...la macro est correcte effectivement...En fait la
valeur de la ColB doit être strictement égale à la valeur de la ColC...là
était le problème...car il y avait des espaces en fin de cellules!
J'ai dû rajouter ceci avant de commencer la boucle
For Each Cellule In ActiveSheet.UsedRange
Cellule.Value = RTrim(Cellule.Value)
Next

Y'a t-il un bon livre pédagogique pour mettre en place des macros de ce
style et en général (qui explique pas à pas détaillé...) car j'aimerais
avancé???
Merci beaucoup pour ton aide!


"michdenis" a écrit dans le message de news:

Bonjour Fred,

Avec la macro proposée, tu dois adapter le nom de la feuille où sont tes
données :
Dans mon exemple, cette feuille est : "Feuil1"

Est-ce que tes données sont en colonne B et C ?

Est-ce qu'il y a des lignes où la valeur de la colonne b = la valeur de la
colonne c ?

Cette procédure devrait fonctionner correctement !

'---------------------------------------
Sub Test()

Dim ColB As Range, ColC As Range
Dim A As Long, DerLig As Long

Application.ScreenUpdating = False

With Worksheets("Feuil1") ' Nom Feuille à déterminer
DerLig = .Range("B:C").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set ColB = .Range("b1:b" & DerLig)
Set ColC = .Range("C1.C" & DerLig)
End With

For A = 1 To DerLig
If ColB(A) = ColC(A) Then
ColB(A).Cut ColB(A).Offset(1, -1)
ColC(A).ClearContents
End If
Next

Set ColB = Nothing: Set ColC = Nothing
End Sub
'---------------------------------------


Salutations!






Avatar
michdenis
Bonjour Fred,

Concernant les bouquins, il y en a plusieurs bons sur le marché.

Mes auteurs préférés : John Walkenbach - Excel 2000 et VBA le guide du développeur

"Excel 2003 VBA Programmer's Reference" par Paul Kimmel, Stephen Bullen, John Green, Rob Bovey, Robert Rosenberg (la traduction
française de ce volume existe!)

Lorsque c'est possible, la combinaison de plusieurs ouvrages sur le sujet enrichi l'apprentissage. À part des ouvrages cités, je
suis sûr qu'il y en a beaucoup d'autres!. Il s'agit de bouquiner un peu pour trouver la perle rare qui convient à son niveau de
connaissance.


Salutations!





"fred" a écrit dans le message de news: 433a7033$0$18081$
OK je viens de retester...la macro est correcte effectivement...En fait la
valeur de la ColB doit être strictement égale à la valeur de la ColC...là
était le problème...car il y avait des espaces en fin de cellules!
J'ai dû rajouter ceci avant de commencer la boucle
For Each Cellule In ActiveSheet.UsedRange
Cellule.Value = RTrim(Cellule.Value)
Next

Y'a t-il un bon livre pédagogique pour mettre en place des macros de ce
style et en général (qui explique pas à pas détaillé...) car j'aimerais
avancé???
Merci beaucoup pour ton aide!


"michdenis" a écrit dans le message de news:

Bonjour Fred,

Avec la macro proposée, tu dois adapter le nom de la feuille où sont tes
données :
Dans mon exemple, cette feuille est : "Feuil1"

Est-ce que tes données sont en colonne B et C ?

Est-ce qu'il y a des lignes où la valeur de la colonne b = la valeur de la
colonne c ?

Cette procédure devrait fonctionner correctement !

'---------------------------------------
Sub Test()

Dim ColB As Range, ColC As Range
Dim A As Long, DerLig As Long

Application.ScreenUpdating = False

With Worksheets("Feuil1") ' Nom Feuille à déterminer
DerLig = .Range("B:C").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set ColB = .Range("b1:b" & DerLig)
Set ColC = .Range("C1.C" & DerLig)
End With

For A = 1 To DerLig
If ColB(A) = ColC(A) Then
ColB(A).Cut ColB(A).Offset(1, -1)
ColC(A).ClearContents
End If
Next

Set ColB = Nothing: Set ColC = Nothing
End Sub
'---------------------------------------


Salutations!






Avatar
fred
OK je vais regarder toutes ces références de livres...et m'y atteler!!!
Merci pour tout

"michdenis" a écrit dans le message de news:

Bonjour Fred,

Concernant les bouquins, il y en a plusieurs bons sur le marché.

Mes auteurs préférés : John Walkenbach - Excel 2000 et VBA le guide du
développeur

"Excel 2003 VBA Programmer's Reference" par Paul Kimmel, Stephen Bullen,
John Green, Rob Bovey, Robert Rosenberg (la traduction
française de ce volume existe!)

Lorsque c'est possible, la combinaison de plusieurs ouvrages sur le sujet
enrichi l'apprentissage. À part des ouvrages cités, je
suis sûr qu'il y en a beaucoup d'autres!. Il s'agit de bouquiner un peu
pour trouver la perle rare qui convient à son niveau de
connaissance.


Salutations!





"fred" a écrit dans le message de news:
433a7033$0$18081$
OK je viens de retester...la macro est correcte effectivement...En fait la
valeur de la ColB doit être strictement égale à la valeur de la ColC...là
était le problème...car il y avait des espaces en fin de cellules!
J'ai dû rajouter ceci avant de commencer la boucle
For Each Cellule In ActiveSheet.UsedRange
Cellule.Value = RTrim(Cellule.Value)
Next

Y'a t-il un bon livre pédagogique pour mettre en place des macros de ce
style et en général (qui explique pas à pas détaillé...) car j'aimerais
avancé???
Merci beaucoup pour ton aide!


"michdenis" a écrit dans le message de news:

Bonjour Fred,

Avec la macro proposée, tu dois adapter le nom de la feuille où sont tes
données :
Dans mon exemple, cette feuille est : "Feuil1"

Est-ce que tes données sont en colonne B et C ?

Est-ce qu'il y a des lignes où la valeur de la colonne b = la valeur de
la
colonne c ?

Cette procédure devrait fonctionner correctement !

'---------------------------------------
Sub Test()

Dim ColB As Range, ColC As Range
Dim A As Long, DerLig As Long

Application.ScreenUpdating = False

With Worksheets("Feuil1") ' Nom Feuille à déterminer
DerLig = .Range("B:C").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set ColB = .Range("b1:b" & DerLig)
Set ColC = .Range("C1.C" & DerLig)
End With

For A = 1 To DerLig
If ColB(A) = ColC(A) Then
ColB(A).Cut ColB(A).Offset(1, -1)
ColC(A).ClearContents
End If
Next

Set ColB = Nothing: Set ColC = Nothing
End Sub
'---------------------------------------


Salutations!