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

  • Initiateur de la discussion Initiateur de la discussion mxh
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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 ?
 
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

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

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

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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
124
Retour