Appariement : mettre des lignes les unes à côté des autres
borisparis
Messages postés
87
Statut
Membre
-
gbinforme Messages postés 15481 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 15481 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