Transfert feuilles Nouveau classeur - Activation du contenu ? Symbole €

Bonjour,

J'ai ce code qui me permet de transférer certaines des feuilles souhaitées vers des nouveaux classeurs.

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

Malheureusement, sur les fichiers cibles, lorsque j'active le contenu, les données chiffrées en euro dans les cellules indiquent : #VALEUR!
Enfin si je n'active pas le contenu, les données chiffrées présentes sur le fichier cible sont présentées avec le symbole € devant alors que dans le fichier source, il est placé derrière le nombre.

Je ne peux malheureusement pas vous transmettre le fichier xlsx car ces données sont sensibles mais je peux éventuellement envoyer un fichier après avoir anonymisé certaines données.

Pourriez-vous svp m'aider à résoudre ces 2 problèmes.
Merci d'avance
Philippe

edit Modo : mis code entre balises

Bonjour et

Lorsque vous postez un code veillez à utiliser les balises de code disponibles dans la barre de menu en cliquant sur l'icone </> et en collant votre code dans la fenêtre. J'ai corrigé dans votre post


Pour votre demande c'eut été mieux avec un fichier sans données sensibles (juste avec une ou deux feuilles)

Mais comme vous avez posté deux jours plus tard (suite probablement à non réponse ici) votre demande sur un site ami, celle-ci n'a plus de raison d'être.

Je verrouille le sujet en attendant votre retour.
Vous pouvez me faire un commentaire en MP si vous le désirez.

Sans retour votre part je supprimerai le fil

Cordialement

Edit modo : suite à contact en MP, fil déverrouillé le 26/04

Bonjour à tous,

Avec l'accord de DAN, je joins un fichier excel anonymisé qui je l'espère permettra de résoudre les 2 difficultés rencontrées :

- après transfert, lors de l'activation du contenu, les données chiffrées des feuilles cibles indiquent #VALEUR! dans les cellules
- les données chiffrées présentes sur le fichier cible sont présentées avec le symbole € devant alors que dans le fichier source, il est placé derrière le nombre.

Le classeur joint comporte 4 feuilles, seules 2 d'entre elles doivent être transférées dans un nouveau fichier. Sur le vrai fichier, la base de données compte 30000 lignes et ce sont 12 feuilles qui sont à déplacer et copier dans un nouveau classeur.

Merci de m'aider à améliorer le code présent pour supprimer ces erreurs.

Cordialement

Philou0607

Bonjour

1. Le code bugue sur la feuille Liste, Entete et Prev... qui sont masquées. Quelles sont les feuilles à transférer ?

2. Pourquoi nommez-vous le fichier copié en incluant le chemin ?

3. vous écrivez ceci:

ce sont 12 feuilles qui sont à déplacer et copier dans un nouveau classeur.

les 12 feuilles dans un classeur unique ?

Re-bonjour,

Les feuilles à transférér sont SERVICE1, SERVICE2. Dans le vrai fichier, il y a 18 feuilles qui seront transférés dans un nouveau dossier nommé "Janvier à Avril 2023" et qui inclut le chemin compris dans le code. Chaque feuille transférée devient un classeur qui porte le même nom que la feuille source, donc SERVICE1, SERVICE2 etc...

Les feuilles Liste, Entête et Prev sont incorrectes et ne sont pas inclus dans le classeur source. Le nouveau fichier que je joins est correct.

Merci Dan

Re

Ok mais avec le nom que vous attribuez, cela ne fonctionnera jamais car vous ne pouvez pas avoir de caractères spéciaux (\ : & etc....) comme vous le trouvez dans la variable chemin.
Il faut choisir autre chose comme nom. Et mon conseil est aussi d'éviter les espaces et les accents.

Comme le code est fait actuellement, cela va créer 18 fichiers (donc 1 par feuille service)
Si on met les 18 feuilles dans un seul fichier comme vous le dites, je présume que vous ne faites cela qu'une seul fois par an.

C’est ce qui suit qui est trop long ?

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\"

C’est une manipulation que je fais chaque mois. Pour ce mois d’avril, les services disposent de leur consommation cumulée de janvier à avril 2023.

Une fois les feuilles source transférées dans le nouveau dossier cible qui va s’appeler : « janvier à avril 2023 ». Comme vous le dites, j’aurai 18 classeurs individuels (chacun d eux aura pris le nom de chaque feuille source correspondante) dans ce dossier cible et j’enverrai par mail chaque nouveau classeur à chaque service.

Si la variable chemin est trop longue je peux transférer les feuilles vers un nouveau dossier qui peut se trouver sur mon bureau. Qu’en pensez vous et est ce possible

merci d’avance

Philou0607

Bonjour,

Comme vous le dites, j’aurai 18 classeurs individuels (chacun d eux aura pris le nom de chaque feuille source correspondante) dans ce dossier cible

Essayez le code comme ceci :

Sub EnregXLS()
Dim F As Worksheet
With Application
    .ScreenUpdating = False
    .DisplayAlerts = False   ' Masque le message " Ce fichier existe déjà ..."
    .Calculation = xlCalculationManual
End With
For Each F In Worksheets
    'If f.Name <> "Entete" And f.Name <> "BASE_HS_2023" And f.Name <> "TCD" Then
    If UCase(F.Name) Like "SERVICE*" 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 = F.Name & ".xlsx"
        'Copie de la feuille courante dans un nouveau classeur et enregistrement
        F.Copy
        With ActiveWorkbook
            With .ActiveSheet.UsedRange
                .Copy
                .PasteSpecial Paste:=xlPasteValues
                .PasteSpecial Paste:=xlPasteFormats
            End With
            .SaveAs Filename:=chemin & Nom
            .Close
        End With
    End If
Next F
Sheets("Entete").Select
With Application
    .DisplayAlerts = True
    .Calculation = xlCalculationAutomatic
End With
End Sub

NB : si bug sur l'instruction Entete.select, c'est que votre feuille est masquée

Juste pour votre info, pour anonymiser des données vous disposez aussi d'un utilitaire ici --> https://www.excel-pratique.com/fr/utilitaires/anonymisation-donnees

Crdlt

Bonjour Dan,

Le code que vous m'avez adressé fonctionne en ce qui concerne les données cibles après lancement du code, il n'y a plus de demande d'activation du contenu et je vous en remercie sincèrement. En revanche, le symbole € apparait toujours devant les nombres alors que dans les feuilles source, il est bien positionné derrière.

Je vous joins le classeur cible nommé "SERVICE 1".

Merci d'avance pour votre retour.

Philou0607

9service-1.xlsx (121.93 Ko)

Bonjour

C'est effectivement assez curieux. La sauvegarde se fait normalement avec le signe Euro placé à droite comme dans le fichier d'origine.
A la réouverture du fichier sauvé, le signe Euro se replace à gauche malgré le copier-coller du format prévu dans le code.

Bon une solution qui fonctionne est d'aller activer le complément excel "Euro currency tools".
Par ce faire, allez dans le menu "developpeur" --> "Compléments Excel" et cochez la case "Euro Currency tools".

J'ai toutefois une remarque sur cette option. Par le passé, cela m'est arrivé d'avoir un message "Error Automation" à l'ouverture de fichiers. Cela faisait un plantage du fichier à l'ouverture et il fallait aller penser à désactiver l'option qui en état la cause. Une fois désactivée cela avait résolu le problème. J'ai déjà proposé cette solution pour résoudre le souci du message.

Si vous avez ce problème un jour pensez à d'abord désactiver cette option.

Cela n'a rien avoir avec le souci mais dans votre code vous pouvez remplacer les deux lignes "PasteSpecial Paste...." par cette ligne

.PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Crdlt

Dan,

J'ai bien activité le complément "Outils pour l'euro" dans les compléments excel mais cela ne change rien pour les classeurs cible, le symbole euro est toujours devant.

J'ai modifié comme demandé le

.PasteSpecial Paste:=xlPasteValuesAndNumberFormats

En revanche si j'ai d'autres onglets que "SERVICE*" à ajouter avant le Then. Par exemple, je souhaiterais ajouter "SMM", "C.FONCTIONNELLE";"C.PILOTAGE" et "SYNTHESE", merci de me préciser comment les ajouter.

 If UCase(F.Name) Like "SERVICE*" Then

Merci encore pour votre aide.

Philou0607

En revanche si j'ai d'autres onglets que "SERVICE*" à ajouter avant le Then. Par exemple, je souhaiterais ajouter "SMM", "C.FONCTIONNELLE";"C.PILOTAGE" et "SYNTHESE",

Là c'est différent de ce que vous écriviez ici --> https://forum.excel-pratique.com/s/goto/1138902

Dans ce cas au lieu de If ucase(.... like.... then, le mieux est de remplacer cette ligne par celle que j'ai désactivée juste au dessus.

Concernant l'euro, bête question mais vos paramètres régionaux windows sont bien sur euro car le paramétrage du symbole monétaire a une influence

- Désactivez "outils pour l'euro"
- Essayez aussi en ajoutant ce format tel quel dans "format" -->"personnalisé" --> # ##0,00 € (attention pas de point entre les #) et remettez ce format à tous vos nombres dans la feuille

Bonjour Dan,

Oui effectivement parce que je vous ai envoyé un fichier anonymisé et qui ne correspondait pas aux vrais services.

J'ai désactivé "outils pour l'euro".

Pour le format personnalisé, je dois l'ajouter puis l'adapter à tous les nombres présents sur les classeurs "cible" , c'est bien celà ?

- Essayez aussi en ajoutant ce format tel quel dans "format" -->"personnalisé" --> # ##0,00 € (attention pas de point entre les #) et remettez ce format à tous vos nombres dans la feuille

Merci

Philou0607

Pour le format personnalisé, je dois l'ajouter puis l'adapter à tous les nombres présents sur les classeurs "cible" , c'est bien celà ?

Que voulez vous dire par "Classeurs cible" ?

Effectivement mais vous pourriez d'abord faire un test sur quelques cellules afin de voir si cela résout le souci.
Personnellement dans le fichier posté ici, j'ai formaté de F7 à I10 dans la feuille Service 1 puis j'ai exécuté le code.

Bonjour Dan,

Si je comprends bien, je dois reformater avec le format personnalisé que vous m'avez communiqué, chaque feuille du classeur source (exemple SERVICE 1) avant d'exécuter le code.

J'essaie et reviens vers vous.

Merci - Philou 0607

@Dan

J'ai une erreur lorsque j'exécute le code sur la ligne F.Copy

Cela fonctionnait parfaitement bien avant.

capture d ecran 2023 05 04 112525

Cdlt

Philou

Dan,

Je suis vraiment désolé mais le format personnalisé # ##0,00 € ne reste pas. Après l'avoir renseigné dans les cellules concernées, je valide et il revient d'office au fomat monétaire.

Cdlt

J'ai une erreur lorsque j'exécute le code sur la ligne F.Copy

Votre feuille n'est pas masquée par hasard ?
Pour vérifier, juste avant la ligne qui bugue, mettez ceci

Msgbox F.name

Je suis vraiment désolé mais le format personnalisé # ##0,00 € ne reste pas

Dans le panneau de configuration windows vérifiez dans vos paramètres régionaux, si vous êtes bien en Euro. Je pense que cela peut inflencer

Dan,

c'est OK pour le code, il y avait 3 feuilles cachées.

En revanche, j'ai vérifié les paramètres régionaux de Windows10 dans le panneau de configuration et tout semble OK.

capture d ecran 2023 05 04 134338 capture d ecran 2023 05 04 134432

Avons-nous d'autres options de vérification pour ce symbole € placé devant après transfert ?

Merci - Philou0607

Merci des infos.

Chez moi il y a une différence. La rubrique "symbole de groupement des chiffres" comporte un point. Chez vous c'est vide... A voir si cela arrange quelque chose...

Ce que vous pouvez tester, c'est formater les cellules des deux feuilles Service au format perso tel que discuté et suspendre l'instruction CLOSE.
Ensuite exécuter le code
De cette sorte les fichiers resteront ouverts et vous pourrez voir si le symbole € est bien placé comme prévu.
Ensuite vous fermez un des fichiers manuellement et vous le ré-ouvrez afin de contrôler
Chez moi avant fermeture, le format des feuilles sauvegardées sont toujours sur "Personnalisé"

Si cela ne fonctionne toujours pas, mettez cette instruction juste avant le SAVEAS

.save
Rechercher des sujets similaires à "transfert feuilles nouveau classeur activation contenu symbole"