XL 2016 passer d'une liste avec coordonnées à une version tableau et vice versa

bolem

XLDnaute Nouveau
Bonjour


Je vous présente mes deux problèmes réciproques:
- j'ai une liste dans laquelle il y a les données X, Y et la valeur sur ce point. J'aimerai pouvoir voir les valeurs sur un tableau qui aurait pour coordonnée (X,Y)

- J'ai un tableau qui donne les valeurs en (X,Y) , j'aimerai pouvoir récupérer la liste des valeurs avec par ligne, X, Y et la valeur associée.



Pour tout vous dire , c'est vrai qu'on pourrait rapprocher ce problème à celui- ci : j'ai les données mensuelles de vente depuis 10 ans et j'aimerai avoir un tableau avec comme entete de colonne les années et comme entete de ligne les mois...
Mais mon souci est que ce sont en vrai des coordonnées et à la fin je peux avoir un tableau de 200 par 200 cases.... ça commence à faire long de mettre les liens à la main ;-(
Avez-vous une idée pour simplifier la création des liens dans un sens ou dans l'autre (voir le fichier joint , il y a deux onglets)
Merci par avance
 

Pièces jointes

  • test valeur X-Y.xlsx
    18.7 KB · Affichages: 6

Gégé-45550

XLDnaute Accro
Bonjour


Je vous présente mes deux problèmes réciproques:
- j'ai une liste dans laquelle il y a les données X, Y et la valeur sur ce point. J'aimerai pouvoir voir les valeurs sur un tableau qui aurait pour coordonnée (X,Y)

- J'ai un tableau qui donne les valeurs en (X,Y) , j'aimerai pouvoir récupérer la liste des valeurs avec par ligne, X, Y et la valeur associée.



Pour tout vous dire , c'est vrai qu'on pourrait rapprocher ce problème à celui- ci : j'ai les données mensuelles de vente depuis 10 ans et j'aimerai avoir un tableau avec comme entete de colonne les années et comme entete de ligne les mois...
Mais mon souci est que ce sont en vrai des coordonnées et à la fin je peux avoir un tableau de 200 par 200 cases.... ça commence à faire long de mettre les liens à la main ;-(
Avez-vous une idée pour simplifier la création des liens dans un sens ou dans l'autre (voir le fichier joint , il y a deux onglets)
Merci par avance
Bonsoir,
Une proposition sans PQ, avec des formules matricielles (sauf pour Excel 365) à valider par CTRL+MAJ+ENTRÉE
Cordialement,
 

Pièces jointes

  • PQ_Bolem_GG.xlsx
    38.8 KB · Affichages: 6

cp4

XLDnaute Barbatruc
Bonjour @bolem :), @Cousinhub ;), @Gégé-45550 :),

En VBA
VB:
Option Explicit

Sub Liste_Dessin()
   Dim f As Worksheet, TblBD(), CelDepart As Range, d1 As Object, d2 As Object, i As Integer
   Dim clé1, clé2, lig As Long, col As Integer
   Set f = ThisWorkbook.Sheets("liste vers dessin")
   TblBD = f.Range("b4:d" & f.Range("b" & Rows.Count).End(xlUp).Row).Value
   Set CelDepart = f.Range("h13")                        ' Adresse résultat
   Set d1 = CreateObject("Scripting.Dictionary")
   Set d2 = CreateObject("Scripting.Dictionary")
   Dim TblRes(1 To 100, 1 To 100)
   For i = LBound(TblBD) To UBound(TblBD)
      clé1 = TblBD(i, 1): If d1.exists(clé1) Then lig = d1(clé1) Else d1(clé1) = d1.Count + 1: lig = d1.Count
      clé2 = TblBD(i, 2): If d2.exists(clé2) Then col = d2(clé2) Else d2(clé2) = d2.Count + 1: col = d2.Count
      TblRes(lig, col) = TblBD(i, 3)
   Next i
   CelDepart.Offset(1).Resize(d1.Count, 1) = Application.Transpose(d1.keys)   ' titre lignes
   CelDepart.Offset(, 1).Resize(1, d2.Count) = d2.keys             ' titres colonnes
   CelDepart.Offset(1, 1).Resize(d1.Count, d2.Count) = TblRes  ' résultat

   Set CelDepart = Nothing
   Set d1 = Nothing
   Set d2 = Nothing
End Sub

Sub Dessin_Liste()
   Dim f As Worksheet, CelDepart As Range, TblE, n As Long, ligne As Long, col As Integer
   Set f = Sheets("dessin vers liste")
   Set CelDepart = f.Range("b4")
   TblE = f.[i3].CurrentRegion
   Dim TblS(): ReDim TblS(1 To UBound(TblE) * UBound(TblE, 2), 1 To 3)
   n = 0
   For ligne = 2 To UBound(TblE, 1)
      For col = 2 To UBound(TblE, 2)
         If TblE(ligne, col) <> "" Then
            n = n + 1
            TblS(n, 1) = TblE(ligne, 1)
            TblS(n, 2) = TblE(1, col)
            TblS(n, 3) = TblE(ligne, col)
         End If
      Next col
   Next ligne

   f.Range("b4:d" & f.Range("b" & Rows.Count).End(xlUp).Row).ClearContents
   CelDepart.Resize(n, 3) = TblS
End Sub
NB: Tout le mérite est pour le regretté JB (ici)

Bonne journée.
 

Gégé-45550

XLDnaute Accro
Bonjour
Merci pour votre message, j'ai bien vu le passage dans l'onglet liste vers dessin mais je n'ai pas vu dans l'onglet dessin vers liste...
merci
Bonjour,
Pardon, je n'avais pas compris qu'il fallait aussi écrire les formules dans l'onglet 'Dessin vers Liste'.
Voilà qui répare cette inattention.
Cordialement,
 

Pièces jointes

  • PQ_Bolem_GG.xlsx
    41 KB · Affichages: 2

Discussions similaires

Réponses
7
Affichages
449

Statistiques des forums

Discussions
313 317
Messages
2 097 108
Membres
106 840
dernier inscrit
PeteHotmilk