Problème d'ecriture dans un nouveau document [VBA][Excel] - VB/VBA/VBS - Programmation
Marsh Posté le 31-07-2008 à 20:31:45
ReplyMarsh Posté le 31-07-2008 à 20:33:11
galopin01 a écrit : bonjour, |
...Oups ! Sorry... la suite dans quelques instants !...
Marsh Posté le 31-07-2008 à 20:50:44
Bonjour,
je ne vais pas tout détailler car je n'ai sans doute pas tout compris dans ce que tu voulais faire, mais la source de tes problèmes est sans doute dans la ligne 22 et leur correspondant ligne 38 et 53.
Il est probable que tu veux stocker les valeurs des cellules correspondantes mais ta manière de faire est un peu cavalière...
Il faut faire
var1 = range("A1" ) (*1)
var2 = range("J1" ) (*1)
De même (pour les même raisons) ton Rfc (et les instructions qui en découlent lignes 41 et 56) me semble aussi incohérents...
Bon tes variables sont pas trop détaillées et tes Activate/Select font un peu "doigt dans le nez", mais à la limite ça empêche pas de fonctionner.
Par contre les observations précédentes sont déterminantes.
Nota : (*1) j'ai comme un doute... (ta notation est incompréhensible) Si tu veux juste copier les colonnes A et J : Ok
Sinon si tu veux copier toute les colonnes entre A et J, là c'est une autre histoire... Il faut préciser...
A+
Marsh Posté le 31-07-2008 à 22:46:21
Merci pour ta réponse.
En fait je veux bien copier toute la ligne. Mon code n'est pas commenté, je le ferai demain.
En fait ce code fonctionne bien quand je veux ecrire dans un onglet dans le classeur ayant lancé la macro mais lorsque je souhaite creer 2 nouveaux classeur et ecrire dedans, ca ne fonctionne pas. J'ai pas de bugs, les classeurs sont bien crée mais rien est ecrit dedans.
Il me semble que c'est l'activation du classeur qui deconne ou la selection de la feuille
Code :
|
Marsh Posté le 01-08-2008 à 07:51:57
Non.
Ce sont bien les lignes que je t'ai citées qui posent problèmes mais
enTete = Range("A1", "J1" )
ainsi que son inverse
Range("A1", "J1" ) = enTete
de même que
Rfc = Range("A" & i, "J" & i)
et
Range("A" & firstline, "J" & firstline) = Rfc
ces construction sont impropres.
Je n'ai pas le temps de détailler plus ce matin car je vais au boulot, mais regarde de ce coté là.
A+
Marsh Posté le 01-08-2008 à 09:50:41
en fait je vois pas où est mon erreur
j'ai edité mon premier post pour y inclure les commentaire.
Lorsque j'utilise les fonctions que tu m'as cité pour copier dans une nouvelle feuille ca fonctionne mais dans un nouveau classeur non
Marsh Posté le 01-08-2008 à 09:55:30
Effectivement, je n'ai meme pas expliqué ce que je souhaitai faire.
En fait je veux lancer la macro dans un fichier excel contenant plusieurs lignes. Je veux verifier si la ligne contient un mot et en fonction de ce que je trouve, je veux copier cette ligne soit dans un nouveau fichier que j'ai créé soit dans un deuxieme nouveau fichier que j'ai créé egalement
Marsh Posté le 01-08-2008 à 10:20:26
éviter de jouer avec des range.select() et workbook.activate().
pour les raisons suivantes :
1/ excel se met à afficher rapidement plusieurs documents dans tous les sens, et ça fait peur à l'utilisateur (sans compter que ça divise par 20 la vitesse de la macro). dans le meilleur des cas, l'utilisateur devient chèvre après une crise d'épilespsie, et dans le pire des cas il éteinds tout avant d'aller vomir.
2/ quand on lance un traîtement qui peut durer du temps, on aime bien faire autrechose (réserver son billet d'avion pour les vacances, faire une partie de solitaire, bosser sur autrechose, etc.) avec des fenêtres qui prennent lefocus sans arrêt, c'est impossible et particulièrement gonflant pour l'utilisateur qui n'a d'autre solution que de partir en pause café.
3/ si par malheur l'utlisateur clique sur une fenêtre, fait ctrl+tab pour en afficher une autre, ou ouvre une nouvelle session excel, la macro va commencer à faire n'importe quoi, genre lui pourrir un fichier qui n'a rien à voir avec la macro, écrire n'importe quoi n'importe où, etc.
bref, objectivement, le seul intérêt que je vois à ça, c'est que c'est ce que génère Excel quand on enregistre une macro...
pour copier un range d'un workbook à un autre, on fait ça :
Code :
|
Marsh Posté le 01-08-2008 à 10:22:21
et entre la ligne 6 et la ligne 8, l'utilisateur peut faire tout ce qu'il veut. le workbooks.add() a effectivement fait apparaître le nouveau classeur (on doit pouvoir le cacher), mais ensuite la macro se moque éperduement de l'état des fenêtres ou de ce qu'est en train de faire l'utilisateur.
Marsh Posté le 01-08-2008 à 17:28:49
Bonsoir,
la macro revue et corrigée :
Code :
|
Remarque: il n'y a pas d'activation, pas de select... J'ai utilisé un Array mais si tu ne sais pas ce que c'est, on peut aussi faire un copier/coller façon MagicBuzz.
A+
Marsh Posté le 02-08-2008 à 07:15:56
Merci beaucoup galopin. C'est beaucoup plus propre que mon code
Marsh Posté le 31-07-2008 à 14:55:48
Bonjour,
J'ai voulu ecrire une macro qui trie les données d'un fichier excel et qui copie dans 2 fichiers excel differents
Cependant, je crée bien les deux fichiers mais je n'arrive pas à ecrire dessus. Je ne vois pas ou est mon erreur
Merci de votre aide.
Je suis debutante dans ce langage et je ne trouve pas de bon tutoriels dessus sur internet. Si quelqu'un a la perle rare, je suis preneuse.
Message édité par fatloui le 01-08-2008 à 09:49:04