Appariement : mettre des lignes les unes à côté des autres

Fermé
Messages postés
74
Date d'inscription
vendredi 21 août 2015
Statut
Membre
Dernière intervention
2 novembre 2020
-
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
-
Bonjour,



J'ai dans unfichier excel une base de données avec 1841 lignes qui correspondent à des données de personnes. Dans une colonne j'ai un numéro qui correspond à chaque personne. Je voudrais juxtaposer automatiquement certaines lignes avec d'autres. J'ai la liste de ces juxtapositions. Avez-vous un petit programme pour faire cela ?

Je mets ici un exemple pour bien comprendre ce que je cherche à faire :

https://www.cjoint.com/c/GJEuIsLEXrV

J'ai mis une partie de la base d edonnée
et en dessous les lignes (identifiées par des numéros) à mettre l'une à côté de l'autre

merci de votre aide




6 réponses

Messages postés
24292
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 janvier 2022
7 037
Bonjour,

tu devrais ajouter une feuille avec le résultat attendu.
Parce là...
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Messages postés
74
Date d'inscription
vendredi 21 août 2015
Statut
Membre
Dernière intervention
2 novembre 2020
1
Effectivement,

voici un fichier plus clair

premier feuillet, une base de donnée
deuxième feuillet la requête (lignes à juxtaposer)
troisième feuillet le résultat attendu

Merci de votre aide
Messages postés
74
Date d'inscription
vendredi 21 août 2015
Statut
Membre
Dernière intervention
2 novembre 2020
1
excusez-moi...
Voici le fichier:

https://www.cjoint.com/c/GJEvtG1uuEV
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 590
Bonjour,

voici un fichier plus clair surtout absent !

Alors avec ce que j'ai compris, regardes si cette macro correspond à ton attente.
Public Sub apparients()
Dim lig As Long, col As Integer
Dim cel As Range, pos As Range, Tba
Tba = Range("a29:c31").Value     ' plage  des apparients
For lig = 1 To UBound(Tba)
    Set pos = Cells.Find(Tba(lig, 1))
    If Not pos Is Nothing Then
        For col = UBound(Tba, 2) To 2 Step -1
            Set cel = Cells.Find(Tba(lig, col))
            If Not cel Is Nothing Then
                Rows(pos.Row + 1).Insert
                Rows(cel.Row).Cut Destination:=Rows(pos.Row + 1)
                Rows(pos.Row + 1).Interior.Pattern = xlGray16
            End If
        Next col
    End If
Next lig
End Sub

tu adaptes la plage des apparients à ton classeur.
Messages postés
74
Date d'inscription
vendredi 21 août 2015
Statut
Membre
Dernière intervention
2 novembre 2020
1
excuses moi mais je suis un peu nul et je ne sais pas faire fonctionner la macro avec mon fichier.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 590
Bonjour,

Dans ton classeur tu actives la feuille concernée,
tu ouvres l'éditeur VBA (alt+F11)
Menu insertion / module
Tu copies la macro et tu la colles dans le module
tu modifies ta plage des apparients avec l'adresse concernée dans ton classeur
avec ta sélection dans la macro tu utilises la touche F5
et tu regardes le résultat.
S'il ne te convient pas tu ne sauvegarde pas.

Voilà ton classeur exemple : https://www.cjoint.com/c/GJFig5eYnil
Messages postés
74
Date d'inscription
vendredi 21 août 2015
Statut
Membre
Dernière intervention
2 novembre 2020
1 >
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020

Ce qui est fait correspond à ce que je veux saufune chose: je voudrais avoir les lignes appariés sur la même ligne que la première. Dans l'exemple : la ligne 2 et la ligne 3 sur la même ligne que la ligne 1; la ligne 6 et la ligne 7 après la ligne 5...

Merci de ton aide.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 590
Bonjour,

je voudrais avoir les lignes appariés sur la même ligne que la première.
Je voudrais juxtaposer automatiquement certaines lignes avec d'autres.

Si l'on rapproche tes demandes tu avoueras que leur formulation n'est point du même ordre. ;-)

Voilà ta macro modifiée et son classeur test
Public Sub apparients()
Dim lig As Long, col As Integer, mxc As Integer, pcl As Integer
Dim cel As Range, pos As Range, Tba
Tba = Range("a29:c31").Value     ' plage  des apparients
mxc = ActiveSheet.UsedRange.Columns.Count
For lig = 1 To UBound(Tba)
    Set pos = Cells.Find(Tba(lig, 1))
    If Not pos Is Nothing Then
        pcl = 1
        For col = 2 To UBound(Tba, 2)
            Set cel = Cells.Find(Tba(lig, col))
            If Not cel Is Nothing Then
                pcl = pcl + mxc
                Cells(cel.Row, 1).Resize(1, mxc).Cut Destination:=Cells(pos.Row, pcl)
            End If
        Next col
    End If
Next lig
End Sub

https://www.cjoint.com/c/GKbhYhfnwMl
Messages postés
74
Date d'inscription
vendredi 21 août 2015
Statut
Membre
Dernière intervention
2 novembre 2020
1
D'abord 1000 excuses de ne pas être clair.

J'ai essayé mais pour le moment je n'y arrive pas. Il doit y avoir un truc que je ne comprends pas .

Dans le fichier ci dessous j'ai mis une base de donnée allégée de celle que j'ai (quelques colonnes seulement)

https://www.cjoint.com/c/GKbj718X1ZV

En bas j'ai mis les 3 colonnes correspondants à ce qu'il faut apparier.

Quand je fais tourner la macro en ayant mien bien la plage a1862:c101413 je ne comprends pas ce qui est fait
Messages postés
74
Date d'inscription
vendredi 21 août 2015
Statut
Membre
Dernière intervention
2 novembre 2020
1
j'ai corrigé mon erreur pour la base allégée (c'est évidemment dans la "plage des appariés")

Mais le problème persisite dans ma base complète. Il y a plusieurs lignes ou les données de la première personne disparaissent.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 590
Bonjour,

Il y a plusieurs lignes ou les données de la première personne disparaissent.
Comme la macro ne supprime aucune donnée il ne peut y avoir de disparition !
Par contre "les données de la première personne que tu ne vois plus sont sans doute appariées sur une autre ligne.

c'est évidemment dans la "plage des appariés", comme tu dis qu'il se trouve des incohérences.
Messages postés
74
Date d'inscription
vendredi 21 août 2015
Statut
Membre
Dernière intervention
2 novembre 2020
1 >
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020

Effectivement la ligne effacée se retrouve à côté d'une autre comme une appariée. Mais la ou c'est mais ne correspond pas à ce qui est dans les 3 colonnes de requêtes. C'est pour cela que je ne comprends pas.
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 590
Bonsoir,

Tu peux essayer cette nouvelle version qui te permettra de voir le souci j'espère
Public Sub apparients()
Dim lig As Long, lgs As Long, col As Integer, mxc As Integer, pcl As Integer
Dim cel As Range, pos As Range, Tba
Tba = Range("Feuil1!A29:C31").Value     ' plage  des apparients
mxc = ActiveSheet.UsedRange.Columns.Count
For lig = 1 To UBound(Tba)
    Set pos = Columns(1).Find(Tba(lig, 1))
    If Not pos Is Nothing Then
        pcl = 1
        For col = 2 To UBound(Tba, 2)
            Set cel = Columns(1).Find(Tba(lig, col), [A1])
            If Not cel Is Nothing Then
                pcl = pcl + mxc: lgs = cel.Row
                Cells(cel.Row, 1).Resize(1, mxc).Cut Destination:=Cells(pos.Row, pcl)
                Cells(lgs, 1) = Tba(lig, col)
            End If
        Next col
    End If
Next lig
End Sub
Messages postés
74
Date d'inscription
vendredi 21 août 2015
Statut
Membre
Dernière intervention
2 novembre 2020
1
Cette fois-çi ca fonctionne parfaitement !
je ne sais pas la différence mais ca marche !
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 590
C'est tant mieux que cela fonctionne : le positionnement ne se faisait sans doute pas correctement.
Bonne utilisation !