|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
Bonjour,
dans mon post précédant (http://www.developpez.net/forums/d13...ource-donnees/) je désirai savoir comment alimenter la listbox d'un formulaire à partir de données situées sur un autre fichier Word. merci à Heureux-Oli qui m'a donnée la solution. Maintenant, toujours pour simplifier le travail de l'utilisateur, je voudrai savoir si on peut et comment placer la source de données alimentant cette listbox dans le même document que celui contenant le formulaire en créant une seconde section? Merci par avance. |
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 18 878 ![]() |
Salut,
Dans ce morceau de code : Code :
Si on souhaite utiliser d'autres "paragraphes" ou une autre source de donnée il faut le spécifier. C'est comme lorsque l'on souhaite uiliser de la confiture au lieu du fromage, l'endroit risque de changer et le contenant aussi. Au lieu d'utiliser liste2.doc, il faut utiliser ActiveDocument, et au lieu de prendre tous les paragraphes, on utlise les paragraphes d'une seule section. Code :
ActiveDocument.Section(2).Range.Paragraphs
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
||
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
OK! j'essaye cela. merci
|
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
Je viens de tester.
au lieu de Code :
Set oDoc = Application.Documents.Open("F:\liste2.doc") Code :
Set oDoc = Application.Documents.Open (ActiveDocument.Sections(2).range.paragraphs) Code :
Set oDoc = ActiveDocument.Sections(2).range.paragraphs |
|
|
00
|
|
|
#5 | ||
![]() ![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 18 878 ![]() |
Salut,
En VBA, le mot Set signifie que l'on va attribuer un objet à une variable. Il faut pour que ça fonctionne que l'objet que l'on va attribuer corresponde à l'objet déclaré. Code :
On pourrait s'en passer, mais le code deviendrait très vite inutilisable et très lourd. Pour atteindre un paragraphe, il faudrait ouvrir le document et le fermer, pour un second paragraphe, la même chose. Impenssable. Donc, on ouvre le document une fois pour avoir accès à toutes ses collections. Dans ce cas, pour accéder au second paragraphe du document : Et pour le troisième Si tu souhaites accéder à une section du document Si on veut faire une boucle, il faut adresser la colection. Code :
For each oPar in odoc.Section(3).Paragraphs
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
||
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
Bonsoir, avec un peu de retard me voici à nouveau sur mon projet.
Pour reprendre ton explication, lorsque je je mets Code :
Set oDoc = Application.Documents.Open (ActiveDocument.Sections(2).range.paragraphs) Là, tes explications sont trop sibyllines pour mon niveau de maitrise du VBA ! |
|
|
00
|
|
|
#7 | ||||||||||||
![]() ![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 18 878 ![]() |
Salut,
Ce n'est pas ce que j'ai expliqué. Il existe une hiérarchie dans un document, on va même aller plus loin et dire qu'elle existe pour une application. L'objet Application. Dans sa hiérachie principale, on retrouve les documents. Les documents contiennent aussi d'autres objets.
Une section, peut contenir
Si on souhaite accéder à un paragraphe, on peut soit aller directement au départ du document soit en passant par une section, une cellule de tableau, ... Dans ton cas, les paragraphes se trouvent dans une autre partie du document qui est une autre section. Dans l'odre, on ouvre le document. Code :
Code :
Ensuite, on peut accéder aux paragraphes de cette section. Code :
Ensuite, toujours dans la même optique, on va accéder à ce que peut contenir un paragraphe, dans notre cas, ce qui nous intéresse est le texte de ce paragraphe, mais lui se trouve dans un Range. Code :
Si on souhaite récupérer le contenu de plusieurs objets, le plus simple est de faire une boucle, ici, c'est une boucle sur le contenu de chaque paragraphe qui nous importe. Code :
Et affecter un objet à un type d'objet autre ne fonctionne pas. Code :
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
||||||||||||
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
Le langage VBA est effectivement très processionnel et précis.
Je vais mouliner cela et je te tiens informé du résultat. Merci pour l'explication didactique et compréhensible car j'avoue que l'aide Microsoft est alambiquée et faite pour des personnes possédant un certain niveau (et qui donc n'ont pas besoin de cette aide) |
|
|
00
|
|
|
#9 | ||
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
Bon! J'ai essayé d'adapté mais d'entrée cela bute sur la définition de la variable oPar à la ligne 12 : 'Paragraphs' surligné et "erreur de compilation - membre de méthode ou de donnée introuvable. Par ailleurs, l'Intellisense ne me propose pas 'Paragraphs' après '= oSec.'
Code :
|
||
|
|
00
|
|
|
#10 | ||||
![]() ![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 18 878 ![]() |
Salut,
Code :
J'ai commis un erreur dans mes explications. Pour atteindre un paragraphe situé dans une section, il faut passer par son Range. il me semble que je n'avais pas rencontré ce besoin de passer par un range pour atteindre le paragraphe. Code :
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
||||
|
|
00
|
|
|
#11 | ||
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
Voici le code corrigé:
Code :
Et quand j'essaye de modifier quelque chose d'autre dans le code c'est carrément l'erreur 5174 'fichier introuvable, etc.' Avant, je surnageais, là, je suis complètement noyé.
|
||
|
|
00
|
|
|
#12 |
![]() ![]() |
Bonjour,
Opar est directement ton paragraphe sur lequel tu travailles et non un indice Code :
tblTemp() = Split(opar.Range.Text, -1)
__________________
Cordialement, Christophe Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche |
|
|
00
|
|
|
#13 |
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
Merci carden.
J'ai corrigé mais maintenant l'erreur 'incompatibilité de type' est sur la ligne suivante avec 'tblListe(oPar, 0) = ' surligné en bleu. |
|
|
00
|
|
|
#14 |
![]() ![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 18 878 ![]() |
Salut,
C'est normal, tu essaies de mettre un paragraphe qui est un objet dans une référence de table. C'est comme vouloir mettre une voiture dans un pot de confiture. Mais pas à pas, tu vas y arriver. Dans le tuto, c'était facile, j'explique comment adresser un paragraphe en passant par son index. Dans le cas de paragraphes contenus dans une section, c'est plus compliqué, il faut travailler sur la collection. Ton code y parviens. Par contre : Cette ligne est censée insérer un texte dans un tableau (tblListe), ce tableau est à deux dimensions et le premier terme donne un des indices du tableau. Il faut pour cet indice compter le nombre de paragraphes que tu as traités. Le plus simple est un compteur dans ta boucle et tu incrémentes ce compteur à chaque passage.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#15 |
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
Tu l'as compris, je suis autodidacte en VBA et ,à près de 60 balais, le cerveau est nettement moins flexible et véloce
Je suis contre les posts demandant directement un code complet car il faut faire l'effort de comprendre pas à pas ce que l'on écrit. C'est comme cela qu'on apprend. Mais là, j'avoue être un peu dépassé car je ne maîtrise pas encore assez les subtilités des objets, collections, boucles, compteurs, etc. Je vais essayer de travailler encore la méthode de la découverte mais je vais vite atteindre les limites de mon incompétence!!! Je pense que le compteur est du style variable comme i = i+1 ? Gardons courage et merci pour votre aide qui me permet d'avancer à petits pas mais d'avancer quand même
|
|
|
00
|
|
|
#16 |
![]() ![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 18 878 ![]() |
Salut,
Autodidacte, on l'est presque tous. Pour le compteur, c'est correct. A chaque passage, il sera incrémenté d'une unité.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#17 |
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
Bon, je jette l'éponge et je reste sur le système à 2 fichiers distincts. Je viens de passer 2 heures à essayer de créer cette foutue boucle mais mon faible niveau et mon défaut de maîtrise de la syntaxe me bloquent et sont particulièrement chronophage !!!
Merci quand même pour votre aide, j'ai au moins compris qu'il ne faut pas s'aventurer en terre trop inconnue au risque de s'enliser rapidement ! |
|
|
00
|
|
|
#18 |
![]() ![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 18 878 ![]() |
Salut,
Tu bloques où ? Donnes nous ton code !
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#19 |
|
Membre du Club
![]() retraité Inscription : avril 2012 Messages : 130 ![]() |
en fait, je ne sais pas comment gérer "oPar", l'objet paragraphe, et la variable "i" du compteur. Ni comment définir "i" pour désigner chaque donnée d'un paragraphe. Comme je l'ai marqué, mes lacunes sont un peu trop vaste pour concevoir "la formule magique" à partir de mon code initial.
J'ai essayé diverses façons (un peu au petit bonheur, je le reconnais) mais je préfère ne pas les montrer au risque de faire hurler un connaisseur |
|
|
00
|
|
|
#20 | ||
![]() ![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 18 878 ![]() |
Salut,
Il faut déclarer la variable du compteur. ensuite, il faut être certain que cette variable est à 0 A chaque passage de la boucle, on ajoute 1 au compteur Dans ce cas, j'ai utilisé un entier pour le compteur, on aurait pu utiliser un Byte. Code :
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com