Eliminer répitition valeur dans cellule VBA
pickwé
-
Normad Messages postés 112 Date d'inscription Statut Membre Dernière intervention -
Normad Messages postés 112 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis débutant en VBA et j'ai un problème qui m'enquiquine sérieusement parce qu'il m'empêche d'avancer dans mon travail ... Je vous serais très reconnaissant si vous pouviez me venir en aide ...
Voilà mon problème :
J'ai deux colonnes "A" et "B" dont les infos sont liées.
Dans les cellules de "A" j'ai répétition des infos séparées par un ";" du style maison;maison;maison etc le nombre de répétition est indéterminée.
Dans la colonne "B" j'ai aussi répitions d'infos mais celles ci peuvent être différentes du style
robinet;robinet;évier;garage;garage etc le nombre de répétition est aussi indéterminée.
Ce que je souhaiterais c'est d'avoir création de lignes qui gardent les infos dans les autres colonnes ("C","D" etc) qui elles sont uniques mais cette fois avec dans "A" la valeur maison et une ligne pour chaque valeur différente dans "B". Dans cet exemple ça ferait:
Colonne A Colonne B
maison robinet
maison évier
maison garage
Je vous remercie d'avance car le problème me paraît compliqué.
A bientôt
Anthony
Je suis débutant en VBA et j'ai un problème qui m'enquiquine sérieusement parce qu'il m'empêche d'avancer dans mon travail ... Je vous serais très reconnaissant si vous pouviez me venir en aide ...
Voilà mon problème :
J'ai deux colonnes "A" et "B" dont les infos sont liées.
Dans les cellules de "A" j'ai répétition des infos séparées par un ";" du style maison;maison;maison etc le nombre de répétition est indéterminée.
Dans la colonne "B" j'ai aussi répitions d'infos mais celles ci peuvent être différentes du style
robinet;robinet;évier;garage;garage etc le nombre de répétition est aussi indéterminée.
Ce que je souhaiterais c'est d'avoir création de lignes qui gardent les infos dans les autres colonnes ("C","D" etc) qui elles sont uniques mais cette fois avec dans "A" la valeur maison et une ligne pour chaque valeur différente dans "B". Dans cet exemple ça ferait:
Colonne A Colonne B
maison robinet
maison évier
maison garage
Je vous remercie d'avance car le problème me paraît compliqué.
A bientôt
Anthony
A voir également:
- Eliminer répitition valeur dans cellule VBA
- Excel compter cellule couleur sans vba - Guide
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne dans une cellule excel - Guide
- Proteger cellule excel - Guide
- Excel si cellule contient partie texte ✓ - Forum Excel
1 réponse
Oui, ce n'est pas super-simple (plus de 2 heures...)
Avec les données dans les colonnes A et B de Feuil1 :
Avec les données dans les colonnes A et B de Feuil1 :
Sub Traitement() Dim TableauB() As String, ValeurA As String, I As Integer, Y As Integer, Z As Integer, Ligne As Long Ligne = 1 For I = 1 To Sheets("Feuil1").Range("A1").End(xlDown).Row ValeurA = TableauValeurs(Sheets("Feuil1").Range("A" & I).Value, True) TableauB = TableauValeurs(Sheets("Feuil1").Range("B" & I).Value) Z = 1 For Y = Ligne To UBound(TableauB) + Ligne - 1 Sheets("Feuil1").Range("C" & Y).Value = ValeurA Sheets("Feuil1").Range("D" & Y).Value = TableauB(Z) Z = Z + 1 Next Y Ligne = Y Next I End Sub Function TableauValeurs(strTest As String, Optional A As Boolean) Dim Y As Integer, I As Integer, Decomp() As String, Test As String Test = strTest Y = InStr(1, Test, ";") While Y > 0 I = I + 1 ReDim Preserve Decomp(I) Decomp(I) = Left(Test, Y - 1) If A Then GoTo Val1 Test = Mid(Test, Y + 1) Y = InStr(1, Test, ";") Wend I = I + 1 ReDim Preserve Decomp(I) Decomp(I) = Mid(Test, Y + 1) TableauValeurs = SupprDoublons(Decomp) Exit Function Val1: TableauValeurs = Decomp(1) End Function Function SupprDoublons(Tableau) Dim I As Integer, Y As Integer, NewTab() As String, Cpte As Integer, Ajoute As Boolean If Not IsArray(Tableau) Then SupprDoublons = Tableau Exit Function End If For I = 1 To UBound(Tableau) For Y = 1 To IIf(TailleTab(NewTab) = 0, 1, Cpte) If TailleTab(NewTab) = 0 Then Ajoute = True Else If Tableau(I) <> NewTab(Y) Then Ajoute = True Else Ajoute = False End If End If Next Y If Ajoute Then Cpte = Cpte + 1 ReDim Preserve NewTab(Cpte) NewTab(Cpte) = Tableau(I) End If Next I SupprDoublons = NewTab End Function Private Function TailleTab(Tableau() As String) As Integer On Error GoTo vide TailleTab = UBound(Tableau) Exit Function vide: TailleTab = 0 End Function