Copier colonnes sous condition

Bonjour la communauté,

Je souhaiterais copier des colonnes d'un onglet vers un autre mais en filtrant le contenu en fonction du numéro de pièce. Les deux onglets contiennent des milliers de numéros de pièce mais pas ligne pour ligne la même donc je ne peux pas simplement copier-coller.

L'idéal serait de dire, si les numéros de pièces sont égaux alors copier coller le contenu d'un onglet vers l'autre.

Je vous ai mis un fichier exemple en PJ pour comprendre plus facilement le propos. Je cherche à faire une macro pour ne pas rechercher un par un la ligne qui correspond à l'autre...

En tout cas merci d'avance pour l'attention portée au sujet et j'espère que quelqu'un pourra proposer une solution simple pour faire cette opération.

Bonne journée à vous

Bonjour Leviath7,

je te retourne ton fichier modifié :

* tu peux voir que ta 2ème feuille est inchangée

* va sur la 1ère feuille ; Ctrl e ➯ travail effectué !

Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour Dhany,

Merci beaucoup pour ta réponse.

Je suis sûr que le code est bon mais pour l'appliquer à mon fichier réel, je dois appeler des onglets (j'ai compris comment l'éditer) et des colonnes différentes. Est-ce que tu saurais me dire, quelle partie du code fait appel à la colonne numéro pièce, quelle partie fait appel aux colonnes à copier ?

Je cherche quand même de mon côté, j'espère comprendre ton code :p

J'ai lancé la moulinette avec ça (mais ça a planté, sans doute parce que j'ai plus de 20000 lignes à itérer) :

Charger données de DCO de la colonne 3 vers l'onglet généralités colonne 28 c'est ça ?

Sub CpyData()

If ActiveSheet.Name <> "Generalites" Then Exit Sub

Dim ws As Worksheet, dl1&, dl2&, lg1&, lg2&

Set ws = Worksheets("DCO")

Application.ScreenUpdating = 0

dl2 = Cells(Rows.Count, 1).End(xlUp).Row

dl1 = ws.Cells(Rows.Count, 1).End(xlUp).Row

For lg1 = 2 To dl1

With ws.Cells(lg1, 1)

For lg2 = 2 To dl2

If Cells(lg2, 1) = .Value Then

Cells(lg2, 3) = .Offset(, 28)

Exit For

End If

Next lg2

End With

Next lg1

End Sub

Merci pour ton retour,

Bonne journée et week end

Bonjour Leviath7,

voici la nouvelle version (selon tes nouvelles infos) :

* sur la 2ème feuille, regarde la nouvelle disposition

* sur la 1ère feuille : idem ; puis fais Ctrl e

Alt F11 pour voir les modifs du code VBA

si besoin, autre adaptation possible

alors, ton avis ?

dhany h-animaux10

Dhany,

Je viens de tester, le code tourne, il travaille mais à un moment il plante. Je pense qu'il y a un trop grand nombre de ligne à traiter et du coup il sait pas gérer. Si un numéro de l'un n'est pas dans l'autre, est-ce que le code s'arrête ?

Je peux t'envoyer en privé une partie du document au besoin.

Désolé, j'ai l'impression d'avoir oublié un paramètre dans la demande

Bien cordialement

Tu a écrit :

à un moment il plante. Je pense qu'il y a un trop grand nombre de ligne à traiter

la déclaration de variables est celle-ci : Dim ws As Worksheet, dl1&, dl2&, lg1&, lg2&

à part ws qui est pour une feuille de calcul, les 4 autres variables sont de type Long, car idem que :

Dim ws As Worksheet, dl1 As Long, dl2 As Long, lg1 As Long, lg2 As Long

plage des nombres d'un entier Long : -2 147 483 648 à +2 147 483 647

donc 20 000 lignes passent sans aucun problème !

ça plante à cause d'autre chose, mais quoi ?


quand ça plante, tu as quel message d'erreur ? et dans le code VBA, quelle ligne est mise en jaune ?

peut-être que tes réponses m'aideront à régler ce problème sans que tu doives joindre ton fichier ?

dhany

@Leviath7

si ton fichier est confidentiel et que tu penses que c'est nécessaire de me l'envoyer en MP, tu peux le faire.

dhany

Rechercher des sujets similaires à "copier colonnes condition"