Rechercher valeur, la copier, la supprimer et la coller autre emplacement

Bonjour,

Je suis à la recherche d'une solution et je pense qu'Excel peut apporter la solution, mais pour cela, il faut connaitre ses possibilités :)

Sujet :

J'ai une liste de code barre en colonne "B" -> cette colonne sera la finale

Une autre liste en "C" -> ces codes seront à supprimer, ils ne servent à rien dans la BDD

Une dernière en "E" -> ces codes sont bons, mais ils sont déjà dans la liste en colonne "B"

le but :

En 1 : Rechercher les codes de la colonne "E" dans la colonne "B" : Si la valeur est trouvée, on la supprime.

En 2 : Rechercher les codes de la colonne "C" dans la colonne "B" : Si la valeur est trouvée, on la remplace par la valeur en "E".

Merci.

Bonjour Noweare, bonjour le forum,

Pas très clair, pour moi en tous cas...

En 1 : Rechercher les codes de la colonne "E" dans la colonne "B" : Si la valeur est trouvée, on la supprime.

si on trouve, on la supprime colonne E ou B ?

En 2 : Rechercher les codes de la colonne "C" dans la colonne "B" : Si la valeur est trouvée, on la remplace par la valeur en "E".

Même combat ! on remplace dans quelle colonne ?

Bonjour ThauThème,

si on trouve, on la supprime où colonne E ou B ?

> En Colonne B - on aura besoin en 2, des codes de la colonne E

Même combat ! on remplace dans quelle colonne ?

> Si la valeur de C est trouvée dans B, on on la remplace par le code de E dans la colonne B.

Je dois bien avouer que ce n'est pas simple d'expliquer le sujet :)

Voici un exemple :

En 1 : J'ai mon code en E14 (3661537055191) qui est dans ma liste en B7535. Celui de cette cellule B7535, je le supprime.

En 2 : J'ai mon code en C14 (3661537221220) qui est dans ma liste en B15979. Celui ci, je le remplace par le code E14 (3661537055191)

J'ai refait le tableau avec l'exemple ci-dessus.

En espérant être assez claire

Re,

Si j'ai bien compris, ça devrait donner ça :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim CR As Byte 'déclare la variable CR (Colonne de référence)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim TS As Variant 'déclare la variable TS (Tableau Source)
Dim TR As Variant 'déclare la variable TR (Tableau de Recherche)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Long 'déclare la variable J (incrément)
Dim PL As Range 'déclare la variable PL (PLage)

Set O = Worksheets("BDD_CB") 'définit l'onglet O
Set PL = O.Range("A1") 'initialise la plage PL
CR = 5 'définit la colonne de référence (colonne E)
DL = O.Cells(Application.Rows.Count, CR).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne de référence CR
TS = O.Range(O.Cells(1, CR), O.Cells(DL, CR)) 'définit le tableau source TS (données en colonne E)
CR = 2 'définit la colonne de référence (colonne B)
DL = O.Cells(Application.Rows.Count, CR).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne de référence CR
TR = O.Range(O.Cells(1, CR), O.Cells(DL, CR)) 'définit le tableau de recherche TR (données en colonne B)
For I = 1 To UBound(TS, 1) 'boucle 1 : sur toutes les lignes I du tableau source TS
    For J = 1 To UBound(TR, 1) 'boucle 2 : sur toutes les lignes J du tableau de recherche TR
        If TR(J, 1) = TS(I, 1) Then 'condition : si la donnée en ligne J colonne 1 du tableau de recherche TR est égale à la donnée en ligne I colonne 1 du tableau source TS
            Set PL = IIf(PL.Address(0, 0) = "A1", O.Cells(J, "B"), Application.Union(PL, O.Cells(J, "B"))) 'redéfinit la plage PL
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
PL.Delete 'supprime la plage PL

CR = 3 'définit la colonne de référence (colonne C)
DL = O.Cells(Application.Rows.Count, CR).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne de référence CR
TS = O.Range(O.Cells(1, CR), O.Cells(DL, CR)) 'définit le tableau source TS (données en colonne C)
CR = 2 'définit la colonne de référence (colonne B)
DL = O.Cells(Application.Rows.Count, CR).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne de référence CR
TR = O.Range(O.Cells(2, CR), O.Cells(DL, CR)) 'définit le tableau source TS (données en colonne C)
For I = 1 To UBound(TS, 1) 'boucle 1 : sur toutes les lignes I du tableau source TS
    For J = 1 To UBound(TR, 1) 'boucle 2 : sur toutes les lignes J du tableau de recherche TR
        If TR(J, 1) = TS(I, 1) Then 'condition : si la donnée en ligne J colonne 1 du tableau de recherche TR est égale à la donnée en ligne I colonne 1 du tableau source TS
            O.Cells(J, "B").Value = O.Cells(I, "E").Value 'remplace la donnée ligne J colonne B par la donnée ligne J colonne E
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
    Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
MsgBox "Données traitées !" 'message
End Sub

Bonjour ThauThème,

En effet cela semble fonctionner. Je continue mes tests :)

Je me pose la question, sur un nombre minimum en colonne C et E. Lorsque je fais le test sur une dizaine de codes, cela fonctionne, mais lorsque je fais le test pour un ou deux, le code en colonne C ne devrait plus être présent dans la colonne B.

Est-ce possible lors de la première étape, de ne pas supprimer la ligne entière mais supprimer juste le contenu.

Laisser la cellule vide.

Merci.

Re,

Parfois je me demande pourquoi je m'e***de à commenter les codes ?!...
Remplace :

PL.Delete 'supprime la plage PL

par :

PL.ClearContents 'efface le contenu de la plage PL

Je comprends, mais savoir où remplacer c'est une chose, savoir par quoi en est une autre.

Je viens de faire un test sur une ligne de code.

capture

étape de suppression est effective mais le remplacement, ici, à droite, n'est pas bon.

Il devrait remplacer la cellule en B16415 mais il supprime et remplace le code au-dessus

J'ai remarqué que c'était les 14 codes en colonne E, qui viennent à la suite, dans un ordre aléatoire, remplaçant les codes à cet emplacement.

Bonjour,

Pas de dernière solution à apporter ?

Bonne journée.

N

Rechercher des sujets similaires à "rechercher valeur copier supprimer coller emplacement"