Word, gestion dictionary et array

porcinet82

XLDnaute Barbatruc
Bonjour à tous,

Cela fait un petit moment que je ne suis pas passé sur le forum, en grande partie par manque de temps.
Je suis actuellement en train de développer une petite application sous word et je me retrouve confronter à un problème que je n'arrive pas à résoudre.

En gros, je voudrais passer le contenu d'un Dictionary dans un Array (le premier me sert à gérer les doublons et le second que je maitrise un peu plus est je trouve plus souple d'utilisation).

Donc sous excel, pas de soucis, je fais la manip suivante qui focntionne parfaitement.

Code:
Sub test()
Dim Dico
Dim tablo() as Variant, i As Integer
Set Dico = CreateObject("Scripting.Dictionary")
For i = 1 To 5
    If Not Dico.Exists(Cells(i, 1).Value) Then
        Dico.Add Cells(i, 1).Value, Cells(i, 1).Value
    End If
Next i
tablo = Application.Transpose(Dico.Keys)
End Sub

Seulement sous Word, il ne connait pas la focntion Transpose.
Je n'ai donc pas trouvé de solution afin de remplir tablo avec le contenu de Dico.

Toutes explication ou une solution est la bienvenue.

Merci d'avance,

Romain
 

porcinet82

XLDnaute Barbatruc
Re : Word, gestion dictionary et array

re,

A force de recherche, j'ai réussis à trouver une solution, mais sans trop comprendre ce que je fais...

Voila le code qui fonctionne :
Code:
Sub test()
Dim Dico
Dim tablo() as Variant, i As Integer
Set Dico = CreateObject("Scripting.Dictionary")
For i = 1 To 5
    If Not Dico.Exists(Cells(i, 1).Value) Then
        Dico.Add Cells(i, 1).Value, Cells(i, 1).Value
    End If
Next i
 
Let tablo_temp = Dico.Keys
 
Redim tablo(1 To Dico.Count)
For i = 1 To Dico.Count
    tablo(i) = tablo_temp(i-1)
Next i
End Sub

Si quelqu'un à une explication, notamment sur l'utilisation du Let...

Merci d'avance et bon weekend.

@+
 

jeanpierre

Nous a quitté
Repose en paix
Re : Word, gestion dictionary et array

Bonjour porcinet82,

Let est, semble-t'il, un résidu des anciennes programmation, semble-t'il ? non certain, une sorte de déclaration de variable....

Néanmoins un petit coup de F1 sur cette instruction te donnera bien des réponses pour le Visual actuel.

Bonne soirée bientôt.

Jean-Pierre
 

chris

XLDnaute Barbatruc
Re : Word, gestion dictionary et array

Bonjour et bises à Porcinet et Jean Pierre (c'est la journée ou tournée de bises:)

C'est un peu usine à gaz, mais j'ai vu quelque part et même testé ce jour là, qu'on peut, en installant les bibliothèques adéquates, utiliser certaines des fonctions de calculs Excel dans Access.

Il est donc probable que cela marche aussi dans Word. Je vais essayer de retrouver si j'ai gardé une trace et plus d'infos sur cette possibilité.
Je ne sais si cela marcherait pour transpose.

Edit : un lien sur le sujet
http://support.microsoft.com/kb/153748/fr
 
Dernière édition:

porcinet82

XLDnaute Barbatruc
Re : Word, gestion dictionary et array

Salut,

Merci pour ces infos.
Chris, je ne suis pas sur Access mais sous Word. Cependant, il est vrai que ca pourrait fonctionner, sauf qu'il me semble que les bibliothèques d'excel étaient déjà installées.

@+
 

chris

XLDnaute Barbatruc
Re : Word, gestion dictionary et array

Bonjour

J'ai fait le test suivant dans Word et cela fonctionne (à adapter bien sûr à ton contexte)
Code:
Sub Test()
    Dim toto(2, 2)
    Dim titi As Variant
    
    toto(1, 1) = 5
    toto(1, 2) = 10
    toto(2, 1) = 15
    toto(2, 2) = 20
    titi = TransposeDim(toto)
End Sub

Function TransposeDim(v As Variant) As Variant
   Dim obj As Excel.Application

Set obj = CreateObject("Excel.Application")
    
' Custom Function to Transpose a 0-based array (v)

    Dim X As Long, Y As Long, Xupper As Long, Yupper As Long
    Dim tempArray As Variant

    Xupper = UBound(v, 2)
    Yupper = UBound(v, 1)

    ReDim tempArray(Xupper, Yupper)
    For X = 0 To Xupper
        For Y = 0 To Yupper
            tempArray(X, Y) = v(Y, X)
        Next Y
    Next X

    TransposeDim = tempArray
      
      obj.Quit
      Set obj = Nothing
End Function
 
Dernière édition:

porcinet82

XLDnaute Barbatruc
Re : Word, gestion dictionary et array

re,

Oula, effectivement, ca devient une "usine à gaz". Moi je parlais d'utiliser simplement la fonction Transpose qui existe sous Excel, mais pas de recréer une fonction gérant le transpose.

En effet, l'idée était d'avoir une solution simple pour récupérer les infos contenus dans un dictionary, chose que j'arrivais à faire de manière très simple sous Excel avec la ligne de code tablo = Application.Transpose(Dico.Keys) mais qui ne fonctionnait pas sous Word.
Du coup, la solution du Set s'avère quand même plus "simple" que la fonction que tu me proposes. D'autant que dans mon cas il ne s'agissait pas de Array, mais de Dictionary.

Mais merci !!

@+
 

chris

XLDnaute Barbatruc
Re : Word, gestion dictionary et array

Bonjour

Effectivement j'ai repris un code du web sans trop y regarder.
Celui-ci devrait mieux aller : on passe en argument le tableau à transposer. Je ne connais pas les dictionary mais cela devrait convenir.
Code:
Function TransposeWord(v As Variant) As Variant
    Dim obj As Excel.Application
    Dim tempArray As Variant

    Set obj = CreateObject("Excel.Application")
    
        TransposeWord = obj.Application.Transpose(v)
    
    obj.Quit
    Set obj = Nothing
End Function
 

porcinet82

XLDnaute Barbatruc
Re : Word, gestion dictionary et array

re,

En voyant ton code, je me suis dit "mais bien sur !!!".
Mais en faite, non !! :(
Alors, ca fonctionne avec un tableau, Word reconnait bien le transpose du Excel. Par contre, ca ne fonctionne pas avec le dictionary. Du coup, je n'y comprend plus grand chose !!! :confused:

@+
 

chris

XLDnaute Barbatruc
Re : Word, gestion dictionary et array

Re

J'ai pris un bout de code trouvé sur le net pour générer un dictionary et j'ai utilisé transpose.

Le code ne plante pas mais je ne sais pas si le résultat obtenu est ce que tu cherches...
Code:
Sub Dictionnaire()
    Set mondico = CreateObject("Scripting.Dictionary")
    Dim tablo() As Variant, i As Integer
    For i = 1 To 100
        aléa = Int(Rnd * 9) + 1
        maclé = "cle" & aléa
        mondico.Item(maclé) = mondico.Item(maclé) + 1
    Next i
    tablo = TransposeWord(mondico.Keys)
End Sub

Function TransposeWord(v As Variant) As Variant
    Dim obj As Excel.Application
    Dim tempArray As Variant

    Set obj = CreateObject("Excel.Application")
    
        TransposeWord = obj.Application.Transpose(v)
    
    obj.Quit
    Set obj = Nothing
End Function

Va falloir que je commence à creuser les dictionary...
 

Discussions similaires

Réponses
0
Affichages
299

Statistiques des forums

Discussions
314 450
Messages
2 109 729
Membres
110 553
dernier inscrit
loic55