Bonjour à tous,
Je me retrouve confronter un petit problème et j'espère que vous pourrez m'aider .
Contexte:
Sur une même feuille j'ai deux tableaux:
- Tableau 1 (colonnes allant de 1 à 11). La première colonne se remplie automatiquement à partir d'une autre feuille (appelée dans ma macro : WsS)
- Tableau 2 (colonnes allant de 13 à 15)
But de la macro:
Je souhaiterais que lorsque je lance la macro pour actualiser la liste de la première colonne du tableau 1 (cette liste peut varier en nb de lignes et contenu) :
- pour chaque ligne, vérifier si la valeur est déjà présente dans le tableau 2
- Dans le cas où la valeur n'existerait pas encore dans le tableau 2, je voudrais coller les valeurs des colonnes 1, 10 et 11 du tableau 1 en fin du tableau 2
(en gros mettre à jour le tableau 2 avec les éléments manquants par rapport au tableau 2.
J'ai tenté des trucs mais je n'y suis pas du tout. Je vous mets tout de même les lignes de codes que j'ai jusqu'à présent mais je suis preneur de toute proposition (c'est la partie rouge surtout qui pose problème je pense)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| Dim WsS As Worksheet, WsC As Worksheet
Dim DerLig As Long, R As Long, newLig As Long, R2 As Long, Derlig2 As Long, newLig2 As Long
Dim a As Integer
newLig = 2
Application.ScreenUpdating = False
Call effacer
Set WsS = Sheets("DATA USERS") 'Feuille source
Set WsC = Sheets("Siglum") 'Feuille cible
DerLig = WsS.Cells(WsS.Columns(1).Cells.Count, 1).End(xlUp).Row 'Dernière ligne utilisée
Derlig2 = Range("M" & Rows.Count).End(xlUp).Row
newLig2 = Derlig2
WsC.Columns(1).ClearContents 'Vide le contenu de la colonne 1 e la page 2 (évite de garder les noms d'une précédente action)
For R = 2 To DerLig 'Boucle sur toutes les lignes de la Page 1
If UCase(WsS.Cells(R, 7)) = "YES" Then 'Vérifie si le nom est tagé YES (Ucase met en majuscule)
newLig = newLig + 1 'Permet l'incrémentation de la cible
WsC.Cells(newLig, 1) = WsS.Cells(R, 1) 'Affecte le nom sur une nouvelle ligne de la page cible
End If
For R2 = 2 To Derlig2 'Vérifie si l'utilisateur n'est pas dans l'historique pour le rajouter en fin de liste
While WsC.Cells(newLig, 1) <> WsC.Cells(R2, 13)
a = a + 1
Next R2
If a > Derlig2 Then
WsC.Cells(newLig2, 13) = WsC.Cells(R, 1)
End If
Next R |
Merci par avance de l'aide que vous pourrez m'apporter sur le sujet.
Partager