VBA - Adresse d'une cellule / Concatener / suppression doublons
JulieD44?
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous !
Je rencontre quelques difficultés à coder l'action suivante : j'aimerais, pour chaque doublon trouvé en colonne B concaténer les valeurs de la colonne C pour pouvoir ensuite supprimer la ligne du doublon qui est devenue inutile à mon travail.
Pour réussir à expliquer simplement mon problème, je vais vous donner un exemple.
à partir de cette base de données :
Colonne A Colonne B Colonne C
1 a
2 b
3 c
4 d
5 e
5 f
6 g
J'aimerais obtenir ça :
Colonne A Colonne B Colonne C
1 a
2 b
3 c
4 d
5 e, f
6 g
Voici le code que j'ai fait :
Sub supprimeDoublons()
Range("B2").Select
'Sélectionne la cellule indiquée
ActiveCell.CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlYes
'Trie le tableau sur cette celule
donnee1 = ActiveCell
'mémorise le contenu de la cellule en cours et l'affecte à donnee1
ActiveCell.Offset(1, 0).Select
'descend d 'une ligne
While ActiveCell <> ""
'tant que la cellule n'est pas vide
If ActiveCell = donnee1 Then
'vérifie si le contenu de la cellule en cours est égal à donnee1
Dim a, b As String
Cel1 = Range("B2:B10").Find(ActiveCell, lookat:=xlWhole)
Cel2 = Range("B2:B10").Find(donnee1, lookat:=xlWhole)
' Trouver l'adresse de donnee1 et activecell.
b = Cells(Cel1.Row, 3).Value
a = Cells(Cel2.Row, 3).Value
' pb : objet requis pour b et a. Cell.Row non reconnu par le programme pour définir la ligne
'deux solutions possibles
c = a & Chr(10) & b
MsgBox c
'valable uniquement si a et b ne sont pas des chiffres
Cells(Cel1.Row, 3).Value = c
ActiveCell.EntireRow.Delete
'supprime la ligne entière
ActiveCell.Offset(-1, 0).Select
'remonte d 'une ligne
donnee1 = ActiveCell
'mémorise à nouveau le contenu de la cellule
ActiveCell.Offset(1, 0).Select
'descend d 'une ligne
Else
donnee1 = ActiveCell
' mémorise le contenu de la cellule en cours de la ligne suivante et l'affecte à donnee1
ActiveCell.Offset(1, 0).Select
'descend d 'une ligne
End If
' fin de la vérification
Wend
'fin de la boucle (on répète les instructions sur fond rose tant que la cellule en cours d'examen contient quelque chose). Sinon, le programme s'arrête
End Sub
Le problème réside ici :
b = Cells(Cel1.Row, 3).Value
a = Cells(Cel2.Row, 3).Value
' pb : objet requis pour b et a. Cell.Row non reconnu par le programme pour définir la ligne
La référence à la cellule Cell1.Row ou Cel2.Row n'est pas reconnue par VBA.
Auriez-vous une solution miracle à mon problème ??
Je rencontre quelques difficultés à coder l'action suivante : j'aimerais, pour chaque doublon trouvé en colonne B concaténer les valeurs de la colonne C pour pouvoir ensuite supprimer la ligne du doublon qui est devenue inutile à mon travail.
Pour réussir à expliquer simplement mon problème, je vais vous donner un exemple.
à partir de cette base de données :
Colonne A Colonne B Colonne C
1 a
2 b
3 c
4 d
5 e
5 f
6 g
J'aimerais obtenir ça :
Colonne A Colonne B Colonne C
1 a
2 b
3 c
4 d
5 e, f
6 g
Voici le code que j'ai fait :
Sub supprimeDoublons()
Range("B2").Select
'Sélectionne la cellule indiquée
ActiveCell.CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlYes
'Trie le tableau sur cette celule
donnee1 = ActiveCell
'mémorise le contenu de la cellule en cours et l'affecte à donnee1
ActiveCell.Offset(1, 0).Select
'descend d 'une ligne
While ActiveCell <> ""
'tant que la cellule n'est pas vide
If ActiveCell = donnee1 Then
'vérifie si le contenu de la cellule en cours est égal à donnee1
Dim a, b As String
Cel1 = Range("B2:B10").Find(ActiveCell, lookat:=xlWhole)
Cel2 = Range("B2:B10").Find(donnee1, lookat:=xlWhole)
' Trouver l'adresse de donnee1 et activecell.
b = Cells(Cel1.Row, 3).Value
a = Cells(Cel2.Row, 3).Value
' pb : objet requis pour b et a. Cell.Row non reconnu par le programme pour définir la ligne
'deux solutions possibles
c = a & Chr(10) & b
MsgBox c
'valable uniquement si a et b ne sont pas des chiffres
Cells(Cel1.Row, 3).Value = c
ActiveCell.EntireRow.Delete
'supprime la ligne entière
ActiveCell.Offset(-1, 0).Select
'remonte d 'une ligne
donnee1 = ActiveCell
'mémorise à nouveau le contenu de la cellule
ActiveCell.Offset(1, 0).Select
'descend d 'une ligne
Else
donnee1 = ActiveCell
' mémorise le contenu de la cellule en cours de la ligne suivante et l'affecte à donnee1
ActiveCell.Offset(1, 0).Select
'descend d 'une ligne
End If
' fin de la vérification
Wend
'fin de la boucle (on répète les instructions sur fond rose tant que la cellule en cours d'examen contient quelque chose). Sinon, le programme s'arrête
End Sub
Le problème réside ici :
b = Cells(Cel1.Row, 3).Value
a = Cells(Cel2.Row, 3).Value
' pb : objet requis pour b et a. Cell.Row non reconnu par le programme pour définir la ligne
La référence à la cellule Cell1.Row ou Cel2.Row n'est pas reconnue par VBA.
Auriez-vous une solution miracle à mon problème ??
A voir également:
- VBA - Adresse d'une cellule / Concatener / suppression doublons
- Darkino nouvelle adresse - Guide
- Forcer suppression fichier - Guide
- Adresse mac - Guide
- Créer une adresse hotmail - Guide
- Comment saisir une adresse url - Guide