XL 2016 Transfert feuilles vers nouveau classeur - Activation du contenu ?

Philou0607

XLDnaute Nouveau
Bonjour,
J'ai ce bout de code qui me permet de transférer certaines des feuilles souhaitées vers un nouveau classeur.

Sub EnregXLS()
Application.ScreenUpdating = False
Application.DisplayAlerts = False ' Masque le message " Ce fichier existe déjà ..."
For Each F In Worksheets
If F.Name <> "Entete" And F.Name <> "BASE_HS_2023" And F.Name <> "LISTE" And F.Name <> "TCD" And F.Name <> "Prev_Mens_Envel_2023" Then
Chemin = "R:\10 Etudes Temps Travail\11 - HEURES SUPPLÉMENTAIRES\00 - SUIVI CONSO HS & MASSE SALARIALE\001 - ANNEE 2023\ENVOI HS MENSUELLES SERVICES\Janvier à Avril 2023\" ' Chemin à définir. Doit se terminer par "\"
Nom = Chemin & F.Name & ".xlsx"
'Copie de la feuille courante dans un nouveau classeur et enregistrement
Sheets(F.Name).Select
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:=Nom
ActiveWorkbook.Close
End If
Next F
Sheets("Entete").Select
Application.StatusBar = ""
Application.DisplayAlerts = True
End Sub


Mon fichier source est au format xlsm et comprend une base de données importante. Chaque feuille suivante dispose de formules essentiellement somme.si.ens avec des références absolues à la base de données précitée. Quand je récupère les feuilles transférées dans un nouveau dossier, je rencontre plusieurs difficultés :
1 - Avertissement de sécurité - Les connexions de données externes ont été désactivées (si j'active le contenu toutes mes cellules passent à #VALEUR#
2 - mon symbole monétaire est correct dans mon fichier source alors qu'il ne l'est pas dans la feuille transférée.

Merci pour votre aide
Philou0607
 

Gégé-45550

XLDnaute Accro
Bonjour,
J'ai ce bout de code qui me permet de transférer certaines des feuilles souhaitées vers un nouveau classeur.

Sub EnregXLS()
Application.ScreenUpdating = False
Application.DisplayAlerts = False ' Masque le message " Ce fichier existe déjà ..."
For Each F In Worksheets
If F.Name <> "Entete" And F.Name <> "BASE_HS_2023" And F.Name <> "LISTE" And F.Name <> "TCD" And F.Name <> "Prev_Mens_Envel_2023" Then
Chemin = "R:\10 Etudes Temps Travail\11 - HEURES SUPPLÉMENTAIRES\00 - SUIVI CONSO HS & MASSE SALARIALE\001 - ANNEE 2023\ENVOI HS MENSUELLES SERVICES\Janvier à Avril 2023\" ' Chemin à définir. Doit se terminer par "\"
Nom = Chemin & F.Name & ".xlsx"
'Copie de la feuille courante dans un nouveau classeur et enregistrement
Sheets(F.Name).Select
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:=Nom
ActiveWorkbook.Close
End If
Next F
Sheets("Entete").Select
Application.StatusBar = ""
Application.DisplayAlerts = True
End Sub


Mon fichier source est au format xlsm et comprend une base de données importante. Chaque feuille suivante dispose de formules essentiellement somme.si.ens avec des références absolues à la base de données précitée. Quand je récupère les feuilles transférées dans un nouveau dossier, je rencontre plusieurs difficultés :
1 - Avertissement de sécurité - Les connexions de données externes ont été désactivées (si j'active le contenu toutes mes cellules passent à #VALEUR#
2 - mon symbole monétaire est correct dans mon fichier source alors qu'il ne l'est pas dans la feuille transférée.

Merci pour votre aide
Philou0607
Bonjour,
Que se passe-t-il si vous essayez ce code ?
VB:
Sub EnregXLS()
Application.ScreenUpdating = False
Application.DisplayAlerts = False ' Masque le message " Ce fichier existe déjà ..."
For Each F In Worksheets
    If F.Name <> "Entete" And F.Name <> "BASE_HS_2023" And F.Name <> "LISTE" And F.Name <> "TCD" And F.Name <> "Prev_Mens_Envel_2023" Then
        Chemin = "R:\10 Etudes Temps Travail\11 - HEURES SUPPLÉMENTAIRES\00 - SUIVI CONSO HS & MASSE SALARIALE\001 - ANNEE 2023\ENVOI HS MENSUELLES SERVICES\Janvier à Avril 2023\" ' Chemin à définir. Doit se terminer par "\"
        Nom = Chemin & F.Name & ".xlsx"
        'Copie de la feuille courante dans un nouveau classeur et enregistrement
        Sheets(F.Name).Copy Nom
        Nom.Close savechanges:=True, Filename:= Nom
    End If
Next F
Sheets("Entete").Select
Application.StatusBar = ""
Application.DisplayAlerts = True
End Sub
Cordialement,
 

job75

XLDnaute Barbatruc
Bonjour à tous,

Pour éviter l'avertissement de sécurité, voyez en remplaçant ces 4 lignes :
VB:
Sheets(F.Name).Select
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:=Nom
ActiveWorkbook.Close
par :
VB:
F.Copy
ActiveSheet.UsedRange = F.UsedRange.Value 'supprime les formules
ActiveWorkbook.SaveAs Filename:=Nom, FileFormat:=51
ActiveWorkbook.Close
A+
 

Philou0607

XLDnaute Nouveau
Bonjour à tous,

Pour éviter l'avertissement de sécurité, voyez en remplaçant ces 4 lignes :
VB:
Sheets(F.Name).Select
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:=Nom
ActiveWorkbook.Close
par :
VB:
F.Copy
ActiveSheet.UsedRange = F.UsedRange.Value 'supprime les formules
ActiveWorkbook.SaveAs Filename:=Nom, FileFormat:=51
ActiveWorkbook.Close
A+
Bonjour job75,
J'ai toujours une erreur 1004 sur la ligne : ActiveSheet.UsedRange = F.UsedRange.Value
"Nous ne pouivons pas modifier les cellules sélectionnées, car cela affecterait un tcd. Pour modifier le rapport, veuillez utiliser la liste des champs. Si vous essayez d'insérer ou de supprimer des cellules, nous vous conseillons de déplacer le tableau croisé dynamique, puis de réessayer.
Merci pour ton aide :)
 

Philou0607

XLDnaute Nouveau
Bonjour job75,
J'ai toujours une erreur 1004 sur la ligne : ActiveSheet.UsedRange = F.UsedRange.Value
"Nous ne pouivons pas modifier les cellules sélectionnées, car cela affecterait un tcd. Pour modifier le rapport, veuillez utiliser la liste des champs. Si vous essayez d'insérer ou de supprimer des cellules, nous vous conseillons de déplacer le tableau croisé dynamique, puis de réessayer.
Merci pour ton aide :)
En revanche, une nouvelle feuille xlsx s'ouvre bien dans un nouveau fichier xlsx mais n'est pas enregistré dans le nouveau dossier nommé Test. Cette feuille cible correspond à la première feuille qui doit être transférée. Le classeur en compte 23.
 

job75

XLDnaute Barbatruc
Bonjour Philou0607, le forum,
"Nous ne pouivons pas modifier les cellules sélectionnées, car cela affecterait un tcd.
Alors il ne faut pas copier la feuille F mais ses cellules, remplacez :
VB:
Sheets(F.Name).Select
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:=Nom
ActiveWorkbook.Close
par :
VB:
With Workbooks.Add(xlWBATWorksheet) 'nouveau document
    F.Cells.Copy 'copie les cellules
    ActiveCell.PasteSpecial xlPasteValues 'colle les valeurs
    ActiveCell.PasteSpecial xlPasteFormats 'colle les formats
    ActiveCell.Select
    .SaveAs Filename:=Nom, FileFormat:=51
    .Close
End With
Pour enregistrer dans le dossier "Test" mettez bien sûr ce nom dans la variable Chemin.

A+
 

cp4

XLDnaute Barbatruc
Bonjour job75,
J'ai toujours une erreur 1004 sur la ligne : ActiveSheet.UsedRange = F.UsedRange.Value
"Nous ne pouivons pas modifier les cellules sélectionnées, car cela affecterait un tcd. Pour modifier le rapport, veuillez utiliser la liste des champs. Si vous essayez d'insérer ou de supprimer des cellules, nous vous conseillons de déplacer le tableau croisé dynamique, puis de réessayer.
Merci pour ton aide :)
Bonjour,

@Philou0607 : Chez moi fonctionne parfaitement. Un petit fichier
 

Discussions similaires

Statistiques des forums

Discussions
313 264
Messages
2 096 658
Membres
106 701
dernier inscrit
KOFFI