problème dans une boucle [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 10-08-2009 à 10:31:22
Code :
|
Ca ne veut rien dire du tout !
Déjà regarde la définition de l'instruction Do While dans l'aide de VBA.
Et puis lis quelques cours de programmation ça fera pas de mal car c'est vraiment incohérent.
Et avec ton i ça ne peut pas marcher comme ça. Il faut que tu stockes tes valeurs textes dans un tableau de string. i tu le mets en Integer et ça sera l'indice du tableau que tu vas parcourir.
Marsh Posté le 10-08-2009 à 10:34:23
lol , ben on m'avait di avec un do while quand on voulait fixer en dur ... des variables , mais peut etre qu'il faudrait les mettre dans un tableau ...
et désolé j'avais mi un for au début , j'ai oublié de rectifier ... en faite le gros du probleme est la .... !
Marsh Posté le 10-08-2009 à 12:04:26
merde je t'ai encore répondu en vbs
Alors d'avance, je réponds en VBS, les 3/4 des instructions sont quivalente en VBA et tu as un très bon debuggeur pour voir sur quel ligne ca plante
Maintenant que je vois ton code je m'aperçois que ce que tu appelais boucle ne correspond pas du tout à ce que j'attendais
Une boucle n'est pas égale à juste plusieur fois les mêmes instructions en faisant varier un paramètre.
Une boucle est égale à plusieur fois les mêmes instruction okai, mais avec une relation logique entre 2 tours de boucle!!!
Soit cette relation est très simple i=i+1 soit soit cela peut être l'énumération d'un ensemble .
Dans le cas de l'énumération, il me semble qu'il existe en VBA un for each qui marche très bien
Là dans ton cas, il n'y a aucune relation logique entre les noms, ils sont tous sans exception défini à l'avanc donc je dirais que tu devrais plutôt déclarer une fonction
Code :
|
et donc
Code :
|
Deviens:
Code :
|
De plus pour être exacte en VBS
Un do while ce fait comme ceci:
Code :
|
Et surtout en vbs un = entre chaine de charactere ne marche pas il faut faire un StrComp ("chaine1", "chaine2" ) si c'est égale à 0 alors les chaine sont identique
Marsh Posté le 10-08-2009 à 12:42:59
ok merci beucoup mais ici il faut un call ou un do while ...et sinon les modif que j'ai fais dans mon sont bonnes ?
Je sais pas trop si j'ai le drois de faire des DestinationFichier(i) par exemple ... cdt
Marsh Posté le 10-08-2009 à 13:45:20
Je dois avoir du mal à m'exprimer
Citation : Là dans ton cas, il n'y a aucune relation logique entre les noms, ils sont tous sans exception défini à l'avance donc je dirais que tu devrais plutôt déclarer une fonction |
Si on déclare une fonction c'est pour l'appeler dans la suite donc call
je regarde, les modifs et j'edite
Edit: c'est un carnage
Je ne sais pas par ou commencer...
bon d'abord on va prendre le bout de code qui fonctionne.
L'as-tu réellement écris ou as-tu seulement fait des copié/collé à droite à gauche car là, ca maqneu vraiment de cohérence
D'ou tires-tu l'idée de nommer ta variable qui indique le chemin nom
Comment esperes-tu relire après, si les variables ne décrivent pas ce qu'elles contiennent?
Ensuite tu commences par créer un excel, es tu sur qu'il n'existe pas déjà dans le dossier?
Redondance des variable Nomfichier=DestinationFichier
Une variable pour une info sinon on s'en sort plus
Tu crées une variable DestinationFichier =nom & "P37784.xls"
Pourquoi dans la suite refais-tu 2 fois cette concaténation?
tu me fais un
Code :
|
ca marche car tu es en VBA et tu coup le workbook qui est pris est celui dans laquelle la macro est contenue.
mais ou est l'interet de
Code :
|
Je ne connais rien en VBA mais il me semble illogique d'avoir ensuite besoin de Workbooks("P37784.xls" ).
Ensuite vis-à-vis de ça pourquoi
Code :
|
Ca c'est du vbs
En fait plus je lis, plus je me demande pourquoi tu fais une macro? .
J'ai l'impression que tu n'interviennes pas sur l'excel qui est ouvert pour lancer la macro?
t'es sur que c'est pas plutôt du vbs que tu devrais faire?
Ensuite pour la suite:
si tu fais une fonction tu ne changes quasiment rien au code qui marche pour un fichier:
Code :
|
tout ca non
c'est :
Code :
|
Le seul truc qui dépend de i c'est NomFichier
Code :
|
Marsh Posté le 10-08-2009 à 14:38:36
Tu as besoin d'information supplémentaire ?
Rappel : en gros je dois excuté autant de fosi que de nom ma procédure déja écrite qui marche ... en adaptant les noms des fichiers...
Marsh Posté le 10-08-2009 à 14:41:29
T'as essayé de stocker les chaines de caractères dans un tableau/collection pour les utiliser ensuite dans ta boucle For ?
Marsh Posté le 10-08-2009 à 14:45:33
Non ...j'ai jamais fait ca ... mais adapte un ex avec mon probleme , j'aimerais apprendre avec plaisir
Marsh Posté le 10-08-2009 à 14:51:30
Faut vraiment que tu t'achètes un bouquin de VBA et d'algorithme car sans connaissances je vois pas ce que tu vas pouvoir faire tout(e) seul(e).
Code :
|
Marsh Posté le 10-08-2009 à 14:59:59
ok donc tu ajoute plein d'objet dans un tableau , mais je vous pas en quoi ca devient plus simple , tu veux pas te pencher quelques minute sur le code que j'ai écris qui marche pas( le 2eme en haut ) et me dire tout ce qu'il cloche en admettant qu'il y est les fameux
Call mafonction P37784Call mafonction P37786
en te remerciant bcp
cdt
Marsh Posté le 10-08-2009 à 15:02:14
non mais oublie les Call. Ca marche aussi mais c'est une autre solution (que je trouve moins jolie, désolé xme ).
L'intérieur du For est l'intérieur du Do while que tu avais mis en changeant les i par CStr(each).
Marsh Posté le 10-08-2009 à 15:05:20
hein lol ?!
peux tu écrires plutot ce que tu dis dans le code , a mon niveau , la beauté , c'est pas trés important , vba me prendra avec tt ma laideur
mais promis des que je deviens un beau gosse du vba , je ferais des macro splendides^^
Marsh Posté le 10-08-2009 à 15:08:33
Non mais sois tu fais ma solution sois tu fais celle de xme. Les 2 fonctionnent mais faut choisir.
J'ai juste remplacer ta boucle do while par mon For c'est tout. C'est quoi que tu comprends pas ?
Marsh Posté le 10-08-2009 à 15:11:18
salut je viens enfin de finir d'éditer mon post
(désolé je suis tombé sur un mastermind sur le net, j'ai pas résister )
Marsh Posté le 10-08-2009 à 15:15:41
Deamon a écrit : T'as essayé de stocker les chaines de caractères dans un tableau/collection pour les utiliser ensuite dans ta boucle For ? |
yop j'y avais pensé également mais là vu de ou on part on va peut être faire simple
Car oui je suis d'accord le plus beau, d'après moi, faire un dico avec les différentes chaines de caracteres et appelé une fonction avec en parametre les valeurs du dico, mais cool on commence par la fonction
Ou alors j'ai pas compris et il a besoin de faire mumuse avec tout ces fichiers excel en même temp ou si j'ai bien compris il a juste besoin de les créer, de les editer et de les sauvegarder les uns à la suite des autres.
Marsh Posté le 10-08-2009 à 15:16:05
il est ou ton psot que j'attendais avec impatience lol ?
moi mon péché mignon c'est les echec
Marsh Posté le 10-08-2009 à 15:19:57
ben je sais pas peut être en dessus des tiens?
j'ai dit, j'ai édité.
c'est celui qui est vraiment plus long que d'habitude
foxley_gravity a écrit : il est ou ton psot que j'attendais avec impatience lol ? |
vu le code ton péché est une bombe sexuelle
Marsh Posté le 10-08-2009 à 15:28:51
petite info = la variable nom est le chemin d'acces , que l'utilisateur chosii auparavant avec un bouton ... désolé de pas l'avoir mis , et oui tous le caca du code ca vient de moi
Marsh Posté le 10-08-2009 à 15:37:44
_xme_ a écrit : vu le code ton péché est une bombe sexuelle |
Me suis retenu de faire une blague dessus moi.
Marsh Posté le 10-08-2009 à 15:42:47
Je dois vraiment ne pas écrire français
Citation : D'ou tires-tu l'idée de nommer ta variable qui indique le chemin nom |
alors je sais pas comme ça c'est mieux?
Citation : D'ou tires-tu l'idée de nommer ta variable qui indique le chemin "nom" |
donc oui j'avais compris je te faisais juste la remarque et même la repproche que si tu fais ça, c'est bien plus de boulot à lire, à relire et à entrenir.
Et puis au passage ça donne pas envie d'aider quand le code n'a pas de sens
Bon aussi conseil, faut aussi faire des pauses quand tu prog, histoire de laisser les idées décanter.
C'est vraiment pas magique l'info, c'est de la pratique
Donc j'ai quand même encore quelques questions:
Peux tu me récapituler le but de ton script?
dois tu avoir les différentes feuilles excel dans un même classeur ou dans des excel différent?
Deamon a écrit : |
Moi pas
Marsh Posté le 10-08-2009 à 15:54:38
ok récapitulons avant que je saute du 1er étage
l'utilisateur choisi un dossier , contenant toujours 7 fichier txt dont les noms sont invariables
la macro va venir les copier dans un fichier excel , lesconvertir en xls et les renommer ( même nom que les .txt sauf maitenant ca sera des .xls)
Marsh Posté le 10-08-2009 à 15:56:15
voici le nouveau code , dite moi si il vous convient ...
maisi il plante au niveau do while etc
merci encore xx
Code :
|
Marsh Posté le 10-08-2009 à 16:00:19
ne pas cliquer
Spoiler : Avant de sauter monte de quelques étages, histoire d'être sur. Sérieux si tu finis à l'hopistal, ça nous embêtes tous, pour toi t'es blessé pour nous euh comment dire t'es.... |
Bon ok alors on reprend du tout début
Citation : |
Est ce que c'est tout ce qu'il fait?
Pourquoi fais-tu celà par une macro. a quoi te sers l'excel que tu lances?
Edit : je viens de voir ton nouveau post
monte de 5 étage au moins s'il te plait
non sérieux, j'ai le choix entre "tu ne lis pas mes posts" ou "te ne comprends pas le français"
Je veux bien ne pas être clair parfois mais là, c'éjà la troisième fois que je te donne la solution sur le même bout de code
Citation :
|
donc par pitié fait moi au moins une boucle do while correcte
que tu n'ai pas compris pourquoi il ne faut pas faire une boucle do while, okai mais que tu la fasse tjs pas correctement...
En plus je t'ai mp en te disant que si tu as trop de comparaison il fallait faire une fonction annexe et uncase, je t'ai même quasiment donné cette fonction
Marsh Posté le 10-08-2009 à 16:06:05
heu , ben excel que je lance sers à rien ,c'est juste pour avori accés à usal form... lol en même temps je connais ...
mais seirieux , j'ai fais toutes les modfis que tu m'avais dit ... regarde bien ..
Marsh Posté le 10-08-2009 à 16:10:07
a oui merde lol j'ai oublié de modifié le while désolé .... désolé ,
Code :
|
Marsh Posté le 10-08-2009 à 16:11:19
non
tu as peut être changé le next en loop
mais tu n'a tjs pas écrire un do while correctment
les , ca se remplace par des or et surtout tu réécris à chaque fois la condition
Code :
|
Et pour la 4 ieme fois en VBS et donc je présume en VBA tu ne fais pas de comparaison de chaine avec un égale!!!!
Je te l'ai marqué en gras des ma première correction
Il y aune fonction pour ça StrComp
Alors soit tu me fais l'immense plaisir de me dire que je me trompe car ce que je te dis n'ai vrai qu'en VBS soit tu relis tout les post de moi et deamon et tu réfléchis
Ensuite si comme tu viens de me le dire ton Excel ne servait à rien, c'est pas mal de le dire dès le début.
Alors pour info ton code tu pouvais le faire en VBS.
L'avantage tu aurais choisi l'interface pour ma part j'utilise plus souvent une page internet qu'un classeur excel comme interface
Mais bon on s'arrete là j'ai pas encie de tout reprendre et de tout façon je ne le ferrais pas.
On reste en VBA même si c'est pas forcément le plus adapté.
En fait je viens de voir ça :
Citation : call i=P37784 |
tu te fous de moi?
pourquoi tu me copie le etc et que tu ne le remplace par correctement
Relis tout réfléchis, si tu change pas réellement ton prochain code, j'arrete
Marsh Posté le 10-08-2009 à 16:19:03
Deamon a écrit : Ca me désespère... |
non moi c'est plus desespoir là j'ai l'impression d'avoir quelqu'un qui se paye ma tête.
*je fais le lourd jusqu'à qu'on fasse mon boulot*
ben sans moi dans ce cas là
Marsh Posté le 10-08-2009 à 16:22:47
Ok les gars désolé je voulais pas vous blesser , je suis désolé d'avori été super lourd etc ..chacun à des domaines de prédilections , je suis une vrai daube en informatique , mais je suis bon en math et au echec
alors excuse moi , je vais éssaye de bien tout relire ,de tout comprendre etc , je vous proposerais demain mon travail , merci encore de votre aide ...
cdt
Marsh Posté le 10-08-2009 à 16:39:38
Il n'est pas question d'être une daube ou pas.
J'ai juste l'impression que tu ne cherches pas et dans ce cas, c'est sans moi.
Je bosse en paralelle, j'ai vraiment autre chose à faire que répondre tout les 10 min à une question
Donc c'est pour ça réfléchis
Je pense l'avoir dit suffisament
tu dois déclarer une fonction, je t'ai même donner la synthaxe déclararion
Ou est la fonction dans ton code?
Je t'ai dit qu'une fois déclaré, tu l'appelais
Cool tu as mis les Call comme je te l'avais dit -_-
à oui ca ser bcp sans fonction
et puis je ne sais pas ou tu as vu une affectation de variable dans mes call
bon voila ton code manque beaucoup trop de logique,
Je doute que tu l'ai écris, j'ai le choix entre un pompage du net ou un macro excel déjà faite.
Dans tout les cas, avant de vouloir modifier un code, il faut le comprendre, ce l'approprier et s'approprier la synthaxe.
Ca ne m'a clairement pas l'air d'être le cas ici
Donc bon travail
Ps: d'avance désolé si tu me trouve abrut mais là ...
non désolé je ne crois pas que tu es écris ce code.
Et surtout je ne crois pas que tu es ouvert une documentation VBS
Marsh Posté le 11-08-2009 à 09:48:19
Bonjour désolé encore pour hier ...
Je ne connaissais pas du tout call
"Pour appeler une procédure Sub depuis une autre procédure, tapez le nom de la procédure sans oublier les valeurs des arguments obligatoires. L'instruction Call n'est pas obligatoire, mais si vous l'utilisez, vous devez mettre les éventuels arguments entre parenthèses."
Code :
|
Marsh Posté le 11-08-2009 à 10:09:11
non mais j'ai résolu pas mal de probleme , remplacer le bouton par function...
type argument byref incompatible pour CommandButton1_Click(P37784)
Marsh Posté le 11-08-2009 à 10:57:44
Call CommandButton1_Click(P37784)
--> P37784 est une chaine de caractères ! Donc il faut mettre "P37784"
Marsh Posté le 11-08-2009 à 11:11:28
Bon ca commence à ressembler à quelquechose
Comme je l'ai dit depuis le début je ne fais que du vbs, il faut adapter mes codes.
Bon donc call n'est pas obligatoire, et je viens de vérifier le StrComp n'est pas obligatoire en VBA, j'aurais appris un truc, mais bon ça m'a pris 2sec à vérifier -_-
Bon sinon change
Code :
|
par
Code :
|
et
Code :
|
par
Code :
|
Comme dit plus haut les variables c'est fait pour qu'on s'en serve
Ensuite je me pose sérieusement la question si ton
Code :
|
marche
As-tu essayé ensuite d'ouvrir tes Excel car je vois pas quand le système réencoderait les données au format excel
Ensuite après avoir fait la modif de demaon, est-ce que ca marche et si non ou ca plante?
Marsh Posté le 11-08-2009 à 11:37:12
ok merci de toute ton aide , tu vois je commence à y arriver , attend un peu le prochain windows ,
FileCopy SourceFichier, NomFichier marche ...
à vaincre sans péril on triumphe sans gloire ..^^ imaginez un peu la votre
Code :
|
Marsh Posté le 11-08-2009 à 11:45:48
Et ca marche?
Marsh Posté le 11-08-2009 à 15:30:25
Re désolé du retard , les nouvelles du front sont moyennes
donc il arrive à ouvrir le fichier à convertir , le copie dans le bon répertoire mais il ne le convertit pas et m'affiche erreur 1004 erreur d'exécution
merci de votre aide
Marsh Posté le 10-08-2009 à 10:24:47
Bonjour ,
J'ai un petit probleme ... j'ai un grand nobmre d'instruction à longue à réiterer .. : plusieuer fiche txt a convertir en xls .
Ma macro cré un fichier xls , copie le fichier txt dedans , le converti , puis renomme le fichier xls avec le même nom du fichier txt qu'elle vient de convertir...
J'arrive à le faire pour 1 fichier mais quand j'essaye avec des boucles , je me perds un peu ... merci de m'aider
Voici le fichier qui marche pour 1 document
Voci le code que j'essaye de faire marche : j'aimerais convertir 7 documents avec des noms différents ( les i )
merci d'avance cordialement