Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

liste >> tableau double entrée

5 réponses
Avatar
Rodrigue
Salut,

Je possède une liste en 3 colonnes: 'date' 'lieu' 'personne'
Les colonnes 'lieu' et 'personne' peuvent contenir des doublons.

j'aimerais pouvoir transformer cette liste en tableau à double entrée du
genre

ici la ailleurs
---------------------------------------------------------
20/11 moi lui elle
21/11 toi moi
22/11 elle toi lui

J'ai tâté du côté des tableaux dynamiques, mais n'arive pas à resortir la
valeur texte 'personne' en tant que pivot.
Toute idée (formule, manip rapide ou code VBA) est la bienvenue.

Merci pour votre aide

ROD

5 réponses

Avatar
AV
Paramètres (à adapter) :
En "Feuil1" :
- A1:C1 les étiquettes de colonnes : "dates";"lieux";"personnes"
- En A2:Ax les dates
- En B2:Bx les lieux
- En C2:Cx les personnes
Les plages "dates";"lieux";"personnes" sont nommées

Sub zz_Tablo_Double_Entrée()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Sheets("TABLO").Delete
Sheets.Add.Name = "TABLO"
'extractions
With Sheets("Feuil1")
.[A:A].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[A1], Unique:=True
.[B:B].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[B2], Unique:=True
End With
Set plg = Range("B2", [B65536].End(3))
plg.Copy
[A1].PasteSpecial Transpose:=True
plg.Clear
'calculs par formules matricielles
Rw = [A:A].Find("*", , , , , xlPrevious).Row
Col = [1:1].Find("*", , , , , xlPrevious).Address(1, 0)
Cl = Left(Col, Application.Find("$", Col) - 1)
[B2].FormulaArray "=if(isnumber(match(B$1&$A2,lieux&dates,0)),index(personnes,match(B$1&$A2,lieux&
dates,0)),"""")"
[B2].AutoFill Destination:=Range("B2:" & Cl & "2")
Range("B2:" & Cl & "2").AutoFill Destination:=Range("B2:" & Cl & Rw)
Range("B2:" & Cl & Rw) = (Range("B2:" & Cl & Rw))
'bricoles
Cells.EntireColumn.AutoFit
[A1].Select: [A1] = "": Set plg = Empty
End Sub'av

AV
Avatar
Rodrigue
tout d'abord, un immense MERCI
pour ma 1ère sur ce groupe, j'obtiens pas une ébauche de piste, mais
quasiment une réponse 'clé sur porte'

TOUTEFOIS

j'ai défini qq variables : Dim plg, rw, col, cl (j'espère que c'est
correct..)

la macro se lance effectivement, mais s'arrête après avoir créé la feuille
'tablo'
malheureusement, la macro travaille dans la feuille1, détruisant ainsi les
premières lignes de ma liste.puis s'arrête ...

je me permets donc alain de te renvoyer la balle ( moi, faudra déjà un
certain temps avant que je comprenne ce qui se passe)

mais quoi qu'il en soit, je te remercie pour ton aide

@ te lire bientôt j'espère ...
ROD



"AV" a écrit dans le message news:
#
Paramètres (à adapter) :
En "Feuil1" :
- A1:C1 les étiquettes de colonnes : "dates";"lieux";"personnes"
- En A2:Ax les dates
- En B2:Bx les lieux
- En C2:Cx les personnes
Les plages "dates";"lieux";"personnes" sont nommées

Sub zz_Tablo_Double_Entrée()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Sheets("TABLO").Delete
Sheets.Add.Name = "TABLO"
'extractions
With Sheets("Feuil1")
.[A:A].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[A1],
Unique:=True

.[B:B].AdvancedFilter Action:=xlFilterCopy, CopyToRange:=[B2],
Unique:=True

End With
Set plg = Range("B2", [B65536].End(3))
plg.Copy
[A1].PasteSpecial Transpose:=True
plg.Clear
'calculs par formules matricielles
Rw = [A:A].Find("*", , , , , xlPrevious).Row
Col = [1:1].Find("*", , , , , xlPrevious).Address(1, 0)
Cl = Left(Col, Application.Find("$", Col) - 1)
[B2].FormulaArray >
"=if(isnumber(match(B$1&$A2,lieux&dates,0)),index(personnes,match(B$1&$A2,li

eux&
dates,0)),"""")"
[B2].AutoFill Destination:=Range("B2:" & Cl & "2")
Range("B2:" & Cl & "2").AutoFill Destination:=Range("B2:" & Cl & Rw)
Range("B2:" & Cl & Rw) = (Range("B2:" & Cl & Rw))
'bricoles
Cells.EntireColumn.AutoFit
[A1].Select: [A1] = "": Set plg = Empty
End Sub'av

AV




Avatar
AV
la macro se lance effectivement, mais s'arrête après avoir créé la feuille
'tablo'
malheureusement, la macro travaille dans la feuille1, détruisant ainsi les
premières lignes de ma liste.puis s'arrête ...


C'est un problème de recopie du code à partir du forum :
vraisemblablement les points qui manquent au début des lignes :
.[A:A].AdvancedFilter ............................
.[B:B].AdvancedFilter ........................

Attention, par ailleurs, à l'instruction qui commence par :
[B2].FormulaArray =...........
et se termine par :.......dates,0)),"""")"
TOUT est sur une seule ligne !

AV

Avatar
AV
Puis-je me permettre de t'envoyer mon fichier à ton adresse perso ??
en espérant que ton ordi donne le même résultat que le mien ...


Ok...si possible allègé !

AV

Avatar
Rodrigue
merci alain de te pencher sur mon cas...
et je dois être effectivement un CAS puisque j'arrive pas à faire tourner le
truc.....
et pourtant le code m'a l'air correct !!

Puis-je me permettre de t'envoyer mon fichier à ton adresse perso ??
en espérant que ton ordi donne le même résultat que le mien ...

ROD







"AV" a écrit dans le message news:
uu$
la macro se lance effectivement, mais s'arrête après avoir créé la
feuille


'tablo'
malheureusement, la macro travaille dans la feuille1, détruisant ainsi
les


premières lignes de ma liste.puis s'arrête ...


C'est un problème de recopie du code à partir du forum :
vraisemblablement les points qui manquent au début des lignes :
.[A:A].AdvancedFilter ............................
.[B:B].AdvancedFilter ........................

Attention, par ailleurs, à l'instruction qui commence par :
[B2].FormulaArray =...........
et se termine par :.......dates,0)),"""")"
TOUT est sur une seule ligne !

AV