Appariement : mettre des lignes les unes à côté des autres
borisparis
Messages postés
78
Date d'inscription
Statut
Membre
Dernière intervention
-
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
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
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
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
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
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
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
Bonjour,
voici un fichier plus clair surtout absent !
Alors avec ce que j'ai compris, regardes si cette macro correspond à ton attente.
tu adaptes la plage des apparients à ton classeur.
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.
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
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
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
https://www.cjoint.com/c/GKbhYhfnwMl
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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.
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.
Bonsoir,
Tu peux essayer cette nouvelle version qui te permettra de voir le souci j'espère
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