IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro "Enregistrer sous"


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Commercial
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut Macro "Enregistrer sous"
    Bonjour à tous,

    Merci de prendre le temps de venir lire mon sujet, j'espère savoir expliquer le plus clairement possible mon problème. Je débute en macro et j'essaie de décoder ce qu'il se passe même si je ne suis pas encore trop à l'aise pour innover :p

    J'ai un fichier xlsm forcément, avec des formules de recherche v, index,... Bref. Une macro Archiver présentée ci dessous, se charge "d'enregistrer sous" le document présent sous une forme xls. Il ne sauvegarde que l'onglet actif, et c'est bien normal. J'aimerai savoir s'il est, en théorie, possible de lui faire enregistrer la feuille avec l'affichage "actif/présent" des formules, et non pas la formule en elle même, ou le résultat sous forme d'erreur
    => Eh oui, s'il n'enregistre que le premier onglet, à l'ouverture du fichier xls il ne retrouve pas les sources demandées par les formules et affiche donc de belles erreurs de partout.

    Je pense qu'il doit exister, tout comme pour la copie/colle une forme de collage "valeurs" ou texte, qui s'appliquerait sur une macro Pensez vous que c'est jouable? Si oui, je ne parviens pas à trouver comment exprimer correctement ma recherche :/ Je penserai bien à créer la macro méthode à l'arrache, en l'enregistrant manuellement => le copié/collé brut. Mais voila, c est trop brut et les lignes à copier coller peuvent différer en nombre.

    Merci à vous pour votre aide !



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub Archiver()
    Dim extension As String
    Dim chemin As String, nomfichier As String
    Dim style As Integer
    Application.ScreenUpdating = False
    ThisWorkbook.ActiveSheet.Copy
    extension = ".xls"
    chemin = "C:\Users\lereuland\Desktop\"
    nomfichier = ActiveSheet.Range("C9") & " " & Format(Date, "dd-mm") & extension
    With ActiveWorkbook
        .ActiveSheet.DrawingObjects(1).Delete
        .SaveAs Filename:=chemin & nomfichier
        .Close
    End With
    End Sub

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il faut boucler sur les cellules de la feuille
    pour chaque cellule : sa valeur = sa valeur

    ça va remplacer les formules par les valeurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Cell as Range
    For Each Cell in ActiveSheet.UsedRange.Cells
        Cell.Value = Cell.Value
    Next Cell

  3. #3
    Membre averti
    Homme Profil pro
    Commercial
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut
    4 lignes et c'était réglé...

    C'est super astucieux !

    J'ai parfois honte de mes questions, mais merci beaucoup pour cette efficace rapidité !

    Au plaisir de vous relire !

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Pourquoi avoir honte de demander de l'aide ?

    il sert à ça ce forum.

    t'avais besoin d'une méthode, on te la donne.

    et j'espère surtout qu'elle t'as permis d'apprendre et de pouvoir réutiliser ça

    on peut optimiser mon code (merci rdurupt !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value

  5. #5
    Membre averti
    Homme Profil pro
    Commercial
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    on peut optimiser mon code (merci rdurupt !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
    Oui tout ce que j apprends en faisant mon tableau Excel tout ce que j ai eu à chercher j ai fait en sorte de le réutiliser du coup la encore ça M aide mais il y a tellement de choses à savoir C est énorme du coup ça change quoi en fait value plutôt que cells? L'autre appellation peut générer des erreurs?

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Les deux codes font exactement la même chose, mais pas de la même manière

    si l'un marche, l'autre marchera forcément ... et inversement !
    en revanche, là où je parcours chaque cellule de la plage de données de ta feuille active pour fixer la valeur des formules, rdurupt effectue la fixation directement sur la collection de cellules de cette plage.

    son code est d'autant plus rapide à l'exécution, que ta plage de données est grande

  7. #7
    Membre averti
    Homme Profil pro
    Commercial
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut
    Du coup je vais tester l'efficacité des deux méthodes sur différentes quantités d'informations pour voir ca.
    Et le code doit donc devenir ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Cell as Range
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
    For Each Cell in ActiveSheet.UsedRange.Cells
        Cell.Value = Cell.Value
    Next Cell
    ou ce code la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Cell as Range
    For Each Cell in ActiveSheet.UsedRange.Cells
             ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
    Next Cell

    Merci encore !

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    non, il faut choisir une méthode ou l'autre, mais les deux en même temps c'est inutile : quand t'as enfoncé un clou avec un marteau, tu vas pas en chercher un autre pour continuer à taper

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
    Fixe la valeur des cellules qui ont une formule, en appliquant le traitement directement à l'ensemble de la plage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Cell as Range
    For Each Cell in ActiveSheet.UsedRange.Cells
        Cell.Value = Cell.Value
    Next Cell
    Fixe la valeur des cellules qui ont une formule, en parcourant les cellules une par une pour faire le traitement

  9. #9
    Membre averti
    Homme Profil pro
    Commercial
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut
    Haaaa alors je suis bien content parce que finalement, ca ne va pas Je me disais bien que j'étais un peu plus tordu que ca dans ma demande. L'objectif à atteindre est d'appliquer ce formatage, lors de l'enregistrement ( ou plutot création du fichier en .xls) et uniquement pour le fichier nouvellement créé. Pas pour l'appliquer sur le fichier de base.

    En gros, de mon fichier source, j'aimerais pouvoir obtenir la copie du fichier source qui soit donc source.xls admettons, mais que dans mon source.xlsm je garde bien l'affichage de mes formules, et de par le fait garder le remplissage modulable selon les critères choisis à un moment ou un autre. Is that possible sir?

  10. #10
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Entre la ligne 11 et 12 du code de ton premier message, tu ajoutes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .ActiveSheet.UsedRange.Value = .ActiveSheet.UsedRange.Value
    ça devrait correspondre à ton souhait

  11. #11
    Membre averti
    Homme Profil pro
    Commercial
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut
    Après test, de rajouter cette ligne ne change malheureusement pas la donne. Le fichier se place bien sur le bureau en xls, contient bien les cellules formatées affichées en valeur, mais le fichier source .xlsm efface malgré tout les formules aussi et applique le formatage. Ce qui m'oblige à fermer le document sans enregistrer, le rouvrir et relancer la macro pour une autre donnée à sauver en .xls


    Edit :

    Je ne sais pas pourquoi, mais lors de l'ouverture du fichier en .xls j'ai ce message d'erreur :

    Nom : Microsoft Excel.jpg
Affichages : 188
Taille : 25,0 Ko

  12. #12
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    désolé je me trompé d'une ligne, voilà que je ne sais plus lire ni compter ....

    voici le bloc complet, il faut également ajouter l'argument TRUE à la méthode CLOSE pour enregistrer en fermant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With ActiveWorkbook
        .ActiveSheet.DrawingObjects(1).Delete
        .SaveAs Filename:=chemin & nomfichier, FileFormat:=xlExcel8
        .ActiveSheet.UsedRange.Value = .ActiveSheet.UsedRange.Value
        .Close True
    End With

    EDIT : pour ton message, j'ai ajouté un argument à ton SaveAs, je crois que ça va forcer le xls

  13. #13
    Membre averti
    Homme Profil pro
    Commercial
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut
    C'est sur la conversion barbare il aime peut être pas. Bon, c'est pas le plus grave. J'ai créé un fichier test pour illustrer. Si je ne me suis pas trompé, en recopiant ce code, il corrige toujours le formatage sur le fichier source. Je souhaite que ce soit transparant pour l'utilisateur et qu'en conservant le fichier test.xlsm on puisse générer des fichiers avec client A, client B et client C.xls tout en conservant la mise en forme source du test.xlsm.
    Fichiers attachés Fichiers attachés

  14. #14
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    voici le code modifié

    en fait en tout début de macro tu remplaçais déjà les formules par leur valeur, ce qui expliquait que tu ne conservais jamais tes formules

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub test()
    Dim extension As String
    Dim chemin As String, nomfichier As String
    Dim style As Integer
     
    Application.ScreenUpdating = False
     
    ThisWorkbook.ActiveSheet.Copy
    extension = ".xls"
    chemin = "C:\Users\lereuland\Desktop\"
    nomfichier = ActiveSheet.Range("C9") & " " & Format(Date, "dd-mm") & extension
     
    With ActiveWorkbook
        .ActiveSheet.DrawingObjects(1).Delete
        .SaveAs chemin & nomfichier, xlExcel8
        .ActiveSheet.UsedRange.Value = .ActiveSheet.UsedRange.Value
        .Close True
    End With
     
    Application.ScreenUpdating = True
     
    End Sub

  15. #15
    Membre averti
    Homme Profil pro
    Commercial
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut
    Nom : 1.jpg
Affichages : 192
Taille : 53,2 KoNom : 2.jpg
Affichages : 181
Taille : 42,7 Ko

    J'ai pu modifier la macro. J'ai désormais ces deux messages d'erreur, et meme en essayant de "corriger" l'erreur, comme office me le propose, cela revient malgré tout à la prochaine execution de la macro. Est ce une erreur normale?

    Merci encore pour toutes ces réponses.... !

  16. #16
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    au moins ça veut dire qu'on convertit proprement le fichier

    si t'as pas peur d'écraser un fichier déjà existant, regarde l'aide sur la propriété Application.DisplayAlerts
    sinon, faudra également tester et gérer l'existence du fichier

  17. #17
    Membre averti
    Homme Profil pro
    Commercial
    Inscrit en
    Avril 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 23
    Par défaut
    Ok merci beaucoup je teste tout ça demain alors! Bonne nuit et merci encore

Discussions similaires

  1. Macro pour enregistrer sous / nom du fichier
    Par vinzu dans le forum VBA Word
    Réponses: 12
    Dernier message: 05/11/2014, 19h19
  2. Macro d'enregistrement sous un nom
    Par caligoose dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/12/2007, 19h17
  3. [VB] macro pour enregistrer sous
    Par CélineM dans le forum SDK
    Réponses: 1
    Dernier message: 07/06/2007, 13h28
  4. macro pour enregistrer sous
    Par macromega dans le forum Général VBA
    Réponses: 2
    Dernier message: 03/05/2007, 20h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo