Créer-gérer Array 2 dim pour alimenter Usf et Doc

  • Initiateur de la discussion peper-eliot
  • Date de début
P

peper-eliot

Guest
Bonjour à tous.

Cela fait un bout de temps que je tournez en rond sur le forum à la recherche des clés de mon problème.

j'ai lu avec beaucoup d'intéret le fil - Remplir une combobox
http://www.excel-downloads.com/html/French/forum/read.php?f=1&i=67859&t=67825
J'ai aussi beaucoup ris en lisant les rappels sur la charte

Toutefois, je sollicite votre aide pour m'aider à y voir plus clair dans les arrays dynamique.

Pour éviter d'en dire trop, je laisse la place au doc en pj qui sera sans doute plus parlant.

J'en profite pour remercier Wally pour sa solution
http://www.excel-downloads.com/html/French/forum/read.php?f=1&i=74400&t=74400
qui se trouve incluse dans le fichier joint
Au cas ou..., j'ai laissé une question en attente sur ce fil

Et puis enfin...
Lol... ça veut dire quoi ?

Ps : J'espère que vous ne vous offusquerez pas d'un .doc dans XLD
 

Pièces jointes

  • Ask-Help-Forum-Xld.zip
    13.3 KB · Affichages: 28
W

wally

Guest
Bonsoir peper-eliot et le forum,

Voici déjà une possibilité pour alimenter la combobox :

Dim iRow As Integer

With ActiveDocument.Tables(1)
For iRow = 2 To .Rows.Count
UserForm1.ComboBox1.AddItem Replace(.Cell(iRow, 1).Range.Text, Chr(13) & Chr(7), "")
Next iRow
End With

UserForm1.Show


Pour l'explication de "Lol...", tu trouveras ton bonheur dans ce fil :

<http://www.excel-downloads.com/html/French/forum/read.php?f=1&i=42861&t=42861>


Slts

wally
 
P

peper-eliot

Guest
Re-bonsoir à tous

Bon, j'ai pas très avancé dans mes "Array" mais en tout cas, je crois que j'ai bien assimilé le "Lol..."

Pour la portion de code, sur mon poste [NT-VBA-Wd97], l'exécution bloque à
Replace : fonction non définie

- alors, j'ai essayé
UserForm1.ComboBox1.AddItem
ça me rajoute des Item vide dans ma ComboBox
j'en conclu que la suite sert à remplacer l'Item "" par le contenu de la cellule .Cell(iRow, 1)
-donc, j'ai mis
UserForm1.ComboBox1.AddItem .Cell(iRow, 1)
et la j'ai une erreur de type (non correspondant)
-donc ....

Pourrait-je savoir ce que fait exactement le but de cette fonction pour essayer de trouver autre chose d'équivalent ?
D'apprès ce que je décripte,
- je selectionne le contenu texte de la .cell(ligne 2,colonne1)
- je fais un retour chariot Char(13) & Char(7) (?? dans l'aide vb ==> Caractères non géré par MS Windows.)
- je vide la cellule ""

Allez, je rentre chez-moi et je réfléchis à tout ça dans le train

Merci beaucoup Wally

@+ peper-eliot
 
W

wally

Guest
Re peper-eliot et le forum,

OK, la fonction Replace() est reconnue uniquement à partir de Word 2000. Voici donc une version adaptée pour Word 97 de mon code précédent (avec quelques explications supplémentaires...) :

Dim iLen As Integer
Dim iRow As Integer

'Traiter le 1er tableau
With ActiveDocument.Tables(1)
'Parcourir chaque ligne du tableau à partir de la ligne 2
For iRow = 2 To .Rows.Count
'Calculer la longueur du contenu de la cellule en colonne 1, sans les deux derniers caractères spéciaux
iLen = Len(.Cell(iRow, 1).Range.Text) - 2
'Alimenter la combobox avec le contenu de la cellule en colonne 1, sans les deux derniers caractères spéciaux
UserForm1.ComboBox1.AddItem Mid(.Cell(iRow, 1).Range.Text, 1, iLen)
Next iRow
End With

'Afficher le userform
UserForm1.Show


Slts

wally
 
P

peper-eliot

Guest
Allez... dernier message pour les couches-tard

J'ai bien tout relu, Wally, et j'ai bien tout compris.
J'ai aménagé le code pour intégrer ta solution.

Chez moi, je suis sous XP, et c'est vrai que ça cause des petits problèmes quand on va au travail et que ça ne marche pas avec Wd97

Je me permet de mettre à dispo la V1-1.
J'ai un peu travaillé sur le Usf, et notamment utilisé un vieux code pour contrôler la saisie des montants en n'utilisant que le pavé numérique.
Je l'ai mis pour la TextBox Montant1

En tous les cas, merci encore. ça fait vraiment plaisir de voir avancer le projet - bien modeste - grâce au forum... et je le scrute avec d'autant plus d'intérêt à la recherche d'une explication sur les Array en deux dimensions.
Mon objectif serai de comprendre comment récupérer la totalité de mon tableau en mémoire et de ne plus travailler sur la base du tableau du document.

D'ailleurs, à ce propos, Vba dit que ces tableaux peuvent supporter 60 dimensions ?? 60lignes*60colonnes c'est ça ?

@+ peper-eliot

Et merci encore
 

Pièces jointes

  • Ask-Help-Forum-Xld-V1-1.zip
    18.4 KB · Affichages: 27
P

peper-eliot

Guest
Bonjours à tous,

juste un petit mot pour relancer mon petit problème.

J'ai passé mon dimanche le nez dans msdn.microsoft.com/library
pfffffffffffff
dur... Eh ben moi qui croyait que les tableaux c'étati du gateau, j'ai été servit

J'ai aussi lu, re-lu et re-re-lu le code présent dans le fichier
USF_saisie-et-gestion-de-titre, de @+thierry, qui gère trois projets et les recompiles dans un seul tableau VB
le lien metionné sur le classeur ne fonctionne plus mais... à tout hasard
http://www.excel-downloads.com/html/French/forum/messages/1_45176_45176.htm


J'avoue que je sèche un peu...beaucoup
pour ne pas dire pationnement (quand on aime ...lol)

Aussi, si vous pouviez me guider dans l'écriture du code pour récupérer mon tableau du doc dans une procédure VB, ce serai vraiment sympa

Au fait, j'ai toujours pas capté cette histoire de multidimensionnels, surtout quand j'ai vu qu'il existait aussi des tableaux en escalier.

Et dire qu'il parait que c'est binaire... Lol...

PS excuser pour le fouilli dans le code du zip que je vous ai joint. Je vous promet que j'en laisserai un propre sur ce fils quand ce sera terminé... d'ici ???

Merci d'avance pour votre aide,

@+ peper-eliot.
 
W

wally

Guest
Bonjour peper-eliot et le forum,

Voici deux petits exemples pour récupérer un tableau Word dans une array :

1. Array à une dimension (p. ex. colonne 1 du tableau Word)

Option Base 1 '<== A mettre au début du module

Sub Arr_1()

Dim iLen As Integer
Dim vTbl() As Variant

Dim oCel As Cell

With ActiveDocument.Tables(1)

ReDim vTbl(.Rows.Count)

For Each oCel In .Columns(1).Cells
iLen = Len(oCel.Range.Text) - 2
vTbl(oCel.RowIndex) = Left(oCel.Range.Text, iLen)
Next oCel

End With

MsgBox "L'array compte " & UBound(vTbl) & " lignes"

Set oCel = Nothing

End Sub


2. Array à deux dimensions (tableau Word entier)

Option Base 1 '<== A mettre au début du module

Sub Arr_2()

Dim iLen As Integer
Dim vTbl() As Variant

Dim oCel As Cell

With ActiveDocument.Tables(1)

ReDim vTbl(.Rows.Count, .Columns.Count)

For Each oCel In .Range.Cells
iLen = Len(oCel.Range.Text) - 2
vTbl(oCel.RowIndex, oCel.ColumnIndex) = Left(oCel.Range.Text, iLen)
Next oCel

End With

MsgBox "L'array compte " & UBound(vTbl, 1) & " lignes et " & UBound(vTbl, 2) & " colonnes"

Set oCel = Nothing

End Sub


Slts

wally
 
P

peper-eliot

Guest
Bonjour à tous

Et merci Wally

Ah, j'en suis tout excité

Je my colle le plus vite possible et je ne manquerai pas de donner des nouvelles...
...qui risquent de tarder, pour cause de petit mid-week en campagne... histoire de rafraichir les neurones...lol

@+ peper-eliot
 

Statistiques des forums

Discussions
314 655
Messages
2 111 605
Membres
111 217
dernier inscrit
aladinkabeya2