Microsoft 365 Récupérer les informations dans différentes feuilles dans des lignes différentes

mxh

XLDnaute Nouveau
Bonjour à tous,

je souhaite récupérer les informations d'un meme nom dans plusieurs feuilles mais ne se trouvant pas à chaque fois sur le meme numéro de ligne.

Pouvez vous m'aider ?

Merci d'avance !

cordialement !

Mxh
 

Pièces jointes

  • Récupération couleur.xlsm
    20.1 KB · Affichages: 19

fanch55

XLDnaute Barbatruc
Bonjour,
Je ne comprend pas le principe de faire une telle jointure entre les 2 feuilles.
Je suppose que nom1 à nomN seront renseignés par de vrai noms
dans le même ordre d'idée, Date1 à DateN le seront également et probablement avec des dates identiques d'une feuille sur l'autre .
Confirmez-vous qu'il faille mettre les lignes bout à bout selon les noms ?
 

job75

XLDnaute Barbatruc
Bonjour mxh, JHA, fanch55, Bruno,

Voyez le fichier joint et cette macro dans le code de la feuille "Recap" :
VB:
Private Sub Worksheet_Activate()
Dim ncol%, coldeb%, lig&, d As Object, w As Worksheet, c As Range, x$, n&, col%
ncol = 7
coldeb = 2
lig = 1
Set d = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
Rows("2:" & Rows.Count).Delete 'RAZ
For Each w In Sheets(Array("Feuil1", "Feuil3")) 'nom des feuilles à adapter
    For Each c In w.UsedRange.Columns(1).Cells
        x = LCase(c)
        If x <> "" Then
            If Not d.exists(x) Then
                lig = lig + 1
                d(x) = lig 'mémorise le n° de ligne
                c.Copy Cells(lig, 1) 'copie le nom
            End If
            n = d(x) 'récupère le n° de ligne
            c(1, 2).Resize(, ncol).Copy Cells(n, coldeb) 'copier-coller
            For col = coldeb To coldeb + ncol - 1
                With Cells(n, col)
                    If .Interior.ColorIndex = 3 Then 'si rouge
                        .Value = "AT"
                        .Font.ColorIndex = 2 'police blache
                    ElseIf .Interior.ColorIndex = 15 Then 'si gris
                        .Value = "NT"
                        .Font.ColorIndex = 2 'police blanche
                        .Interior.ColorIndex = 1 'fond noir
                        .Borders(xlDiagonalUp).LineStyle = xlNone
                        .Borders(xlDiagonalDown).LineStyle = xlNone
                    End If
                End With
            Next col
        End If
    Next c
    coldeb = coldeb + ncol 'décalage vers la droite
Next w
End Sub
Elle se déclenche quand on active la feuille.

Si les tableaux sont grands l'exécution peut prendre du temps car les cellules sont traitées une par une.

A+
 

Pièces jointes

  • Récupération couleur(1).xlsm
    23.6 KB · Affichages: 8

youky(BJ)

XLDnaute Barbatruc
Bonjour Franch55, Bonjour Job75,
J'avais refait la macro en tenant compte de la situation et le résultat me surprenait alors j'attendais des commentaires avant de renvoyer. Job75 est passé par là et comme d'hab. une macro magnifique . . .
J'ai vite testé sa macro et nos tablo étaient identiques, j'était content que l'on arrive au même résultat.
Donc j'ai rien renvoyé.
Pour le fun je mets donc le fichier, ma macro doit pas être aussi rapide mais non testé.
La macro de Job75 et la mienne sont dans ce fichier
Bruno
 

Pièces jointes

  • Récupération couleur2.xlsm
    26.3 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour mxh, le forum,

Bien entendu s'il y a beaucoup de doublons il faut s'arranger pour ne traiter que les derniers doublons.

Voyez ce fichier (2) et la macro où j'ai ajouté le test :
VB:
If Application.CountIf(c(2).Resize(w.Rows.Count - c.Row), c) = 0 Then 's'il s'agit du dernier doublon
Avec les tableaux de 10 000 lignes du post #6 la macro s'exécute chez moi en 6,7 secondes.

C'est le temps qu'il faut pour exécuter 20 000 fois le test précédent.

A+
 

Pièces jointes

  • Récupération couleur(2).xlsm
    24 KB · Affichages: 2

mxh

XLDnaute Nouveau
Bonjour mxh, le forum,

Bien entendu s'il y a beaucoup de doublons il faut s'arranger pour ne traiter que les derniers doublons.

Voyez ce fichier (2) et la macro où j'ai ajouté le test :
VB:
If Application.CountIf(c(2).Resize(w.Rows.Count - c.Row), c) = 0 Then 's'il s'agit du dernier doublon
Avec les tableaux de 10 000 lignes du post #6 la macro s'exécute chez moi en 6,7 secondes.

C'est le temps qu'il faut pour exécuter 20 000 fois le test précédent.

A+
Pour le doublon c'est ma faute... Mea culpa, il n'y en a pas normalement.
 

job75

XLDnaute Barbatruc
Bonjour mxh,

90 lignes c'est très peu de chose donc la macro du post #5 va bien, avec ou sans doublons.

Il suffit de l'adapter pour 6 feuilles, voyez le fichier joint.

A+
 

Pièces jointes

  • Récupération couleur(1 bis).xlsm
    31 KB · Affichages: 3

Discussions similaires

Réponses
7
Affichages
294

Statistiques des forums

Discussions
312 112
Messages
2 085 417
Membres
102 885
dernier inscrit
AISSOU