[RESOLU]Passer d'un Dico à un Tableau avec utilisation de Split

cathodique

XLDnaute Barbatruc
Bonjour,

Je voudrais transférer un dico à un tableau en utilisant la fonction split, puis transférer ce dernier sur la feuille résultat.

VB:
Option Explicit
Sub Macro1()
    Dim plage As Range, dico As Object, Tb(), i As Long, Tr()
    Set dico = CreateObject("Scripting.Dictionary")
    Set plage = ThisWorkbook.Worksheets("bd").Range("A1").CurrentRegion

    Tb = plage.Value
    For i = 1 To UBound(Tb)
        dico(Tb(i, 2) & "|" & Tb(i, 3)) = ""
    Next i
    Sheets("resultat").[A1].Resize(dico.Count) = Application.Transpose(dico.keys)    '**pour tester mon code

    'passer de dico à Tableau "split"
    
End Sub

Comment passer de dico= A|AB à un tableau T1=A et T2=AB. Je bloque pour le dimensionnement du tableau dans le cas où dans le dico il y avait plusieurs chaines séparées par "|".

Merci beaucoup. Bonne journée
 

Pièces jointes

  • Dico à Tableau split.xlsm
    20 KB · Affichages: 30
Dernière édition:

CPk

XLDnaute Impliqué
Re : Passer d'un Dico à un Tableau avec utilisation de Split

Bonjour, une solution plutôt simpliste qui évite de transiter par tableau et dictionnaire. Est-ce que cela peu faire l'affaire ?

Sub test()
Feuil2.Columns(1).TextToColumns DataType:=xlDelimited, Other:=True, OtherChar:="|"
End Sub
 

gosselien

XLDnaute Barbatruc
Re : Passer d'un Dico à un Tableau avec utilisation de Split

Bonjour,

voilà comment splitter :)

Code:
Option Explicit


Sub Macro1()
Dim plage As Range, dico As Object, Tb(), i As Long, Tr()
Dim a, b, col, s, zz
  Set dico = CreateObject("Scripting.Dictionary")
  Set plage = ThisWorkbook.Worksheets("bd").Range("A1").CurrentRegion
  Tb = plage.Value
  For i = 1 To UBound(Tb)
    zz = Tb(i, 2) & "|" & Tb(i, 3)
    If Not dico.Exists(zz) Then
      dico(zz) = dico(zz) & Tb(i, 2) & "|" & Tb(i, 3)
    End If
  Next i
  Sheets("resultat").[A1].Resize(dico.Count) = Application.Transpose(dico.Keys)     '**pour tester mon code
  If dico.Count = 0 Then Exit Sub
  a = dico.Keys
  b = dico.Items
  'passer de dico à Tableau "split"
  col = 0
  a = dico.Keys  ' ARRAY
  b = dico.Items  ' ARRAY
  For i = 0 To UBound(a)
    For col = 0 To UBound(Split(b(i), "|"))
      Sheets("resultat").Cells(i + 1, col + 3).Value = Split(b(i), "|")(col)
    Next col
  Next i
End Sub

P.
 

laetitia90

XLDnaute Barbatruc
Re : Passer d'un Dico à un Tableau avec utilisation de Split

BONJOUR cathodique:),CPk:),gosselien:)

une autre methode encore...... pas trop utilisée
passer par un array + manipuler index dico

Code:
Sub es()
Dim m As Object, T(), i As Long
  Set m = CreateObject("Scripting.Dictionary")
  T = Feuil1.Range("A1").CurrentRegion
  For i = LBound(T, 1) To UBound(T, 1)
  m(T(i, 2)) = Array(T(i, 2) & "|" & T(i, 3), T(i, 2), T(i, 3))
  Next i
  With Feuil2
 .[A1].Resize(m.Count, 1) = Application.Index(m.items, , 1)
 .[B1].Resize(m.Count, 1) = Application.Index(m.items, , 2)
 .[C1].Resize(m.Count, 1) = Application.Index(m.items, , 3)
 End With
End Sub

PS: la derniere sequence on peut tres bien la boucler si beaucoup index
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : Passer d'un Dico à un Tableau avec utilisation de Split

Bonjour,

Je vous remercie beaucoup. J'ai posé cette question car je ne maitrise pas bien, les dicos ainsi que les tableaux.
Tout ce que je sais qu'ils sont rapides que de travailler sur la feuille. J'ai voulu avoir le résultat sur la feuille, juste pour vérifier que le résultat est bon (sur mon fichier original, il y a une masse de lignes).
VB:
 a = dico.Keys
  b = dico.Items
  'passer de dico à Tableau "split"
  col = 0 '**********
  a = dico.Keys  ' ARRAY
  b = dico.Items  ' ARRAY
  For i = 0 To UBound(a)
    For col = 0 To UBound(Split(b(i), "|")) '***********
      Sheets("resultat").Cells(i + 1, col + 3).Value = Split(b(i), "|")(col)
    Next col
  Next i

@gosselien: Je n'ai pas bien compris ton code, pourquoi mettre col=0 et ensuite for col=0

Merci à vous et bonne journée.
 

david84

XLDnaute Barbatruc
Re : Passer d'un Dico à un Tableau avec utilisation de Split

Bonjour,
pas besoin de Split :
Code:
Sub test()
Dim plage As Range, dico As Object, Tb(), Tr(), i As Long, j As Long
Set dico = CreateObject("Scripting.Dictionary")
Set plage = ThisWorkbook.Worksheets("bd").Range("A1").CurrentRegion

Tb = plage.Value
ReDim Tr(1 To UBound(Tb), 1)

For i = 1 To UBound(Tb)
    If Not dico.exists(Tb(i, 2) & "|" & Tb(i, 3)) Then
      dico(Tb(i, 2) & "|" & Tb(i, 3)) = ""
      j = j + 1
      Tr(j, 0) = Tb(i, 2)
      Tr(j, 1) = Tb(i, 3)
    End If
Next i

Sheets("resultat").[A1].Resize(dico.Count, 2) = Tr
End Sub
A+
 

cathodique

XLDnaute Barbatruc
Re : Passer d'un Dico à un Tableau avec utilisation de Split

Bonjour Laetitia90,

Je sais que tu es une championne des dictionnaires. Je n'ai pas bien compris ton code mais il fonctionne parfaitement.
Comme je l'avais dit, je ne maitrise bien, ni les dicos ni les tableaux. J'ai posé cette question pour essayer de résoudre un problème sur une autre discussion. Je voulais transférer les données d'un dico à un tableau pour effectuer ensuite un autre traitement.
J'espère seulement que ma démarche est bonne.

Merci beaucoup.
 

cathodique

XLDnaute Barbatruc
Re : Passer d'un Dico à un Tableau avec utilisation de Split

Bonjour David84,

En effet, Pas besoin de split avec ton code. Hélàs, je n'ai encore atteint un assez bon niveau, je ne pratique pas régulièrement.

C'est gentil, je ne m'attendais à autant de réponses. J'aurai souhaité une participation similaire sur ma précédente discussion.

Merci beaucoup à vous tous.
 

gosselien

XLDnaute Barbatruc
Re : [RESOLU]Passer d'un Dico à un Tableau avec utilisation de Split

re,

j'ai vu ton autre discussion, cathodique, mais pas facile et pas assez clair comme explication et...je ne suis pas un spécialiste des dico(je bidouille plutôt) , même si je trouve ça génial , donc dans le même bain que toi pour m'en servir :) :)
 

cathodique

XLDnaute Barbatruc
Re : [RESOLU]Passer d'un Dico à un Tableau avec utilisation de Split

Merci beaucoup Gosselien,

Je te remercie beaucoup pour ton code et d'avoir consulté l'autre discussion. Merci pour ton retour sur celle-ci.
Pas très clair, je m'en doutais un peu. Bien souvent, il est difficile d'expliquer des choses qui nous semble évidente.
Je vais revoir ma copie.

Un grand merci à tous.
 

cathodique

XLDnaute Barbatruc
Re : [RESOLU]Passer d'un Dico à un Tableau avec utilisation de Split

Merci d'avoir consulté, et surtout de me faire part de tes impressions. Un peu beaucoup brouillon :eek:
Il n'y que 2 onglets essentiels, tous les autres c'était pour essayer d'expliquer les tenants et les aboutissants.
Il s'agit d'une bd incomplète (onglet1) dont les références sont dans l'autre onglet. La difficulté réside au niveau des dates (date d'enregistrement et date d'acquisition plus qu'il s'agit de matériel roulant).

par exemple, si tu devais mettre à jour une gestion de compte, je ne pense qu'il te serait possible d’enregistrer une opération alors même que le compte ne soit pas créé.

Enfin, merci beaucoup. Étant donné que c'est confus, je reconnais ne pas avoir le talent pour énoncer des problèmes.

à la prochaine.
 

Discussions similaires

L
Réponses
6
Affichages
950
L

Statistiques des forums

Discussions
312 270
Messages
2 086 685
Membres
103 370
dernier inscrit
pasval