Enregistrer sous / feuille avec boucle

Signaler
Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Statut
Membre
Dernière intervention
19 juillet 2018
-
Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Statut
Membre
Dernière intervention
19 juillet 2018
-
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 !

3 réponses

Messages postés
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325
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
Statut
Membre
Dernière intervention
19 juillet 2018

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
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325
Workbooks au lieu de Workbook non ?
Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Statut
Membre
Dernière intervention
19 juillet 2018

Non, malheureusement ça ne marche pas ...
Messages postés
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325
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("...
Messages postés
6648
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
10 avril 2020
105
Bonjour,

essaie ceci:

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

Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Statut
Membre
Dernière intervention
19 juillet 2018

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
28135
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 avril 2020
325
Messages postés
11
Date d'inscription
mercredi 11 juillet 2018
Statut
Membre
Dernière intervention
19 juillet 2018

Merci Jordane, dois-je utiliser un code du type message box pour trouver le nom de ma feuille ???