Macro copier/coller ligne si plusieurs conditions

Résolu/Fermé
agathe182 Messages postés 49 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 26 septembre 2016 - 31 août 2016 à 10:53
agathe182 Messages postés 49 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 26 septembre 2016 - 2 sept. 2016 à 09:53
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

ccm81 Messages postés 10503 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 25 novembre 2022 2 329
31 août 2016 à 11:02
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
0
agathe182 Messages postés 49 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 26 septembre 2016
31 août 2016 à 11:29
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
0
ccm81 Messages postés 10503 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 25 novembre 2022 2 329
Modifié par ccm81 le 31/08/2016 à 14:16
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
0
agathe182 Messages postés 49 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 26 septembre 2016
31 août 2016 à 16:39
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..
0
ccm81 Messages postés 10503 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 25 novembre 2022 2 329
31 août 2016 à 16:53
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
0
agathe182 Messages postés 49 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 26 septembre 2016
31 août 2016 à 17:12
C'est génial ça marche.

OMG je m'attendais pas à ce que tu m'écrives carrément le code, merci beaucoup.
0
agathe182 Messages postés 49 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 26 septembre 2016
31 août 2016 à 17:15
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 ?
0
agathe182 Messages postés 49 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 26 septembre 2016
31 août 2016 à 17:23
Je n'ai rien dit, cela fonctionne très bien sur mon fichier.
Je te remercie énormément, tu m'as beaucoup aidée !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10503 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 25 novembre 2022 2 329
31 août 2016 à 17:35
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
0
agathe182 Messages postés 49 Date d'inscription mercredi 24 août 2016 Statut Membre Dernière intervention 26 septembre 2016
2 sept. 2016 à 09:53
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 :)
0