Problème au cours d'une macro lié à une Variable
Bonjour,
Voici mon contexte :
Je cherche à faire des enregistrement PDF automatique (fonction que je maitrise)
J'ai un fichier excel avec un onglet "base" contenant divers graphiques un onglet "feuil1" contenant des numéro, et une dizaine d'onglet de 1 à 10 (qui sont nommés simplement de 1 à 10) ces onglets sont les endroit ou je vais aller pour faire mes enregistrement PDF, il s'agit de format que je souhaite respecter en fonction d'un numéro.
Ma macro répète 25 x la procédure suivante :
aller dans onglet Feuil1
descendre d'une cellule ; copié la cellule
aller dans onglet base ; collé la cellule (ce qui change mes graphique sur l'onglet base et qui change aussi mon chiffre (pour trouver le bon onglet)
aller dans l'onglet correspondant à la cellule
enregistrer PDF
Ci dessous Ong est ma variable qui va m'amener vers le bon onglet à enregistrer.
Dim Ong As String
Ong = Range("C23")
With Worksheets(Ong)
Mon problème est que lorsque je donné un = à ma variable à l'intérieur de ma boucle, j'ai un message d'erreur après la première boucle
Ci dessous ma Macro
Sub Export_tteDR_PDF()
Dim fichier As String
Dim Ong As String
Sheets("Feuil1").Select
Range("A1").Select
'début de la macro pour sélectionner la bonne cellule ou commencer
For i = 1 To 25
Selection.Copy
Sheets("Base").Select
Range("X27").Select
ActiveSheet.Paste
'mon numéro récuperé dans l'onglet "Feuil1" est copié, ce qui à changé ma cellule C23 la ou se trouve le numéro de la feuille ou je veux aller enregistrer mon PDF
Ong = Range("C23")
'du coup je définit ma variable Ong
With Worksheets(Ong)
fichier = "\" & .Range("B2") & ".pdf"
Dossier = "C:\Users\LEPAUL\Documents\testmacropdf"
Chemin = Dossier & fichier
.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End With
Sheets("Feuil1").Select
ActiveCell.Offset(1, 0).Select
Next
End Sub
voila ou est le bug :
With Worksheets(Ong)
et l'erreur : "l'indice n'appartient pas à la sélection"
J'ai fais de nombreux tests et essais sans succès pour le moment...
Je peux vous donner d'autres infos si besoin, j'espere avoir été clair ..
Merci beaucoup pour votre aide !
Bonjour Nikolepal, bonjour le forum,
Quand on travaille sur différents onglets, si on veut éviter les erreurs, il faut spécifier le nom de l'onglet chaque fois que l'on utilise une cellule ou une plage (Range). Dans ce cas, pour simplifier l'écriture, j'utilise souvent une variable de type Worksheet :
Dim B As Worksheet
Dim F1 As Worksheet
Set B = Worksheets("Base")
setF1 = Worksheets("Feuil1")Puis quand je fait allusion à une plage j'indique de quel onglet il s'agit. Ainsi j'évite les Select et simplifie ton code :
F1.Range("A1").Copy B.Range("X27")Donc, ton code :
Ong = Range("C23") doit être :
Ong = Worksheets("le_nom_de_l'onglet").Range("C23")ou, si tu as utilisé une variable :
Ong = B.Range("C23")Tu verras que ça ne plantera plus. En règle générale : toujours éviter les Select inutiles...
Merci pour tes précieux conseils qui me seront très utiles pour la suite.
J'ai refait entièrement un fichier excel mais en version très simple, et tout fonctionnait....
En fait, un de mes onglet s'appelait avec le numéro en question mais suivi d'un espace ..... ce qui fesait bugué ma macro
Merci encore pour tes conseils