numéro de feuille variable [Résolu] - VB/VBA/VBS - Programmation
Marsh Posté le 26-10-2005 à 18:40:40
bonjour,
ça doit être ça que tu cherches ?
Sub Test()
Sheets("Feuil" & n).Select
End Sub
D'autre part... je n'ai rien vérifié mais à vu de nez cette syntaxe me parait curieuse :
Windows("classeur2.feuille1" ).Activate
Si ça marche tant mieux... sinon
Windows("classeur2" ).Activate
Sheets("Feuil1" ).Activate me parait mieux...
Sous cette réserve j'écrirais ton truc comme ça :
Code :
|
Mais je n'ai pas testé... Teste, si tu comprends, corrige, éventuellement j'ai pu semer un bug mais sur le fond ce serait mieux comme ça. En cas de pb, tu connais l'adresse...
A+
Marsh Posté le 27-10-2005 à 14:15:49
Merci pour la simplification de mon code précédent. En fait, j'ai juste enlevé la ligne 20. Sinon tout est OK
Concernant la duplication de classeur2.feuille1 en autant de feuilles 2, 4, 6... que dans le classeur 1, j'ai trouvé le code ci-dessous. Mais il ne fonctionne pas. Le débogueur me surligne la ligne For each...
Que faire mes pauvres amis...que faire....
Code :
|
Bon voilà où j'en suis, je cherche, je cherche mais la syntaxe est parfois compliquée à trouver.
Merci de votre aide
Marsh Posté le 27-10-2005 à 16:48:16
Sur la syntaxe de foreach :
For Each element In Collection_d_elements
' là tu utilises ton element
Next
soit ici
|
Marsh Posté le 27-10-2005 à 18:14:57
J'ai essayé de tourner le problème dans l'autre sens.
Bon je sais ce n'est pas fini, ça ne marche pas.
Mais je cherche.......
Code :
|
PS: feuille1name=OFFRE
Merci
Marsh Posté le 27-10-2005 à 23:44:07
bonjour,
il faut te servir un peu de l'aide de VBA tu poses ton curseur sur une expression, tu lis l'aide, tu regarde les exemples et tu récupères la syntaxe...
l'aide de ChDir dit :
Change le répertoire ou le dossier courant or toi tu lui donne à crouter du classeur2
désolé mais là je ne comprend pas ce que tu veux faire.
dans le même genre de syntaxe tordue :
Workbooks.Open Filename:="F:classeur2.feuille1" 'tu peux oublier...
Filename c'est (le nom du classeur) "classeur2.xls" (si j'ai bien compris...)
normalement, à moins de compliquer les choses pour le plaisir, le débutant lambda n'éprouve pas le besoin d'aller ouvrir un classeur dans un autre répertoire. (mais diverses contraintes peuvent t'y obliger) si c'est le cas il faut t'expliquer mieux.
Je vais prendre pour hypohèse que ton classeur "A.xls" et "B.xls" sont dans le même répertoire (dossier) : si c'est le cas pas besoin de ChDir
Code :
|
Cette macro a copié la "Feuil1" de "B.xls" avant la "Feuil2" de A.xls
maintenant si tu veux copier une zone précise, ou faire du PasteSpecial, c'est un poil différent.
Il faut que tu précises les noms des 2 classeurs le nom de chaque feuille et la zone à copier, la cellule de destination et le type de collage...
Après tu auras plus qu'a incrémenter tes noms de feuille avec variable
Si tu peux m'expliquer un peu mieux ces paragraphes, ce serait bien... par ce que là je décode pas ton concept de base :
(on dira classeur2.feuille1)...
et puis :
en dupliquant classeur2.feuille1(vierge) autant de fois que j'ai de feuille system-n ???
vala.
A+
Marsh Posté le 03-11-2005 à 14:32:10
bonjour,
Je pense qu ilvaut mieux reprendre le truc depuis le début.
Voila, dans mon entreprise on a un logiciel qui permet de faire des config de pc. De ce logiciel, on peut faire un extract vers excel. Le classeur obtenu s'ouvre sous le nom classeur1 ou 2 ou 3 (suivant si des classeurs excel ont déjà été ouverts ou pas) et il faut activer les macros pour qu 'il s'ouvre comme il faut. Les feuilles de ce classeur sont nommées, dans l'ordre, overview, system-1, hints-1, system-2, hints-2, system-n, hints-n...., planning.
Je dois copier les données de chaque feuille system-n dans un autre classeur excel, appelé MATRICE AO.xls, afin de pouvoir établir nos calculs de marge. Ce classeur possède par défaut les feuilles nommées, dans l'ordre, OFFRE, OFFRE 2, OFFRE AVEC REMISE, OFFRE AVEC ENTETE, SYNTHESE, PRESTATIONS, PLANNING. Je dois copier les feuilles system-n sur les feuilles OFFRE, OFFRE 2, ....OFFRE n (donc je dois dupliquer la feuille OFFRE autant de fois que j'ai de feuille system-n)
voici le code complet (j'enlève mes abréviations, je vois que ça perturbe ) pour sélectionner et copier mon tableau:
Code :
|
Là, je cherche comment dupliquer ma feuille OFFRE dans mon classeur MATRICE AO.xls:
J'ai fait un autre test de code, mais je ne sais pas par quel bout prendre le problème!!!
Code :
|
En fait, je n'arrive pas à faire n copies de ma feuille OFFRE.
J'espère que maintenant le problème est plus clair...
sinon je suis toujours à votre disposition.....
Merci de votre attention
Marsh Posté le 05-11-2005 à 17:11:07
Pourquoi avoir k=n/2 alors que tu ne t'en sert pas dans la fonction ????
Sheets("OFFRE" ).Copy
Sheets("OFFRE" ).Paste before:=Sheets(n ou k) la je comprendrais mieux !
Marsh Posté le 05-11-2005 à 19:00:20
bonsoir,
Non ce n'est toujours pas trop clair car tu mélanges les sujets :
dans la première macro : Si j'ai bien compris...
Code :
|
Bien sur tu remplaces le "blabla"...
Dans la deuxième macro ou tu essaies de copier une feuille j'ai pas trop compris ton histoire de k et de n, mais tu dois savoir...
Voilà la syntaxe générale :
Code :
|
C'est pareil j'ai pas l'impression que le ChDir serve à quelque chose.
Ok ?
Marsh Posté le 07-11-2005 à 15:31:49
Fred_l a écrit : Pourquoi avoir k=n/2 alors que tu ne t'en sert pas dans la fonction ???? |
c'est parce que je ne voyais pas comment faire n copies.
Marsh Posté le 07-11-2005 à 15:48:14
pour la deuxieme partie c exactement ce que je voulais faire!!!!
Hormis, d'où mon histoire de n et de k, un peu compliquée je vous l'avoue , c'est que là, j'ai 5 copies de ma feuille OFFRE (si je reprends ton code).
Alors que je voulais faire autant de copies de ma feuille OFFRE que j'ai de feuilles system-n.
ex: si mon fichier possède les feuilles system-1, system-2 alors faire 2 copies
et si mon fichier possède system-1, system-2, system-3, system-4 alors faire 4 copies
Voyez le genre messieurs, dames..
Mais bon, au pire, je peux toujours faire 10 copies (c'est rare que j'ai autant de config) et puis je supprimerais mes feuilles en trop. Mais là, ce n'est plus du jeu, si on automatise pour désautomatiser ailleurs....
Ah mais non j'y pense!!! Du coup faut que je trouve pour le copier coller, parce que sinon ça va tout me copier sur la même feuille!!!
Pffff, je m'en sortirais jamais, heureusement que c'est pour aller plus vite après, parce que là, limite j'ai l'impression de perdre du temps.
Bon ben j'y retourne, il y a encore du travail!!!
Marsh Posté le 07-11-2005 à 17:39:22
Courage cendrine, je pense avoir compris ce que tu veux faire.
Regarde si cette macro fonctionne comme tu veux:
Code :
|
@+
Marsh Posté le 17-11-2005 à 17:31:20
Merci beaucoup Watashi de te pencher sur mon cas, en plus à la lecture du code que tu proposes, je vois que tu as bien compris ce que je recherche.
Malheureusement ton code ne marche pas , ou alors c'est moi qui ne fais pas comme il faut. Le débogueur me surligne la première ligne en me disant "erreur 9, l'indice n'existe pas dans la sélection"
Alors, j'ai essayé quelques bidouilles, quelques manipulations; mais rien n'y fait!!!
J'avais une question: à quoi correspond le "6" et le "1" dans
If Left(Workbooks("Classeur1.xls" ).Sheets(f).Name, 6) = "system" Then
et dans
ActiveSheet.Name = "OFFRE" & Right(WB1.Sheets(f).Name, 1)
????
Merci bien
PS: je sais que j'ai mis du temps à répondre mais je fais ça quand j'ai un moment de libre et la semaine dernière je n'en ai eu aucun. Rassurez-vous je n'attends pas que l'on me donne la réponse!!!
Marsh Posté le 17-11-2005 à 17:45:45
bonsoir,
"Classeur1.xls" ne fait pas partie de la collection Workbooks tant que le classeur n'est pas enregistré : Il faut enregistrer ton "Classeur1.xls" avant de lancer la macro.
A+
Marsh Posté le 17-11-2005 à 17:48:42
Salut cendrine
Cendrine49 a écrit : Malheureusement ton code ne marche pas , ou alors c'est moi qui ne fais pas comme il faut. Le débogueur me surligne la première ligne en me disant "erreur 9, l'indice n'existe pas dans la sélection". |
Tu as bien placé ce boût de code dans une macro ? Je tai pas déclaré les variables non plus. Je t'avais donné que le boût de code utile...
Code :
|
Ensuite tu as bien modifié le nom des classeurs ? Ils sont bien ouverts ?
Cendrine49 a écrit : J'avais une question: à quoi correspond le "6" et le "1" dans |
Le 6 et le 1 définissent le nombre de caractères
pour tes feuilles (system-1) par exemple Left(Workbooks("Classeur1.xls" ).Sheets(f).Name, 6) donne "system"
bon courage et si ton code plante toujours vois si tu peux pas nous copier l'intégralité de la macro ce sera peut être plus simple.
Marsh Posté le 21-11-2005 à 16:46:51
Bonjour à tous!!
Bon, eh bien, je désespère.....
Voila où j 'en suis: j'ai fait quelques modif à ton code Watashi, voila ce que ca donne:
Code :
|
Et le résultat:
Pas de message d'erreur
ouverture de Matrice AO.xls
Pas de copie de feuilles
J'ai beau tourner le truc dans tous les sens...
Bref!
Autre soucis, si je combine, ton code et mon code pour la manip suivante, ca donne:
Le code est dans les posts précedents.
Mais le résultat est plutôt inattendu:
J'ai bien un copier coller mais la sélection prend (A24;C28) et (D24;D28) uniquement!!!
Où sont passées les lignes suivantes????
J'ai essayé de modifier ton code avec un For Each Next, ça ne marche pas non plus...
Est-ce que ça marche des fois l'informatique????
A plus
Marsh Posté le 21-11-2005 à 17:13:43
Salut cendrine
J'ai un peu du mal à savoir de quel code tu parle en premier et comment ils se lancent les uns après les autres, je ne vois pas à partir du code d'où viens le problème, les 2 codes semblent êter bon... Je te donnes mon mail en MP si tu veux tu m'envois tes 2 classeurs. Je les regarderais volontier.
@+
Marsh Posté le 22-11-2005 à 15:02:03
Voili, voilou,
Je tiens à remercier Watashi qui a bien voulu (et pu!!) prendre du temps sur mon soucis.
La macro fait exactement ce que je voulais, c'est vraiment le top du top.
Pour ne pas laisser tout le monde sur sa faim, je vous mets le code de watashi:
Code :
|
Je n'ai pas d'autres mots pour exprimer ma joie.
MERCI, résume bien tout ça.
J'essaierais avec l'étendue de mes modestes compétences de renseigner d'autres personnes.
Encore une fois merci à tous!!
Marsh Posté le 22-11-2005 à 15:13:22
Tu n'as plus qu'à éditer le titre de ton premier post avec résolu
bon courage
Marsh Posté le 26-10-2005 à 11:30:33
Bonjour,
Je vous explique mon soucis:
Ce que je veux faire:
j'ai un classeur excel d'ouvert(on dira classeur1), je veux sélectionner un tableau(à taille variable) sur la feuille 2 nommée system-1 et le coller dans un autre classeur excel(on dira classeur2.feuille1). Cette manip', j'ai réussi à la faire en baladant sur les forums...(et en réflechissant bien sûr )
Le problème:
mon classeur1 peut comporter plusieurs feuilles system-n(en position feuille2, 4, 6, 8, etc) et je veux coller chaque feuille system-n dans mon classeur2 en duplicant classeur2.feuille1(vierge) autant de fois que j'ai de feuille system-n.
Le code que j'ai déjà:
J'ai essayé en faisant:
Dim n As Integer
Dim k As integer
n=2*k
Sheets("Feuiln" ).Select
Mais ça ne marche pas (
Je tiens à préciser que je suis débutante en programmation et donc en VBA, mais que j'essaie de comprendre comment cela fonctionne.
Merci de votre aide
Message édité par gilou le 22-11-2005 à 15:33:58