Enregistrer sous / feuille avec boucle

Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Dernière intervention
19 juillet 2018
- 11 juil. 2018 à 11:22 - Dernière réponse :
Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Dernière intervention
19 juillet 2018
- 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

Messages postés
23294
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2018
- 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


Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Dernière intervention
19 juillet 2018
- 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"...
Messages postés
23294
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2018
- 11 juil. 2018 à 14:19
Workbooks au lieu de Workbook non ?
Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Dernière intervention
19 juillet 2018
- 11 juil. 2018 à 14:29
Non, malheureusement ça ne marche pas ...
Messages postés
23294
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2018
- 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
Messages postés
5533
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
19 novembre 2018
- 11 juil. 2018 à 15:42
0
Merci
Bonjour,

essaie ceci:

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

Commenter la réponse de cs_Le Pivert
Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Dernière intervention
19 juillet 2018
- 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 :)
Messages postés
23294
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2018
- 11 juil. 2018 à 16:09
Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Dernière intervention
19 juillet 2018
- 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.