[VBA] Optimisation de code / gain de temps

Résolu/Fermé
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 - 25 févr. 2008 à 12:16
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 - 3 mars 2008 à 09:26
Bonjour,

Je suis sujet à stocker dans une variable une quantité de texte relativement importante...soumis aux contraintes de longueur, je me retrouve avec ça :

conf1 = "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" & Chr(13) & Chr(10)

conf2 = "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" & Chr(13) & Chr(10)

conf3 = "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" _
& Chr(13) & Chr(10) & "blah" & Chr(13) & Chr(10)

conf = conf1 & conf2 & conf3


Multipliez ça par 20, puis par 3 =)

Vous avez quelque chose de plus...rapide, à me proposer ? Sachant que niveau contenu, je dois me retrouver avec un texte, et des auts de lignes, obligatoirement !

Merci beaucoup !
A voir également:

15 réponses

Bonjour,

pour eviter la répétion de Chr(13) & Chr(10) tu peux affecter ces 2 caractères à une varialble chaine

Dim NL As String
NL = Chr(13) & Chr(10)

conf1 = "blah" _
& NL & "blah" _
& NL & "blah" _
& NL & "blah" _
& NL & "blah" _
& NL & "blah" _
& NL & "blah" & NL

c'est déja plus court...
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
25 févr. 2008 à 14:53
c'est très gentil, mais pour moi l'opération reste la même, je dois copier/coller en début de chaque ligne...

ctrl+V + fleche bas + home
ctrl+V + fleche bas + home
ctrl+V + fleche bas + home
ctrl+V + fleche bas + home
ctrl+V + fleche bas + home
ctrl+V + fleche bas + home
ctrl+V + fleche bas + home
...
0
Si tu affectais les valeurs des variables conf1 conf2 ... dans une boucle?
D'ou provient le texte que tu veux mettre dans tes variables?

Si les lignes de texte à chainer sont dans des tableaux de texe c'est assez simple.

conf1 = tabTxt(1)
for i =2 to n ' nombre de lignes à chainer
conf1 = conf1 & Chr(13) & Chr(10) & tabTxt(i)
next i
conf1 = conf1 & Chr(13) & Chr(10)

c'est déja plus sympa...
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
25 févr. 2008 à 16:09
Le texte qui proviens de mes variables viennent d'un fichier de configuration d'un routeur qui fait quelques milliers de lignes...

quand je rentre des paramètres en inputbox, je récupère d'un routeur un fichier de configuration "type", dans lequel je change certaines variables par les paramètres.

Enfin, je stock le tout dans une variable, que je copie dans le presse papiers :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
OK,

Tu utilise une inputbox, ça veut dire que tu saisis manuellement les les lignes de texte que tu veux ensuite chainer?
Est ce que tu ne pourrais pas les stocker dans des tableaux et faire la concatenation une seule fois à la fin de la saisie?

J'aurais besoin de plus d'éléments pour t'aider.
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
26 févr. 2008 à 10:58
Je vais essayer d'être le plus clair possible, par le biais d'un exemple...

Disons que pour mes routeurs j'ai ces commandes à rentrer :

...
router ospf 100
Network 192.168.1.1 0.0.0.255
interface fa0/0
ip address 192.168.1.1 255.255.255.0
line con 0
login local
logging synchrounous
escape-character 27
...


Maintenant, quand je passe d'un routeur à l'autre, il n'y a que le 192.168.1.1 qui change. Donc, dans mon visual basic je le présente comme tel :

conf = "router ospf 100" _
 & chr(13) & chr(10) & "Network" & IP  _
 & chr(13) & chr(10) & "interface fa0/0" _
 & chr(13) & chr(10) & "ip address " & IP & "255.255.255.0" _
 & chr(13) & chr(10) & "line con 0" _
 & chr(13) & chr(10) & "login local" _
 & chr(13) & chr(10) & "logging synchrounous" _
 & chr(13) & chr(10) & "escape-character 27" & chr(13) & chr(10)


le IP est une variable qui a été precedemment saisie dans une inputbox :

IP = Inputbox("Saisissez l'ip du routeur :")


Comme la conf que je colle il faut que j'ajoute à chaque début de ligne :
& chr(13) & chr(10) & 
et à chaque fin _ jusqu'à ce que j'ai une alerte me disant que j'ai trop de fin de ligne, où dans ce cas je sectionne le bout de config dans une variable que je concatenne à la fin :

...
& chr(13) & chr(10) & "escape-character 27" & chr(13) & chr(10)

conf2 = "line vty 0 4" _
...

conf_final = conf & conf2 & conf3


J'espere avoir pu t'éclairer un peu plus :)
0
Bonjour,

Ton fichier de configuration type, on pourrait le lire ligne par ligne, voir si la ligne de texte contient la partie à modifier

Si non -> copier la ligne telle quelle -> Engegister dans une variable texte ou un nouveau fichier config
Si oui -> Modifier la ligne avec le nouvel IP -> Engegister dans une variable texte ou un nouveau fichier config

Le code pourrait etre:
' cas ou on enregistre la nouvelle config dans un fichier

Dim texte as string, IP as string,

Open "ConfigType" for input as #1 ' ouvrir configtype en lecture
Open "NewConfig" for output as #2 ' ouvrir nouvelle config
While not eof(1)
Line input #1, texte 'lire une ligne configtype
' si texte contient "ip address" modifier avec nouvel IP
If instr(texte,"ip address") > 0 then texte = "ip address " & IP & " 255.255.255.0"
Print #2, texte ' engegistrer nouvelle config
wend
Close

' cas ou on enregistre la nouvelle config dans une variable

Dim texte as string, IP as string, config as string

Open "ConfigType" for input as #1 ' ouvrir configtype en lecture
config="" 'initialiser config
While not eof(1)
Line input #1, texte 'lire une ligne configtype
' si texte contient "ip address" modifier avec nouvel IP
If instr(texte,"ip address") > 0 then texte = "ip address " & IP & " 255.255.255.0"
config= config & texte & chr(13) & chr(10) ' engegistrer nouvelle config
wend
Close

Est ce que ça pourrait marcher?
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
26 févr. 2008 à 15:57
mhhhh...on y est presque...

Il faudrait que je génère le code que je suis en train de tapper contenant tout les chr et les variables à remplacer, dans une variable (ou un fichier texte).

Après, je n'ai plus qu'à copier/coller moi-même le code généré dans ma variable de ma feuille, et j'aurai toute ma config, qui sera générée dès que la variable sera appelée...

La solution 2 est donc presque la bonne, presque car avec ta technique il interprète les variables et les chr, moi il me faudrait le code brut =)

EDIT : en me relisant je me comprends plus moi-même...je vais te dire ce que j'attends, car on est vraiment presque, mais vraiment !

on part de :
router ospf 100
Network 192.168.1.1 0.0.0.255
interface fa0/0
ip address 192.168.1.1 255.255.255.0
line con 0
login local
logging synchrounous
escape-character 27


Il faut arriver à :

conf = "router ospf 100" _
 & chr(13) & chr(10) & "Network" & IP  _
 & chr(13) & chr(10) & "interface fa0/0" _
 & chr(13) & chr(10) & "ip address " & IP & "255.255.255.0" _
 & chr(13) & chr(10) & "line con 0" & chr(13) & chr(10)

conf2 = "login local" _
 & chr(13) & chr(10) & "logging synchrounous" _
 & chr(13) & chr(10) & "escape-character 27" & chr(13) & chr(10)

conf_final = conf + conf2


(comme exemple, on dira que le VBA est limité à 5 retours de lignes, contre 25 dans le vrai code)

Pour se faire, il faudrait, en m'inspirant du code de ta deuxième solution : (je met de côté les Dim, mais je les oublie pas =))

Open "ConfigType" for input as #1
config=""
While not eof(1)
Line input #1, texte
If instr(texte,"§ip§") > 0 then texte = "ip address " & IP & " 255.255.255.0"
config= config & chr(13) & chr(10) & texte & _
wend
Close 


A ça on rajoute deux contraintes :

- Le code NE devra PAS etre interpérété, mais enregistré en brut dans la variable
- Le contenu de la variable texte devra être entre des guillemets
- Toutes les 25 lignes, il va falloir remplacer :
config= config & chr(13) & chr(10) & texte & _
par
config= config & chr(13) & chr(10) & texte & & chr(13) & chr(10)


olala...j'ai oublié de dire qu'il va falloir mettre un compteur a la nouvelle sous-variable, afin de la concaténer à la fin avec la variable finale...

Bon...j'ai l'impression finalement que ta technique elle est encore plus difficile et longue que ma saisie manuelle :P
0
OK,

Le code brut ça veut dire que tu ne veux pas les retours à la ligne?
Si c'est ça alors il faut juste les retirer de code

Dim texte as string, IP as string, config as string

Open "ConfigType" for input as #1 ' ouvrir configtype en lecture
config="" 'initialiser config
While not eof(1)
Line input #1, texte 'lire une ligne configtype
' si texte contient "ip address" modifier avec nouvel IP
If instr(texte,"ip address") > 0 then texte = "ip address " & IP & " 255.255.255.0"
config= config & texte ' <------------ enregistrer nouvelle config
wend
Close

Si tu as encore besoin d'aide n'hesite pas
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
27 févr. 2008 à 10:04
Merci de ton aide, elle m'est très précieuse :-)

Quand je parlais de code brut, je voulais dire d'inscrire du code dans la variable, sans qu'il soit interprété...

Exemple :

config = "chr(13) & chr(10) & "escape-character 27" _"

qui renvoie :

chr(13) & chr(10) & "escape-character 27" _

A mon avis, à cause de la présence des guillemets, c'est totalement impossible ...

olalala quel casse-tête :P
0
bonjour,

effectivement,
config = "chr(13) & chr(10) & "escape-character 27" _" n'est pas correct
on ne peut pas imbriquer des guillemets

il faut ecrire ça:
config = "Chr(13) & Chr(10) & " & Chr(34) & " escape-character 27" & Chr(34)
ce qui donne
Chr(13) & Chr(10) & "escape-character 27"

ou encore
config = chr(34) & "Chr(13) & Chr(10) & " & Chr(34) & " escape-character 27" & Chr(34) & " _" & chr(34)
qui donne
"Chr(13) & Chr(10) & "escape-character 27" _"

Mais dans ce cas "Chr(13) & Chr(10)" devient du texte et ne sera plus considéré comme caractère de retour chariot-nouvelle ligne , je ne sais pas si c'est vraiment ce que tu cherche.

Ce qui serait bien c'est que tu me mette d'un coté ce que tu récupere dans configType (tel que c'est ecrit) et de l'autre ce que tu voudrait obtenir, je t'écrirai le code qui va bien. Il ne faut pas oublier que les "Chr(13) & Chr(10)"
si j'ai bien compris servent à simuler l'appui sur Enter quand tu mets ta variable Config dans le presse papier. Alors il ne faut pas les mettre entre guillemets sinon ça devient un simple texte.

Bon appetit.
0
Je reviens de la cantine et j'ai pensé à une chose.

Les fichier de config que tu as, c'est pour utiliser avec une commande DOS comme netsh par exemple?
Parce que si c'est la cas, pas besoin de passer par le presse papier pour coller les commandes modifiées.
Dans DOS, mais peut-etre tu le sait déja, on peut rediriger les entées sorties standard de la console écran-clavier.

Par exemple:
netsh <config1.txt
veut dire executer netsh.exe et les entrées seront lues dans config1.txt au lieu d'etre tapées au clavier.

Est ce que cette piste vaut le coup d'etre exploitée? Du coup plus besoin de presse papier ni de chr(13) chr(10).
Tu utiliserai VB uniquement pour recopier ton ConfigType en modifiant certains paramètres et l'enregister dans Config1.
Aprés, c'est du gateau.

A+
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
27 févr. 2008 à 14:34
re !

Avant d'aborder ton premier post je vais d'abord répondre au deuxieme.

Je vais te resituer un peu le contexte, histoire que tu comprenne le but de ma démarche.

Je vais avoir des routeurs Cisco, une bonne centaine. Ces routeurs, je veux les configurer de manière rapide et efficace, en utilisant un petit programme VBA dans un fichier Word. Pourquoi un fichier Word, car il contiendra toute la procédure de configuration de ces routeurs, qui servira pas seulement pour moi mais pour tout ceux qui s'en serviront après moi.

Le principe est de rentrer après avoir choisi après une liste de 3 types de configuration "type" (selon l'emplacement géographique), et en inputbox des variables contenues dans une fiche qui est attaché a chaque routeur, qui contient les identifiants de connexion, le nom du routeur, le numéro IP du routeur, l'ip publique etc...

Ces variables seront ajouté dans le fichier de configuration type du routeur, qui est le même pour tout le monde (sauf bien sûr l'endroit où sont entreposés les variables).

Quand les variables ont été rentrées, la configuration finale, stockée dans le fichier Word (car il sera utilisé depuis divers endroits, envoyé à d'autres etc...), sera copiée dans le presse-papier, afin que la personne puisse directement la coller dans le routeur directement.


Ensuite, de ces variables est également généré deux autres configurations, qui eux seront stockées dans des texts-box et surlignés au clic dans cette text-box (faudra que je cherche comment faire ça d'ailleurs ^^), pour que la personne derrière le collage dans le routeur, puisse coller egalement des "minis-configurations" dans 2 firewalls via Telnet.

Grâce à ça, du travail à la chaine est possible, par plusieurs personnes à la fois, et tgrès rapidement (environ 1 minute par routeur)


Ces configurations, je les ai déjà dans un fichier texte. J'ai pu en retranscrire une dans le VBA de la feuille via une méthode barbare de copier/coller, comme je l'ai indiqué avec les chr et co., maintenant je cherchais un moyen d'optimiser le code...pour les 2 autres configurations type ! Voilà !


Alors, en revenant sur ta solution...
Il faudrait un truc qui permette au final dans la variable et en code brut (c'est à dire affiché mais non interprêté) de donner ça :

conf1 = "ligne1" _
& Chr(13) & Chr(10) & "ligne2" _
& Chr(13) & Chr(10) & "ligne3" _
& Chr(13) & Chr(10) & "ligne4" _
& Chr(13) & Chr(10) & "ligne5" _
& Chr(13) & Chr(10) & "ligne6" _
& Chr(13) & Chr(10) & "ligne7" _
& Chr(13) & Chr(10) & "ligne8" _
& Chr(13) & Chr(10) & "ligne9" _
& Chr(13) & Chr(10) & "ligne10" _
& Chr(13) & Chr(10) & "ligne11" _
& Chr(13) & Chr(10) & "ligne12" _
& Chr(13) & Chr(10) & "ligne13" _
& Chr(13) & Chr(10) & "ligne14" _
& Chr(13) & Chr(10) & "ligne15" _
& Chr(13) & Chr(10) & "ligne16" _
& Chr(13) & Chr(10) & "ligne17" _
& Chr(13) & Chr(10) & "ligne18" _
& Chr(13) & Chr(10) & "ligne19" _
& Chr(13) & Chr(10) & "ligne20" _
& Chr(13) & Chr(10) & "ligne21" _
& Chr(13) & Chr(10) & "ligne22" _
& Chr(13) & Chr(10) & "ligne23" _
& Chr(13) & Chr(10) & "ligne24" & Chr(13) & Chr(10)

conf2 = "ligne25" _
& Chr(13) & Chr(10) & "ligne26" _
& Chr(13) & Chr(10) & "ligne27" _
& Chr(13) & Chr(10) & "ligne28" _
& Chr(13) & Chr(10) & "ligne..." _
& Chr(13) & Chr(10) & "ligne..." _
& Chr(13) & Chr(10) & "ligne..." _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" & Chr(13) & Chr(10)

conf3 = "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" _
& Chr(13) & Chr(10) & "ligne" & Chr(13) & Chr(10)

conf = conf1 & conf2 & conf3

(je suis désolé de ne pas pouvoir détailler les conf, elles sont confidentielles et ont un certain nombres d'infos personnelles, comme les mots de passe, et les IP privées)

J'avais pensé à un truc comme ça, si tu pouvais le corriger, ou le reprendre :-) :

Open "ConfigType" for input as #1 'je précise le chemin d'accès complet, où le nom de fichier qui se trouve dans le même repertoire ?
config=""
j = 1
While not eof(1)
        for i = 1 to 23
             Line input #1, texte
             If instr(texte,"§ip§") > 0 then
                texte = "ip address " & IP & " 255.255.255.0"
             end if
             If instr(texte,"§identifiants§") > 0 then
                texte = "ppp chap hostname " & login
             end if
             If instr(texte,"§IP publique§") > 0 then
                texte = "permit udp host ip host " & IP_public & " eq isakmp"
             end if
             if i = 1 then
             config = config & "conf" & j & " = " & chr(34) & "Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " _" & chr(34)
             j = j + 1
             else
             config = config & chr(34) & "Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " _" & chr(34) 
             end if
         loop
         Line input #1, texte
         config = config & chr(34) & "Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " & chr(13) & chr(10)" & chr(34) 
wend
for k = 1 to j
line = line & "conf" & k & " + "
loop
config = config & line
Close 



Il me manque juste un truc, c'est comment dans la variable config je simule un retour à la ligne entre la fin de conf2 et le début de conf3 :

& Chr(13) & Chr(10) & "ligne" & Chr(13) & Chr(10)
                                                                     <======
conf3 = "ligne" _


ça devient (en tout cas pour moi) très compliqué...mais si on arrive à remplacer 700 lignes saisies manuellement par 30...et ensuite juste copier les 700 générées par le code dans le VBA...J'aurai gagné trois semaines :D

Je te remercierai jamais assez pour l'intérêt que tu portes à mon problème !
0
bonsoir,

Je voudrais que tu essai ce code:
Remplace les nom de fichiers par des noms à toi. Le prmier fichier est celui ou tu lis les donnes
Le deuxiène fichier est celui ou on ecrit le code VB avec les variables et les données.

Dis moi si c'est ce que tu attends.

A+

Sub essai()

Dim i, j, k
Dim config, texte
Dim IP, login, IP_public

Close
Open "d:\essai_inp.txt" For Input As #1 'je précise le chemin d'accès complet, où le nom de fichier
' qui se trouve dans le même repertoire ?

Open "d:\essai_out.txt" For Output As #2

j = 1
While Not EOF(1)
        For i = 1 To 23
             If EOF(1) Then Exit For
             Line Input #1, texte
             If InStr(texte, "§ip§") > 0 Then
                texte = "ip address " & IP & " 255.255.255.0"
             End If
             If InStr(texte, "§identifiants§") > 0 Then
                texte = "ppp chap hostname " & login
             End If
             If InStr(texte, "§IP publique§") > 0 Then
                texte = "permit udp host ip host " & IP_public & " eq isakmp"
             End If
             If i = 1 Then
                config = "conf" & j & " = " & Chr(34) & texte & Chr(34) & " _"
                Print #2, config
                j = j + 1
             Else
                config = " & Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " _"
                Print #2, config
             End If
         Next i
         If EOF(1) Then
           config = " & " & Chr(34) & Chr(34)
           Print #2, config
           Print #2, ""

         Else
           Line Input #1, texte
           config = " & Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " & chr(13) & chr(10)"
           Print #2, config
           Print #2, ""
         End If
Wend

config = "conf = conf"
For k = 1 To j - 2
config = config & k & " & conf"
Next
config = config & j - 1
Print #2, config
Close
End Sub
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
29 févr. 2008 à 09:45
Impréssionnant !

Le code à l'air niquel...Tout est bien formé...j'ai juste a enlever les espaces dans le fichier texte d'origine, en tout cas, cela fonctionne ! Bravo !!!

Puis-je me permettre de te demander egalement comment inséré du bout de config. dans une textbox, et sans possibilité de modification, d'avoir une séléction complète lorsque l'on clique à l'interieur de celle-çi ?

Merci en tout cas, et chapeau bas ! ^_^

EDIT : Tiens, c'est bizarre il n'a pas prit les conditions de remplacement :

             If InStr(texte, "§ip§") > 0 Then
                texte = "ip address " & IP & " 255.255.255.0"
             End If
             If InStr(texte, "§identifiants§") > 0 Then
                texte = "ppp chap hostname " & login
             End If
             If InStr(texte, "§IP publique§") > 0 Then
                texte = "permit udp host ip host " & IP_public & " eq isakmp"
             End If


A mon avis ce n'est pas "> 0" qu'il faut mettre...De toute façon je vais virer ces conditions de remplacement, vu que les §ip§ par exemple peuvent se trouver sur plusieurs lignes, avec des commandes différentes...je ferai un remplacement manuellement...
0
Bonjour,

Heureux d'avoir pu te dépanner,

Pour la textbox, ça depend si tu veux la remplir par programme ou manuellement.
Par programme c'est facile
-définir la textbox avec une taille suffisante en hauteur de manière à voir plusieurs lignes à la fois
-mettre la propriété MultiLine=True
-mettre la propriété Locked=True
-mettre la propriété ScrollBars=Vertical
Ensuite le programme renseigne la textbox avec le bout de config.
Si la variable config contient le texte en question tu ecrit Form1.Text1.Text=config tout simplement. Verifie que les lignes sont bien affichées, selectionne le texte comme dans un editeur normal, fait un copier coller dans Word par exemple, il ne devrait y avoir de problème.
La propriété Locked=False empèche la modification du contenu de la textbox. Par conséquent tu ne pourras pas remplir la textbox manuellement. Pour effacer le contenu Form1.Text1.Text=""

Pour selectionner le contenu entier de la textbox avec un click:
Private Sub Text1_Click()
Dim longText As Long
longText = Len(Text1.Text)
      Text1.SelStart = 0
      Text1.SelLength = longText
End Sub


Voilà. A+ si tu as encore besois de tuyaux.
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
29 févr. 2008 à 11:17
rahhhhhhhhh en fait la fonction de remplacement à marché...ça m'a entièrement salopé la config xP

Je vais tout recharger et faire le remplacement manuellement sous VB avec Ctrl + F, j'ai profité de ton programme pour faire un bouton, afin de pouvoir ultérieurement rajouter des configs type. Un peu de flexibilité, ca ne fait pas de mal =).

Grâce à toi, j'ai pu faire un beau fichier Word, complet, flexible, accessible et rapide à mettre en oeuvre. Je t'en dois une belle !

Merci encore, je place le topic en résolu dès que j'ai tout fini et finalisé, au cas où en route j'ai besoin de solliciter ton aide !
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120 > lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018
29 févr. 2008 à 12:29
mhhhh...je n'arrive pas à remplir ma textbox, quand je fais :

Document.TextBox1.Text = conf_sem_fw ou
Document1.TextBox1.Text = conf_sem_fw ou
Form.TextBox1.Text = conf_sem_fw ou
Form1.TextBox1.Text = conf_sem_fw

Il me met un message d'erruer avec "objet requis"...

Je suis certain que ma textbox s'appelle TextBox1, mais je ne sais pas comment s'appelle ma feuille, y a t il un moyen de le savoir ?

merci (et bon appetit :))

P.S.: la selection du texte au clic n'a pas l'air de fonctionner non plus...pourtant j'ai copié/collé, en ne changeant que les text1 par le nom de ma textbox
0
Un nom de feuille ou Form est donné par défaut quand on ajoute une feuille avec l'explorateur de projet VB.
Pou connaitre le nom, tu selectionne la feuille, on voit des petites poignées qui s'affichent (petits carrés) et dans la fenetre de propriétés la première ligne contient le nom (Nane) que tu peux changer si tu le souhaite.

Pareil pour la textbox. Verifie si le nom est Text1 ou TextBox1 et adapte
Private Sub Text1_Click() ou bien Private Sub TextBox1_Click()
Cette procédure doit se touver dans le code de la feuille et pas dans un module. Verifie qu'il n'y a pas déja une procédure du meme nom sur la feuille.

Pour remplir la textbox, idem, si la feuille s'appelle Form1:
Form1.Text1.Text=conf_sem_fw ou bien Form1.TextBox1.Text=conf_sem_fw

Tu peux aussi omettre le nom de la feuille si elle est active:
Text1.Text= conf_sem_fw ou TextBox1.Text=conf_sem_fw

Si tu suit ces consignes ça doit macher puisque chez moi y a pas de problèmes. Il faut juste bien mettre en concordance les noms des objets.

A+.
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
29 févr. 2008 à 14:32
J'ai trouvé, je ne peux pas inscrire de données à l'intérieur d'une textbox qui est locked :P

Par contre, je te confirme que je n'arrive vraiment pas à faire une selection de tout le texte à l'intérieur d'une textbox à partir d'un clic dans celui-çi...j'ai essayé derriere un selection.copy, un doc.textbox1.select = true...mais rien n'y fait :s

Est-ce que cela vient egalement du fait que la textbox soit locked ? ça m'etonnerai...

J'ai pu récupérer le nom du form, qui par défaut s'appelle ThisDocument (fallait trouver ...). J'ai renommé en Doc
0
Re,

Je viens de comprendre (il était temps) que tu essaie de faire une macro dans un document Word, alors que moi je te parlais de VB6. Dans Word ça s'appelle VBA : Visual Basic for Applications, et il y a quelques différences.

La grosse différence c'est qu'on ne peut pas créer de fichiers executables avec VBA Word, ce sont des macros utilisables uniquement dans les documents Word.

La procedure que je t'ai envoyé, je l'avais testé sous VB6, la meme sous VBA Word ne marche pas mais ne renvoie pas d'erreur.Je ne sais pas pourquoi.

Par contre la feuille ou se trouvent les boutons et la textBox c'est plutot un UserForm (ce que tu nomme ThisDocument c'est le document Word), a moins que tu n'aie placé des boutons et une zone de texte dans le document Word lui-meme, ce qui est faisable.

De toutes manières la selection dans une textbox verrouillée (Locked) est toujours possible comme on le fait dans n'importe quel document, avec la souris ou les touches du clavier. C'est vrai que de cette façon on peut oublier de selectionner une partie du texte. Alors peut etre avec un bouton "COPY" qui met le texte dans le presse papier....?

Voila, c'est tout pour l'intant. Tu devrait au moins arriver à afficher le UserForm , placer du texte dans le TextBox et faire une selection. Si tu as des soucis fait moi signe.
A+.
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
3 mars 2008 à 09:26
J'ai oublié de le préciser : Merci beaucoup pour ton aide !

Problème résolu (sauf pour la selection au clic, mais au fond ce n'est pas très grave =) )

@ bientot :)
0