[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
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
A voir également:
- [VBA] Optimisation de code / gain de temps
- Code ascii de a - Guide
- Optimisation pc - Accueil - Utilitaires
- Code de déverrouillage oublié - Guide
- Blocage agriculteur carte en temps réel - Accueil - Transports & Cartes
- Code puk bloqué - Guide
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...
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...
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
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
...
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
...
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...
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...
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
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 :)
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 :)
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.
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.
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
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 :
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 :
le IP est une variable qui a été precedemment saisie dans une inputbox :
Comme la conf que je colle il faut que j'ajoute à chaque début de ligne :
J'espere avoir pu t'éclairer un peu plus :)
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 :)
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?
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?
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
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 :
Il faut arriver à :
(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 =))
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 :
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
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
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
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
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
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
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
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.
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.
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+
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+
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
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 :
(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 :-) :
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 :
ç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 !
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 !
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+
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
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
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 :
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...
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...
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:
Voilà. A+ si tu as encore besois de tuyaux.
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.
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
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 !
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 !
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
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
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
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+.
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+.
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
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
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
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+.
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+.
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
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 :)
Problème résolu (sauf pour la selection au clic, mais au fond ce n'est pas très grave =) )
@ bientot :)