Enregistrer sous / feuille avec boucle

waramer 11 Messages postés mercredi 11 juillet 2018Date d'inscription 19 juillet 2018 Dernière intervention - 11 juil. 2018 à 11:22 - Dernière réponse : waramer 11 Messages postés mercredi 11 juillet 2018Date d'inscription 19 juillet 2018 Dernière intervention
- 11 juil. 2018 à 17:00
Bonjour amis développeurs,

Je suis dans une situation assez complexe. En effet, étant un simple amateur en code VBA, je vous écris dans l'espoir d'obtenir une aide.
J'ai actuellement un fichier excel composé de plusieurs feuilles dans lesquelles sont classés tout les agents d'une compagnie.
Je souhaite enregistrer chaque feuille dans un nouveau fichier excel. Dans ces feuilles, les données qui m'intéressent ont pour range ("O1:Q28").
De plus, chaque feuille doit avoir un nom spécifique. Ce nom se trouve dans la colonne E de ma Sheet 3 ("E1:E30").

Voilà mon début de code qui ne fonctionne pas "entièrement"
Sub save()
Dim wb As Workbook
Set wb = Workbooks.Add
Dim plage As Range
Set plage = Range("O1:Q28")
Dim shCounter As Integer
shCounter = 28
Dim name As Range
name = Workbook(3).Range("E" & shCounter).Value
Dim ws As Worksheet
For shCounter = 4 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets(4).Activate
plage.Copy
wb.SaveAs "F:\Partages\Commun_DRH\Taux de recouvrement\Evolution\2018 - " & name
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Next shCounter

End Sub


je sais qu'il y a un gros problème avec ma variable "Name" mais aussi avec la copie et l'enregistrement du nouveau fichier excel !

Merci d'avance pour votre aide,

Très cordialement !
Afficher la suite 

Votre réponse

9 réponses

jordane45 21707 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 juillet 2018 Dernière intervention - 11 juil. 2018 à 12:21
0
Merci
Bonjour,

Dim name As Range


Si c'est une "range" (une plage de cellules)
ça ne peut pas être une "valeur" (et encore moins un "string" )
name = Workbook(3).Range("E" & shCounter).Value

Hors... toi tu cherches à avoir du "texte" pour nommer ton classeur...
Dim name As String
name = Workbook(3).Range("E" & shCounter).Value


waramer 11 Messages postés mercredi 11 juillet 2018Date d'inscription 19 juillet 2018 Dernière intervention - 11 juil. 2018 à 14:17
Bonjour Jordane, merci de m'avoir répondu aussi vite.
C'est vrai que après refléxion je ne vois pas pourquoi j'ai mis un "Range". Cependant,
name = Workbook(3).Range("E" & shCounter).Value
cette ligne de code ne fonctionne toujours pas et affiche une erreur. "Erreur de compilation"...
jordane45 21707 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 juillet 2018 Dernière intervention - 11 juil. 2018 à 14:19
Workbooks au lieu de Workbook non ?
waramer 11 Messages postés mercredi 11 juillet 2018Date d'inscription 19 juillet 2018 Dernière intervention - 11 juil. 2018 à 14:29
Non, malheureusement ça ne marche pas ...
jordane45 21707 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 juillet 2018 Dernière intervention - 11 juil. 2018 à 15:50
mais... c'est un onglet Excel que tu veux manipuler ... donc worksheets ou Sheets
En gros la structure c'est:

classeur.feuille.plageCellules.value


Donc, par exemple
thisWorkBook.Sheets(3).Range(....


Bien entendu, thisWorkBook est facultatif.
Tu pourrais aussi, si tu travailles sur la feuille "active" directement utiliser
activeSheet.Range("...
Commenter la réponse de jordane45
cs_Le Pivert 5211 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 juillet 2018 Dernière intervention - 11 juil. 2018 à 15:42
0
Merci
Bonjour,

essaie ceci:

Sheets(3).Range("E" & shCounter).Value

Commenter la réponse de cs_Le Pivert
waramer 11 Messages postés mercredi 11 juillet 2018Date d'inscription 19 juillet 2018 Dernière intervention - Modifié par jordane45 le 11/07/2018 à 16:07
0
Merci
Merci pour vos réponses,

J'ai modifié mon code, ce qui me donne :
Sub save()
Dim wb As Workbook
Set wb = Workbooks.Add
Dim shCounter As Integer
Dim ws As Worksheet
For shCounter = 4 To ThisWorkbook.Sheets.Count
Dim name As String
name = ThisWorkbook.Sheets(3).Range("E" & shCounter).Value
    ThisWorkbook.Sheets(shCounter).Activate
    Range("O1:Q28").Copy
    wb.SaveAs "F:\Partages\Commun_DRH\Taux de recouvrement\Evolution\" & name
    
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
    Next shCounter

End Sub


EDIT : Ajout du LANGAGE dans les BALISES DE CODE pour avoir la coloration syntaxique !!

Cependant, je ne sais pas quel code utiliser pour que Excel Active ma nouvelle feuille pour coller ma Range("O1:Q28").
Le code :
Active.Sheet.Name
ne fonctionne pas.
Merci pour votre aide :)
jordane45 21707 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 22 juillet 2018 Dernière intervention - 11 juil. 2018 à 16:09
waramer 11 Messages postés mercredi 11 juillet 2018Date d'inscription 19 juillet 2018 Dernière intervention - 11 juil. 2018 à 17:00
Merci Jordane, dois-je utiliser un code du type message box pour trouver le nom de ma feuille ???
Commenter la réponse de waramer

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.