Enregistrer sous / feuille avec boucle

waramer Messages postés 11 Date d'inscription mercredi 11 juillet 2018 Statut Membre Dernière intervention 19 juillet 2018 - Modifié le 11 juil. 2018 à 11:25
waramer Messages postés 11 Date d'inscription mercredi 11 juillet 2018 Statut Membre 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 !

3 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
11 juil. 2018 à 12:21
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


0
waramer Messages postés 11 Date d'inscription mercredi 11 juillet 2018 Statut Membre 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"...
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
11 juil. 2018 à 14:19
Workbooks au lieu de Workbook non ?
0
waramer Messages postés 11 Date d'inscription mercredi 11 juillet 2018 Statut Membre Dernière intervention 19 juillet 2018
11 juil. 2018 à 14:29
Non, malheureusement ça ne marche pas ...
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
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("...
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
11 juil. 2018 à 15:42
Bonjour,

essaie ceci:

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

0
waramer Messages postés 11 Date d'inscription mercredi 11 juillet 2018 Statut Membre Dernière intervention 19 juillet 2018
Modifié le 11 juil. 2018 à 16:07
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 :)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
11 juil. 2018 à 16:09
0
waramer Messages postés 11 Date d'inscription mercredi 11 juillet 2018 Statut Membre 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 ???
0
Rejoignez-nous