Macro copier/coller ligne si plusieurs conditions [Résolu/Fermé]

Signaler
Messages postés
49
Date d'inscription
mercredi 24 août 2016
Statut
Membre
Dernière intervention
26 septembre 2016
-
Messages postés
49
Date d'inscription
mercredi 24 août 2016
Statut
Membre
Dernière intervention
26 septembre 2016
-
Bonjour,

Dans un souci d'automatisation, je cherche à mettre à jour les données d'une feuille excel par rapport aux données que j'exporte d'une base de données.

Je cherche à mettre à jour ma ligne i dans ma feuille "Master Data" si ma ligne se trouve dans ma feuille "LAT - Update" en validant trois conditions :
- La cellule de la colonne H de Master Data a la même valeur que la cellule de ma colonne H de "LAT - Update"
- La cellule de la colonne O de Master Data a la même valeur que la cellule de ma colonne O de "Lat - Update"
- La cellule de la colonne Q de Master Data a la même valeur que la cellule de ma colonne Q de "Lat - Update"

Sinon, si la ligne qui se trouve dans "LAT - Update" n'est pas dans "Master Data", qu'elle soit rajoutée à la fin de mon tableau.

Pour l'instant j'ai réussi écrire le code suivant, mais il ne fonctionne pas parce qu'il me cherche une correspondance qu'entre les lignes i mais ne fait pas de recherche dans ma feuille "Update" et ne copie pas la ligne recherchée mais juste la ligne i :

 Private Sub Update_Click()
'Procedure permettant de déplacer les programmes terminés
'Déclaration des variables

Dim i As Integer
Dim DerniereLigne As Integer
Dim ligne As Integer

Application.ScreenUpdating = False
Sheets("Master Data").Select
DerniereLigne = Range("E100000").End(xlUp).Row
For i = 3 To DerniereLigne
ligne = Range(Ei, Yi)

If Sheets("Master Data").Cells(i, 8).Value = sheets("LAT - Update").Cells(i,8).value and ("Master Data").Cells(i, 15).Value = sheets("LAT - Update").Cells(i,15).value and ("Master Data").Cells(i, 17).Value = sheets("LAT - Update").Cells(i,17).value Then
Sheets("LAT - Update").ligne.Copy
Sheets("Master Data").Activate
Sheets("Master Data").ligne.Select
Sheets("Post Launch").Paste

Else: Sheets("LAT - Update").Activate
Sheets("LAT - Update").ligne.Copy
Sheets("Master Data").Cells(Rows.Count, "E").End(xlUp)(2).Select
Sheets("Master Data").Paste

End If
Next i

Application.CutCopyMode = False

Application.ScreenUpdating = True
MsgBox "Le remplacement est terminé", vbOKOnly + vbInformation, "FYI"
End Sub


Y aurait-il une âme charitable capable de m'aider ?

Cordialement,

5 réponses

Messages postés
9579
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2020
1 926
Bonjour

Peux tu envoyer un bout de ton fichier, sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu

1) Tu vas dans https://www.cjoint.com/
2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
en bleu souligné ; tu le sélectionnes et tu fais "Copier"
5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse
tu fais "Coller".

Cdlmnt
Messages postés
49
Date d'inscription
mercredi 24 août 2016
Statut
Membre
Dernière intervention
26 septembre 2016

Bonjour ccm81

Voici un bout de mon fichier http://www.cjoint.com/c/FHFjA2hRmdM

Je souhaite pouvoir copier les lignes de ma feuille "Update" où les trois conditions sont remplies et les coller à la place des lignes déjà existantes dans ma feuille "Master Data" et les lignes ne sont pas dans master data, les ajouter à la suite.

Cdlt,

Agathe
Messages postés
9579
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2020
1 926
Ce que j'ai compris
Les lignes dans les deux feuilles sont considérées identiques dès que les 3 conditions (colonne H, O, Q) sont réalisées
Et
Si oui, on écrase la ligne dans Master Data avec celle de Lat - Update
Si non, on ajoute la ligne Lat - Update à Master data
???

Une question
Ordre de grandeur du nombre de lignes du fichier
Messages postés
49
Date d'inscription
mercredi 24 août 2016
Statut
Membre
Dernière intervention
26 septembre 2016

Oui mais en fait le problème c'est que je veux pas comparer la ligne 3 du Master Data avec la ligne 3 de LAT Update. Je souhaite que ma ma macro trouve une correspondance de la ligne 3 de LAT update dans Master data et qui me la remplace si les 3 conditions sont réalisées, sinon qu'il me la rajoute à la suite de mon fichier master data.

Le fichier a quelques milliers de lignes, ça varie entre 2000 et 15000..
Messages postés
9579
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2020
1 926
De rien

Je souhaite que ma ma macro trouve une correspondance de la ligne 3 de LAT update dans Master data et qui
C'est ce que j'avais compris
Vois ceci
http://www.cjoint.com/c/FHFoZGWHOln
Si tu ne veux copier que les valeurs et non le format, tu dis

Cdlmnt
Messages postés
49
Date d'inscription
mercredi 24 août 2016
Statut
Membre
Dernière intervention
26 septembre 2016

C'est génial ça marche.

OMG je m'attendais pas à ce que tu m'écrives carrément le code, merci beaucoup.
Messages postés
49
Date d'inscription
mercredi 24 août 2016
Statut
Membre
Dernière intervention
26 septembre 2016

Ah mince, non...
Si je reclique sur Ctrl + K cela me rajoute encore des cellules et du coup cela crées des doublons... Est-ce que tu sais comment je peux remédier à cela ?
Messages postés
49
Date d'inscription
mercredi 24 août 2016
Statut
Membre
Dernière intervention
26 septembre 2016

Je n'ai rien dit, cela fonctionne très bien sur mon fichier.
Je te remercie énormément, tu m'as beaucoup aidée !
Messages postés
9579
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
16 octobre 2020
1 926
Essaies en ajoutant ce paramère à la méthode Find
Set obj = Sheets(FM).Columns(co1).Find(V1, , , xlWhole, , xlPrevious)

Mais, est ce que ce ne serait pas plus propre/efficace de
1. Traiter toute la feuille LAT une seule fois
2. Traiter chaque ligne ajoutée sur cette feuille (petite procedure à ajouter)
..... du moins si ça correspond à ton problème

Cdlmnt
Messages postés
49
Date d'inscription
mercredi 24 août 2016
Statut
Membre
Dernière intervention
26 septembre 2016

En fait le problème c'est que je suis en train de créer un fichier pour les personnes qui travaillent dans mon service. Le but étant qu'à la fin ils aient un fichier fonctionnel qui soit relativement automatisé.
Du coup, si par inadvertance ils cliquent deux fois, ça biaise pas mal le fichier puisque cela crée des doublons. Je vais trouver une solution pour qu'ils n'aient pas ce problème.
En tout cas je te remercie pour ton aide :)