Bonsoir à tous,

J'ai une feuille WsRes avec des données (de 200 à 300) qui sont actualisées et donc modifiées toutes les heures ainsi deux feuilles Ws1 et Ws2.

La feuille WsRes contient un ID dans la colonne A et plusieurs cellules (de 1 a 20) contenant diverses informations par rapport à cet ID.


ID - Donnée1 - Donnée2 - Donnée3

12 - tata - toto - tutu
15 - toto - tutu - titi

la feuille Ws1 liste les hommes:

ID - Nom - Prénom - Phone - Ville
11 - Némar - Jean - 01234567 - New-York
15 - Térieur - alain - 1326523 - Las Vegas

La feuille Ws2 liste les femmes avec la même présentation

Mon code ajoute les données sur les 2 feuilles suivant l'ID et ça fonctionne plutôt pas mal.

15 - Térieur - alain - 1326523 - Las Vegas - toto - tutu - titi


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
35
36
Sub test()
 
Dim Ws1 As Worksheet
Dim Ws2 As Worksheet
Dim WsRes As Worksheet
Dim derlig As Long
 
Dim Plage1 As Range, Plage2 As Range, PlageRes As Range, Cel As Range, C As Range
 
    Set Ws1 = Worksheets(1)
    Set Ws2 = Worksheets(2)
    Set WsRes = Worksheets("Résultat")
 
    derlig = WsRes.Range("A" & WsRes.Rows.Count).End(xlUp).Row    
 
    Set Plage1 = Ws1.Range("B4:B25")
    Set Plage2 = Ws2.Range("B4:B25")
    Set PlageRes = WsRes.Range("A2:A" & derlig)
 
    For Each Cel In PlageRes
        Set C = Plage1.Find(Cel)
 
        If Not C Is Nothing Then
            WsRes.Range(Cel.Offset(0, 1), Cel.Offset(0, 20)).Copy C.Offset(0, 6)
        End If
    Next Cel
 
    For Each Cel In PlageRes
        Set C = Plage2.Find(Cel)
 
        If Not C Is Nothing Then
            WsRes.Range(Cel.Offset(0, 1), Cel.Offset(0, 20)).Copy C.Offset(0, 6)
        End If
    Next Cel
 
End Sub
J'aimerais pouvoir déterminer la dernière cellule non vide de chaque ligne Cel.Offset(0, 20

Le code est-il approprié à ce genre de traitement ou y a-t-il moyen de simplifier au lieu de faire 2 boucles for each ?

Je suis un peu embêté aussi car j'aurai aimé ne rien écrire dans la colonne 11, comment faire à partir de C.Offset(0, 6), copier jusque 10 puis repartir de 12 à n ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
WsRes.Range(Cel.Offset(0, 1), Cel.Offset(0, 20)).Copy C.Offset(0, 6)
Merci d'avance pour vos réponses.

Didier