numéro de feuille variable [Résolu]

numéro de feuille variable [Résolu] - VB/VBA/VBS - Programmation

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à:
 

Code :
  1. Sub select_config_copy_matrice()
  2. 'aller sur la première cellule vide en bas du tableau
  3.     numcolonne = 3
  4.     numligne = 28
  5.     Cells(numligne, numcolonne).Select
  6. 'tant que la cellule n'est pas vide se déplacer vers le bas
  7.     While ActiveCell.Value <> ""
  8.     numligne = (numligne + 1)
  9.     Cells(numligne, numcolonne).Select
  10.     Wend
  11. 'sélection du tableau
  12.     Range("A24" & ":C" & numligne).Select
  13. 'copie du tableau
  14.     Application.CutCopyMode = False
  15.     Selection.Copy
  16.     ChDir "F:\Classeur2"
  17.     Workbooks.Open Filename:="F:\classeur2"
  18. 'collage des valeurs du tableau dans classeur2
  19.     Range("a5" ).Select
  20.     Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=False
  21. 'sélection tarifs
  22.     Windows("classeur1" ).Activate
  23.     Range("D24" & ":D" & numligne).Select
  24. 'copie des tarifs
  25.     Application.CutCopyMode = False
  26.     Selection.Copy
  27.     Windows("classeur2.feuille1" ).Activate
  28. 'collage des tarifs dans classeur2.feuille1
  29.     Range("K5" ).Select
  30.     Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=False
  31. End Sub


 
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
Reply

Marsh Posté le 26-10-2005 à 11:30:33   

Reply

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 :
  1. Sub select_config_copy_matrice()
  2. 'aller sur la première cellule vide en bas du tableau
  3.     numcolonne = 3
  4.     numligne = 28
  5. 'tant que la cellule n'est pas vide ajouter 1
  6.     While Cells(numligne, numcolonne) <> ""
  7.     numligne = (numligne + 1)
  8.     Wend
  9. 'copie du tableau
  10.     Range("A24" & ":C" & numligne).Copy
  11.     ChDir "F:Classeur2"
  12.     Workbooks.Open Filename:="F:classeur2"
  13. 'collage des valeurs du tableau dans classeur2
  14.     Range("a5" ).PasteSpecial Paste:=xlPasteValues
  15. 'copie des tarifs
  16.     Windows("classeur1" ).Activate
  17.     Range("D24" & ":D" & numligne).Copy
  18. 'copie des tarifs
  19.     Windows("classeur2" ).Activate
  20.     Sheets("Feuil1" ).Activate
  21. 'collage des tarifs dans classeur2.feuille1
  22.     Range("K5" ).PasteSpecial Paste:=xlPasteValues
  23.     Application.CutCopyMode = False
  24. End Sub

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+


---------------
roger
Reply

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 :
  1. Sub copie_feuille()
  2.     Dim Feuille As Worksheet
  3.     Dim n As Integer
  4.     Dim k As Integer
  5.     n = 2 * k
  6.     k = k + 1
  7.         For Each Feuille In Worksheet
  8.         Sheets("Feuil" & n).Count
  9.         Next
  10.     Sheets("classeur2" ).Select
  11.     Sheets("classeur2.feuille1" ).Copy before:=Sheets(2)
  12. End Sub


 
Bon voilà où j'en suis, je cherche, je cherche mais la syntaxe est parfois compliquée à trouver.
 
Merci de votre aide

Reply

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
 


For Each Feuille In Application.Worksheets
     Debug.Print Feuille.Name       ' par exemple
Next


 
 

Reply

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 :
  1. Sub copie_feuille()
  2.     Dim k As Integer
  3.     Dim n As Integer
  4.     n = ThisWorkbook.Sheets.Count
  5. ChDir "F:\classeur2"
  6. Workbooks.Open Filename:="F:\classeur2.feuille1"
  7.         k = n / 2
  8.         Sheets("OFFRE" ).Copy
  9.         Sheets("OFFRE" ).Paste before:=Sheets(2)
  10. End Sub


 
 
PS: feuille1name=OFFRE
Merci

Reply

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 :
  1. Sub Test()
  2. Workbooks.Open Filename:="A.xls"
  3. Workbooks.Open Filename:="B.xls"
  4. 'les deux classeurs sont ouverts
  5. 'Après le problème est de savoir ce que tu veux faire
  6. 'du Paste ou
  7. 'du PasteSpécial ?
  8. 'si c'est du Paste ça s'écrit:
  9. Sheets("Feuil1" ).Copy Before:=Workbooks("A.xls" ).Sheets("Feuil2" )
  10. End Sub


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+


---------------
roger
Reply

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 :
  1. Sub select_config_copy_matrice()
  2. 'aller sur la première cellule vide en bas du tableau
  3.     numcolonne = 3
  4.     numligne = 28
  5. 'tant que la cellule n'est pas vide ajouter 1
  6.     While Cells(numligne, numcolonne) <> ""
  7.     numligne = (numligne + 1)
  8.     Wend
  9. 'copie du tableau
  10.     Range("A24" & ":C" & numligne).Copy
  11.     ChDir "F:\Mes Documents SENAS CENTRAL\ADMINISTRATIF\BOAMP\AO MODE D'EMPLOI\Matrice"
  12.     Workbooks.Open Filename:="F:\Mes Documents SENAS CENTRAL\ADMINISTRATIF\BOAMP\AO MODE D'EMPLOI\Matrice\MATRICE AO.xls"
  13. 'collage des valeurs du tableau dans classeur2
  14.     Range("a5" ).PasteSpecial Paste:=xlPasteValues
  15. 'copie des tarifs
  16.     Windows("classeur1" ).Activate
  17.     Range("D24" & ":D" & numligne).Copy
  18. 'copie des tarifs
  19.     Windows("MATRICE AO.xls" ).Activate
  20. 'collage des tarifs dans classeur2.feuille1
  21.     Range("K5" ).PasteSpecial Paste:=xlPasteValues
  22.     Application.CutCopyMode = False
  23. End Sub


 
 
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 :
  1. Sub copie_feuille()
  2.     Dim k As Integer
  3.     Dim n As Integer
  4.     n = ThisWorkbook.Sheets.Count
  5. ChDir "F:\Mes Documents SENAS CENTRAL\ADMINISTRATIF\BOAMP\AO MODE D'EMPLOI\Matrice"
  6. Workbooks.Open Filename:="F:\Mes Documents SENAS CENTRAL\ADMINISTRATIF\BOAMP\AO MODE D'EMPLOI\Matrice\MATRICE AO.xls"
  7.         k = n / 2
  8.         Sheets("OFFRE" ).Copy
  9.         Sheets("OFFRE" ).Paste before:=Sheets(2)
  10. End Sub


 
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

Reply

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 !
 
 
 

Reply

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 :
  1. Sub test()
  2. numligne = Cells(28, 3).End(xlDown)(2).Row   'plus efficace
  3. Range("A24" & ":C" & numligne).Copy
  4. 'Je n'ai pas l'impression que le ChDir serve à quelque chose
  5. fichier = "F:\Mes Documents SENAS CENTRAL\ADMINISTRATIF\"
  6. fichier = fichier & "BOAMP\AO MODE D'EMPLOI\Matrice\MATRICE AO.xls"
  7. Workbooks.Open Filename:=fichier
  8. Worksheets("blabla" ).Activate   '(il faut d'abord
  9. 'activer la feuille cible avant de faire le collage)
  10. Range("a5" ).PasteSpecial Paste:=xlPasteValues
  11. Windows("classeur1" ).Activate
  12. Range("D24" & ":D" & numligne).Copy
  13. 'copie des tarifs
  14. Windows("MATRICE AO.xls" ).Activate
  15. 'collage des tarifs dans classeur2."blabla"
  16. Range("K5" ).PasteSpecial Paste:=xlPasteValues
  17. Application.CutCopyMode = False
  18. End Sub

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 :
  1. Sub copie_feuille()
  2. For i = 1 To 5
  3. Sheets("OFFRE" ).Copy before:=Sheets(2)
  4. Sheets(2).Name = "OFFRE" & i
  5. Next
  6. End Sub


C'est pareil j'ai pas l'impression que le ChDir serve à quelque chose.
Ok ?

Reply

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 ????
 
Sheets("OFFRE" ).Copy  
Sheets("OFFRE" ).Paste before:=Sheets(n ou k) la je comprendrais mieux !


 
c'est parce que je ne voyais pas comment faire n copies.

Reply

Marsh Posté le 07-11-2005 à 15:31:49   

Reply

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 :sleep: , 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!!!

Reply

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 :
  1. For f = 1 To Workbooks("Classeur1.xls" ).Worksheets.Count
  2.      If Left(Workbooks("Classeur1.xls" ).Sheets(f).Name, 6) = "system" Then
  3.           Workbooks("Classeur2.xls" ).Activate
  4.           Sheets("OFFRE" ).Select
  5.           Sheets("OFFRE" ).Copy after:=Sheets(2) 'à toi de choisir la position befor marche aussi
  6.           ActiveSheet.Name = "OFFRE" & Right(WB1.Sheets(f).Name, 1) 'j'ai mis ton numéro après system en considérant qu'il n'y a qu'un chiffre
  7.      Else
  8.      End If
  9. Next f


@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

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  :cry: , 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!!! :pt1cable:  
 
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  :sleep: 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!!!  ;)

Reply

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+


Message édité par galopin01 le 17-11-2005 à 17:52:16
Reply

Marsh Posté le 17-11-2005 à 17:48:42    

Salut cendrine

Cendrine49 a écrit :

Malheureusement ton code ne marche pas  :cry: , 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 :
  1. Sub FeuilleSystem()
  2. Dim f
  3. 'Copie de la feuille offre
  4. f=1
  5. For f = 1 To Workbooks("Classeur1.xls" ).Worksheets.Count
  6.      If Left(Workbooks("Classeur1.xls" ).Sheets(f).Name, 6) = "system" Then
  7.           Workbooks("Classeur2.xls" ).Activate
  8.           Sheets("OFFRE" ).Select
  9.           Sheets("OFFRE" ).Copy after:=Sheets(2)
  10.           ActiveSheet.Name = "OFFRE" & Right(WB1.Sheets(f).Name, 1)
  11.      Else
  12.      End If
  13. Next f
  14. End Sub

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  
If Left(Workbooks("Classeur1.xls" ).Sheets(f).Name, 6) = "system" Then  
et dans
ActiveSheet.Name = "OFFRE" & Right(WB1.Sheets(f).Name, 1)"

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.


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 21-11-2005 à 16:46:51    

Bonjour à tous!!
 
Bon, eh bien, je désespère..... :cry:  
Voila où j 'en suis: j'ai fait quelques modif à ton code Watashi, voila ce que ca donne:
 

Code :
  1. Sub matrice_AO()
  2. ' ouverture du fichier MATRICE AO.xls
  3.     Workbooks.Open Filename:="F:\Mes Documents SENAS CENTRAL\ADMINISTRATIF\BOAMP\AO MODE D'EMPLOI\Matrice\MATRICE AO.xls"
  4. ' autant de copies de la feuille OFFRE que j'ai de feuilles system-n
  5.     Windows("Classeur1.xls" ).Activate
  6.         Dim f
  7. 'Copies de la feuille offre
  8.         f = 1
  9.         For f = 1 To Workbooks("Classeur1.xls" ).Worksheets.Count
  10.              If Left(Workbooks("Classeur1.xls" ).Sheets(f).Name, 6) = "system" Then
  11.               Workbooks("MATRICE AO.xls" ).Activate
  12.               Sheets("OFFRE" ).Select
  13.               Sheets("OFFRE" ).Copy before:=Sheets(2)
  14.               ActiveSheet.Name = "OFFRE" & Right(Workbooks("MATRICE AO.xls" ).Sheets(f).Name, 1)
  15.              Else
  16.              End If
  17.         Next f
  18. End Sub


 
 
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????  :pt1cable:  
 
A plus

Reply

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.
 
@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

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. :bounce:  
Pour ne pas laisser tout le monde sur sa faim, je vous mets le code de watashi:
 

Code :
  1. 'Déclaration de tes variables en public pour les 2 classeurs
  2. 'comme ça elle sont figées pour tes macros
  3. Public WbA As Workbook, CheminA
  4. Public WbB As Workbook, CheminB
  5. 'Macro à lancer pour l'exécution
  6. Sub lancement()
  7. 'Tes variables
  8.      Dim Wk As Workbook, Op
  9. 'Définir les classeurs
  10.      Workbooks("Traitement AO.xls" ).Activate
  11.      CheminA = Sheets(1).Range("B8" ).Value
  12.      CheminB = Sheets(1).Range("B9" ).Value
  13. 'Vérifier que Wba est ouvert sinon ouvrir
  14.      Op = 0
  15.      For Each Wk In Workbooks
  16.           If Wk.FullName = CheminA Then Op = 1: Set WbA = Wk
  17.      Next
  18.      If Op = 0 Then
  19.           Workbooks.Open Filename:=CheminA
  20.           Set WbA = ActiveWorkbook
  21.      End If
  22. 'Vérifier que Wbb est ouvert sinon ouvrir
  23.      Op = 0
  24.      For Each Wk In Workbooks
  25.           If Wk.FullName = CheminB Then Op = 1: Set WbB = Wk
  26.      Next
  27.      If Op = 0 Then
  28.           Workbooks.Open Filename:=CheminB
  29.           Set WbB = ActiveWorkbook
  30.      End If
  31. 'lancement de la macro copiant les plages sur une feuille offre
  32.      Call MiseEnPlaceOffres
  33. End Sub
  34. 'Macro pour le traitement
  35. Sub MiseEnPlaceOffres()
  36. 'Tes variables
  37. Dim f As Integer, Desti As Worksheet, NumLigne
  38. 'Mise en place de la boucle sur les feuilles du classeur 1
  39. For f = 1 To WbB.Worksheets.Count
  40.      If Left(WbB.Worksheets(f).Name, 6) = "System" Then
  41.             WbA.Activate
  42.             Sheets("OFFRE" ).Select
  43.             Sheets("OFFRE" ).Copy after:=Sheets(Worksheets.Count - 3)
  44.             ActiveSheet.Name = "OFFRE -" & Right(WbB.Sheets(f).Name, 1)
  45.             Set Desti = ActiveSheet
  46.             WbB.Sheets(f).Activate
  47.             NumLigne = Cells(28, 1).End(xlDown).Row
  48.             'copie/colle plage A24:Cnumligne sur A5
  49.             WbB.Sheets(f).Activate
  50.             Range("A24:C" & NumLigne).Select
  51.             Selection.Copy
  52.             Desti.Activate
  53.             Range("A5:C" & (NumLigne - 24 + 5)).PasteSpecial _
  54.                Paste:=xlPasteValues
  55.             Application.CutCopyMode = False
  56.             'copie/colle plage D24:Dnumligne sur K5
  57.             WbB.Sheets(f).Activate
  58.             Range("D24:D" & NumLigne).Select
  59.             Selection.Copy
  60.             Desti.Activate
  61.             Range("K5:K" & (NumLigne - 24 + 5)).PasteSpecial _
  62.                Paste:=xlPasteValues
  63.             Application.CutCopyMode = False
  64.      Else
  65.      End If
  66. Next f
  67. End Sub


 
 
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  :sarcastic: de renseigner d'autres personnes.
 
Encore une fois merci à tous!!

Reply

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


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed