Bonjour,
j'ai un soucis avec la macro ci-dessous que j'ai voulu réutiliser pour un autre fichier; macro qui crée autant de feuille que de valeur dans le fichier de base et qui copie les informations correspondantes dans la feuille ainsi créée.
cette macro fonctionne dans un de mes fichiers mais me renvoie le message "Erreur d'exécution '9' l'indice n'appartient pas à la sélection" avec ce nouveau fichier. je ne comprends pas d'où peut venir le bug. j'ai mentionné "=====>" sur la ligne de la macro qui bugue.
Merci pour votre aide......
Sub generation()
'Exportation avec suppression
Dim i&, X&, F As Worksheet
'Bloquer l'affichage écran
'Application.ScreenUpdating = False
'Bloquer les alertes
'Application.DisplayAlerts = False
'Avec la Feuille 1 (Nom a adapter)
With Sheets("PREP")
'/!\ *** Suppression de toutes les feuilles*** /!\
'Pour chaque feuille du classeur
For Each F In Worksheets
'Si le nom de la feuille n'est pas Feuil1, on la supprime
If F.Name <> .Name Then F.Delete
'Prochaine feuille
Next F
'/!\ ***************************************** /!\
'Pour chaque ligne (i) de feuil1
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
'Si il y a une erreur on passe à ligne suivante
On Error Resume Next
'On dit que F est la feuille du nom de la cellule
'ligne i colonne 13 (M)
'Si la feuille n'existe pas il y a une erreur gérée par "On Error Resume Next"
Set F = Sheets(.Cells(i, 13).Value)
'si il y a une erreur on l'annule
On Error GoTo 0
'Si F n'est rien (donc si la feuille n'éxiste pas
If F Is Nothing Then
'on la crée en lui donnant comme nom la valeur de la cellule
'ligne i colonne 13 (M)
Sheets.Add(After:=Sheets(Sheets.Count)).Name = .Cells(i, 13)
'Comme on crée la feuille on met l'en-tête des colonnes
'de A1 à M1
ActiveSheet.Range("A1:M1").Value = .Range("A1:M1").Value
'Fin de la condition
End If
'On cherche la première ligne vide de la bonne feuille (X)
====> X = Sheets(.Cells(i, 13).Value).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
'on met les valeurs des cellules de A à M de la feuille Feuil1
'de la ligne i dans les cellules de A à M de la ligne X de la bonne feuille
Sheets(.Cells(i, 13).Value).Range("A" & X & ":M" & X).Value = .Range("A" & i & ":M" & i).Value
'On dit que F n'est rien (préparation de la prochaine boucle)
Set F = Nothing
'Prochaine ligne de la feuille feuil1
Next i
'*** Mise en forme de toutes les feuilles (facultatif)***
'Pour chaque feuille du classeur
For Each F In Worksheets
'Si le nom de la feuille n'est pas Feuil1, on ajuste les colonnes
If F.Name <> .Name Then F.Columns.AutoFit
'Prochaine feuille
Next F
'********************************************************
'On active la feuille Feuil1 pour finir dessus
.Activate
'Arret de l'utilisation de la feuil1
End With
'Réactivation des alertes
Application.DisplayAlerts = True
'Réactivation de l'écran
Application.ScreenUpdating = True
'Message de fin de traitement
MsgBox "Exportation terminée", 64, "Compte-rendu"
End Sub