Macro copier/coller ligne si plusieurs conditions (actualisation onglet à onglet

Fermé
InitialesVBA Messages postés 2 Date d'inscription mercredi 18 août 2021 Statut Membre Dernière intervention 19 août 2021 - Modifié le 18 août 2021 à 11:53
InitialesVBA Messages postés 2 Date d'inscription mercredi 18 août 2021 Statut Membre Dernière intervention 19 août 2021 - 19 août 2021 à 12:00
Bonjour,

Ce forum m'a souvent aidé au travail (merci!), mais pour une fois je n'arrive pas à trouver la réponse à mon problème actuel, donc c'est mon premier post ici!

Je me trouve devant le même souci que la personne de ce forum:
https://forums.commentcamarche.net/forum/affich-33865373-macro-copier-coller-ligne-si-plusieurs-conditions#answers

=> Seulement la solution de ce forum n'est plus disponible d'accès sur www.cjoint.com (car datant de 2016)

Pour résumé, j'ai un fichier excel avec deux onglets de formats et d'informations similaires :
(1) "Base de données" & (2) "MaJ"

(1) BdD contient toutes les informations
(2) MaJ est un onglet où j'entre les données/informations actualisées de lignes existantes ou nouvelles avant de les transférer dans l'onglet (1) BdD

Seulement, le document est assez conséquent et je recherche un code vba qui me permette d'actualiser le tout automatiquement.

Certaines cellules sont fixes (nom, prénom: Colonnes "L" & "M") et j'aimerais pouvoir copier/collez en valeur la ligne de "MaJ" qui lui corresponds dans "BdD" en fonction des cellules fixes. Aussi, s'il n'y a pas de correspondances, je souhaiterai que le code ajoute la nouvelle ligne en bas de tableau de "BdD"


C'est assez bien résumé dans le forum cité en haut:

"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. "

Voici le code que l'utilisatrice proposait, mais qui ne fonctionne pas dans mon classeur:


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




Si vous pouvez m'aider sur ce sujet je vous remercie d'avance :)
A voir également:

1 réponse

InitialesVBA Messages postés 2 Date d'inscription mercredi 18 août 2021 Statut Membre Dernière intervention 19 août 2021
Modifié le 19 août 2021 à 12:09
Bonjour,

Après avoir continué à chercher et à force d'essais, je laisse ici le code pour ceux qui se retrouveront dans la même situation :


Sub CCM()

' Test 1 est le classeur variable
' Test 2 est le classeur fixe

For j = 1 To 12 ' "j" corresponds aux lignes du classeur variable
For i = 1 To 12 ' "i" corresponds aux lignes du classeur fixe

If Trim(Worksheets("TEST1").Cells(j, 1).Value) = vbNullString Then Exit For 'si la cellule intérrogée est vide, on passe à la suivante
If Worksheets("TEST1").Cells(j, 1).Value = Worksheets("TEST2").Cells(i, 1).Value Then 'cherche la correspondance entre les deux cellules similaires dans les deux classeurs
Worksheets("TEST2").Cells(i, 2).Value = Worksheets("TEST1").Cells(j, 2).Value 'copie la valeur du classeur variable dans le classeur fixe pour les colonnes "B"variable à "B"fixe
Worksheets("TEST2").Cells(i, 3).Value = Worksheets("TEST1").Cells(j, 3).Value
Worksheets("TEST2").Cells(i, 4).Value = Worksheets("TEST1").Cells(j, 4).Value ' idem pour les colonnes "D" et "D"


End If

Next

Next


End Sub
0