Code VBA

Bonjour, j espère avoir de l'aide de votre part.

j ai besoin de faire un code sur vba qui permettra de modifier les doublons dans deux colonnes, pour 5 feuilles excel.

j ai

identificateur identificateur segment Identificateur de section

1 1 1

1 1 1

a ce moment la pour le meme identificateur je ne dois pas avoir les memes identificateur de segment et de section, j ai besoin de les modifier en

1 1a 1a

1 1b 1b

Merci d'avance

Bonjour Ceylouna, bonjour le forum,

Je te conseille de nous fournir un fichier exemple avec dans un onglet ce que tu as avant et dans un autre ce que tu voudrais après passage de la macro. Car là, c'est vraiment très très flou...

Bonjour , merci beaucoup de m'avoir répondu,

donc je vous envoie ci dessous, le tableau que j'ai, et celui que je dois avoir, c a d sans doublons (modification et non suppression)

Un exemple d'un tableau que j ai actuellement

Identificateur Identificateur du segment Identificateur de section

1 S-001 S-001

1 S-01 S

2 S-002 S-002

5 S-005 S-005

6 S-006 S-006

7 S-007 S-007

8 S-008 S-008

9 S-009 S-009

11 S-011 S-011

13 S-013 S-013

1 S-001 S-001

2 S-002 S-002

5 S-005 S-005

Identificateur Identificateur du segment Identificateur de section

1 S-001-1 S-001-1

1 S-01 S

2 S-002-1 S-002-1

5 S-005-1 S-005-1

6 S-006 S-006

7 S-007 S-007

8 S-008 S-008

9 S-009 S-009

11 S-011 S-011

13 S-013 S-013

1 S-001-2 S-001-1

2 S-002-2 S-002-2

5 S-005-2 S-005-2

tableau avec trois colonnes, dont les doublons peuvent être dans la 2 eme ou la 3 eme, je dois les modifier en fonction de la 1 ère colonne, genre si l'Identificateur se répète avec un même Identificateur de segment je dois modifier l'identificateur de segment qui se répètent.

Merci beaucoup encore une fois

oups ! comment faire svp pour joindre un fichier excel dans le message !

merci !

Bonjour les amis;

je pense que je n ai pas bien expliqué mon prblm; alors je vais me réexpliquer

j ai trois colonnes A B et C

les valeurs des colonnes B et C sont considerees comme doublons sauf si les valeurs de la colonne A sont des doublons; c a d

Consultez le fichier en piece jointe

Je vous remercie d avance

4doublons.xlsx (11.09 Ko)

Dans le fichier excel; les deux exemples que j ai donné sont valable pour toutes les données de la colonne A; j ai fais une boucle qui permet de verifier les données de la colonne A puis ensuite modifier les doublons des colonnes B et C; mais ca prend beaucoup de temps ce qui n est pas rentable au travail;car j ai beaucoup de fichier à traiter de meme; si vous avez une autre idée à me proposer; je vous serez reconnaissante

Merci beaucoup.

Re,

Désolé mais c'est toujours pas clair. Dans ton premier post tu parles d'ajouter a, b, c, etc.. Et dans le dernier -1, -2, etc.. Comme je t'avais proposé, envoie un fichier avec : dans un onglet (Feuil1)ce que tu as AVANT et dans un autre onglet (Feuil2) ce que veux APRÈS le passage de la macro. Au moins on n'aura plus de doute...

Bonjour, d accord en pièce jointe un fichier, à savoir dans feuil 1 ce que j ai et dans feuil2 ce que je souhaite avoir avec le code de modification de doublons. C est vraiment de modifier les doublons en ajoutant -1 au premier rencontré et -2 au deuxième ...

Merci beaucoup

6doublons.xlsx (10.46 Ko)

Bonsoir Ceylouna, bonsoir le forum,

Ho P... ! La galère... Déjà qu'il ne me reste plus trop de cheveux...

Après moulte échecs je crois être parvenu a un résultat. En tous cas il fonctionne sur l'exemple.

Le code :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim C1 As Integer 'déclare la variable C1 (Compteur 1)
Dim C2 As Integer 'déclare la variable C2 (Compteur 2)

Set O = Worksheets("Sheet1") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    C1 = 0: C2 = 0 'réinitialise les compteurs C1 et C1
    If O.Cells(I, 1).Interior.ColorIndex = 3 Then GoTo suite1 'si la cellule en colonne A de la boucle 1 est rouge, va à l'étiquette "suite1"
    For J = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs TV (en partant de la seconde)
        If O.Cells(J, 1).Interior.ColorIndex = 3 Then GoTo suite1 'si la cellule en colonne A de la boucle 2 est rouge, va à l'étiquette "suite1"
        If I <> J Then 'condition 1 : si I est différent de J
            'condition 2 : si les données colonnes A et B de la boucle 1 sont identiques aux donnée des colonnes A et B de la boucle 2
            If TV(I, 1) & "/" & TV(I, 2) = TV(J, 1) & "/" & TV(J, 2) Then

                'si le cellule ligne I colonne A de la boucle 1 n'est pas rouge, incrémente les compteurs,
                'un tiret plus le compteur C1 s'ajoute à la cellule en colonne B, la cellule en colonne A  de la boucle 1 se colore de rouge
                If Not O.Cells(I, 1).Interior.ColorIndex = 3 Then C1 = C1 + 1: C2 = C2 + 1: O.Cells(I, 2).Value = O.Cells(I, 2).Value & "-" & C1:  O.Cells(I, 1).Interior.ColorIndex = 3

                'si les données en colonne C des deux boucles sont identique, un tiret plus le compteur C2 s'ajoute à la cellule en colonne C
                If TV(I, 3) = TV(J, 3) Then O.Cells(I, 3).Value = O.Cells(I, 3).Value & "-" & C2

                'incrémente les compteurs, un tiret plus le compteur C1 s'ajoute à la cellule en colonne B de la boucle 2
                'la cellule en colonne A  de la boucle 2 se colore de rouge
                C1 = C1 + 1: C2 = C2 + 1: O.Cells(J, 2).Value = O.Cells(J, 2).Value & "-" & C1: O.Cells(J, 1).Interior.ColorIndex = 3

                'si les données en colonne C des deux boucles sont identique, un tiret plus le compteur C2 s'ajoute à la cellule en colonne C
                If TV(J, 3) = TV(I, 3) Then O.Cells(J, 3).Value = O.Cells(J, 3).Value & "-" & C2

            End If 'fin de la condition 2
        End If 'fin de la condition 1
suite1: 'etiquette
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
O.Range("A2:A" & DL).Interior.ColorIndex = xlNone 'supprime la couleur rouge dans la colonne A
End Sub

ThauThème,

Merci infiniment ça marche !

Mais vraiment je te remercie enooooormement , je suis vraiment tres contente, merci beaucoup pour ton aide, passez une très belle soirée !

Merci !

Erreur... Quelques petites choses à vérifier...

Bonjour

mmm ça marche très bien pour mon code; reste juste à l'adapter pour plusieurs feuils excel

Salut Celyouna,

Salut ThauThème,

pour fonctionner sur plusieurs feuilles sans recopier 20 fois le code, il faut placer le-dit code dans le module VBA de 'ThisWorkbook' !

Du style... où un simple double-clic démarre la macro.

Cette version trie les données sur [A-B-C] : je ne sais pas si cela convient...

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
'
Dim iRow1%, iRow2%, iIdx1%, iIdx2%
'
Cancel = True
Application.ScreenUpdating = False
'
With Sh
    .Range("A1:C" & .Range("A" & Rows.Count).End(xlUp).Row).Sort _
        key1:=.Range("A2"), order1:=xlAscending, _
        key2:=.Range("B2"), order2:=xlAscending, _
        key3:=.Range("C2"), order3:=xlAscending, _
        Orientation:=xlTopToBottom, Header:=xlYes
    '
    iRow1 = 2
    Do
        iRow2 = .Range("A:A").Find(what:=CStr(.Range("A" & iRow1).Value), LookAt:=xlWhole, LookIn:=xlValues, searchdirection:=xlPrevious).Row
        If iRow2 > iRow1 Then
            iIdx1 = 0: iIdx2 = 0
            For x = iRow1 To iRow2
                iIdx1 = IIf(.Range("B" & x).Value = Split(.Range("B" & x + IIf(x = iRow1 Or (iIdx1 = 0 And x + 1 <= iRow2), 1, -1)).Value, "-")(0), iIdx1 + 1, 0)
                If iIdx1 = 0 Then iIdx1 = IIf(.Range("B" & x).Value = Split(.Range("B" & x + IIf(x = iRow1 Or (iIdx1 = 0 And x + 1 <= iRow2), 1, -1)).Value, "-")(0), iIdx1 + 1, 0)
                If iIdx1 > 0 Then
                    iIdx2 = IIf(.Range("C" & x).Value = Split(.Range("C" & x + IIf(x = iRow1 Or (iIdx2 = 0 And x + 1 <= iRow2), 1, -1)).Value, "!")(0), iIdx2 + 1, 0)
                    If .Range("B" & x).Value <> Split(.Range("B" & x - 1).Value, "-")(0) And x - 1 >= iRow1 Then iIdx2 = 0
                    .Range("B" & x).Value = .Range("B" & x).Value & "-" & CStr(iIdx1)
                    If iIdx2 > 0 Then .Range("C" & x).Value = .Range("C" & x).Value & "!" & CStr(iIdx2)
                End If
            Next
        End If
        iRow1 = iRow2 + 1
    Loop While iRow1 <= .Range("A" & Rows.Count).End(xlUp).Row
    '
    .Range("C2:C" & .Range("A" & Rows.Count).End(xlUp).Row).Replace "!", "-", LookAt:=xlPart
End With
'
Application.ScreenUpdating = True
'
End Sub

A+

Bonjour Curulis57

Merci beaucoup pour ton code, mais je n'arrive pas à l'exécuter.

Salut Celyouna,

le code est placé dans 'ThisWorkbook.

SI et SEULEMENT SI les feuilles devant être traitées respectent la même structure entre elles que la structure de la feuille-exemple que tu nous a donnée, alors, un simple double-clic suffit sur chacune de ces feuilles pour exécuter la macro... une fois par feuille !! Pas de précautions particulières installées pour éviter un double traitement !!

Comme dit précédemment, je trie tes données et ne les remets pas dans l'ordre initial (petit souci non réglé).

Si c'est gênant (et même si d'autres motivations honorables), le code de ThauThème sera plus adapté à ta recherche.

A+

3celyouna.xlsm (24.05 Ko)

Salut Curulis57

C est parfait ca marche trop bien.

Je vous remercie infiniment pour votre aide; bonne continuation; je vais lire les cours qui sont sur cette page pour m améliorer; mais dans le cadre de mon travail; ça se peut que je vous reviens pour un autre prblm

Merci beaucoup encore une fois et bonne continuation !

Bonjour Thau theme, bonjour tout le monde,

Thau theme, j aimerai qu'on revoit le code que vous m'avez fais sur la modification de doublons, je vous mis le fichier excel en piece jointe, car le code je le comprend bien et ca marche pour la colle B et C sauf que lorsqu'on a plusieurs doublons dans la colonne C, le code fais pas vraiment ce qu'on veut et je ne comprend pas vraiment prkoi. Y a un probleme dans le compteur C2 que je n'arrive pas a détecter,

Merci beaucoup

Rechercher des sujets similaires à "code vba"