Macro pour enregistrer selon plusieurs critères

tacounet Messages postés 28 Statut Membre -  
tacounet Messages postés 28 Statut Membre -
Bonjour,
Je cherche à créer une macro (je suis proche du niveau 0 de ce côté là) pour:

-Enregistrer mon fichier excel selon la valeur de la cellule H4 (cellule liée à une liste de choix de laquelle découlent, via formules, tout un tas de valeurs dans ma feuille excel),
-TOUT EN n'enregistrant en format .xlsx QUE les valeurs qui apparaissent dans mes différentes cellules, en laissant mon fichier .xlsm intact, et prêt à resservir avec une autre valeur dans H4.

En parcourant différent forum (dont celui-ci), j'ai déjà réussi à créer des macros pour insérer des images selon la valeur d'une cellule, effacer d'un coup toutes mes images, et d'autres choses qui me sont bien utile au boulot.

J'ai surtout appris qu'avec Excel, rien ne semblait impossible.

Si en plus, il n'était possible d'enregistrer sous un nouveau fichier "que" la partie de la feuille délimitée par une zone d'impression (la finalité est d'imprimer une fiche de renseignements pour un classeur papier ou un Pdf), ça serait réellement le top...

Je compte sincèrement sur votre aide.
Merci d'avance

Configuration: Windows / Chrome 92.0.4515.107

3 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Faire Alt F11 pour accéder à l'éditeur.

    Insérer un module et mettre ce code pour la feuille entière:

    Option Explicit
    Sub save()
    Dim chemin_dossier As String
    chemin_dossier = ThisWorkbook.Path ' adapter chemin
    If Range("H4") = "" Then Exit Sub
    ThisWorkbook.Sheets("Feuil1").Copy 'adapter nom feuille
    ActiveWorkbook.SaveAs Filename:=chemin_dossier & "\" & Range("H4").Value & ".xlsx"
    ActiveWorkbook.Close
    MsgBox "Votre fichier " & Range("H4").Value & " est créé", vbInformation, "Création fichier"
    End Sub
    


    et pour une plage de cellule:

    Sub enreg()
    Dim LePath As String, LeNom As String
    LePath = ThisWorkbook.Path & "\" 'adapter chemin
    LeNom = Range("H4").Value & ".xlsx"
    With Sheets("Feuil1") 'adapter nom feuille
        Sheets.Add
        .Range("A1:E12").Copy Range("A1") 'adapter plage cellule
        ActiveSheet.Move
        With ActiveWorkbook
            .SaveAs LePath & LeNom
            .Close False
        End With
    End With
    MsgBox "Votre fichier " & Range("H4").Value & " est créé", vbInformation, "Création fichier"
    End Sub
    


    1
  2. tacounet Messages postés 28 Statut Membre
     
    Bonjour Pivert,

    Merci bcp pour la rapidité de la réponse
    j'ai directement essayé la méthode avec les plages de cellule, et, quelques petits soucis.
    Tout d'abord, j'ai une erreur d'exécution 1004, fichier inaccessible.

    Je pense avoir fait le tour des vérifications
    Mon dossier de destination existe, il n'est pas en lecture seule, et mon nom de fichier ne semble pas comprendre les caractères proscrits (dans ma liste de choix, j'ai bien des noms avec "-" et/ou "_") mais même un essai avec un nom ne comportant que des lettres remonte la même erreur...

    Sub enreg()
    Dim LePath As String, LeNom As String
    LePath = ThisWorkbook.Path & "C:\Users\steph\Documents\Travaux divers pour HBG MBH\Fiches de poser\XLS en cours\" 'adapter chemin
    LeNom = Range("H4").Value & ".xlsx"
    With Sheets("GENERATION FICHE") 'adapter nom feuille
    Sheets.Add
    .Range("A1:Z103").Copy Range("A1") 'adapter plage cellule
    ActiveSheet.Move
    With ActiveWorkbook
    .SaveAs LePath & LeNom
    .Close False
    End With
    End With
    MsgBox "Votre fichier " & Range("H4").Value & " est créé", vbInformation, "Création fichier"
    End Sub


    Ensuite, mais c'est de ma faute car je ne l'avais pas spécifié initialement, je souhaite aussi conserver la mise en forme, en plus des valeurs que remontent les formules dans mon fichier excel "de travail"...
    Le "enregistrer sous, copier/collage spécial" fonctionne, mais j'aurais aimé "automatiser" la chose...
    Je continue à tatonner...
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Comme ceci

      LePath =  "C:\Users\steph\Documents\Travaux divers pour HBG MBH\Fiches de poser\XLS en cours\" 'adapter chemin


      Pour la copie en collage spécial sers toi de l enregistreur de macro
      0
    2. tacounet Messages postés 28 Statut Membre > cs_Le Pivert Messages postés 8437 Statut Contributeur
       
      Effectivement, ça fonctionne nickel...

      Plus qu'à, de mon coté, créer avec l'enregistreur de macro, une macro qui "copie/collage spécial(mise en forme & valeurs)", à concaténer avec la tienne, et ça devrait dérouler...

      Merci beaucoup
      0
    3. tacounet Messages postés 28 Statut Membre > cs_Le Pivert Messages postés 8437 Statut Contributeur
       
      Bonjour Le Pivert,

      J'ai beau tourner le problème dans tous les sens, je ne trouve pas se solution.
      J'ai bien, via l'enregistreur de macro, réussi à créer une macro qui m'enregistre mon fichier en xlsx, sans toucher à la mise en forme, mais dès que j'essaie de concaténer avec la tienne, qui contient les éléments que je souhaite (sélection du nom, de la feuille active et du chemin de fichier) ça plante...
      Le fait que je n'ai pas les base de la programmation vba, et que je sois totalement autodidacte avec Excel ne doit pas aider...

      Oserais-je te demander encore ton assistance?
      au besoin en te faisant parvenir un copie de mon fichier, pour qu'un expert s'y penche?

      Merci en tout cas pour l'aide déjà apportée.
      Stéphane
      0
    4. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > tacounet Messages postés 28 Statut Membre
       
      Tu peux mettre le code que tu as eu avec l'enregistreur. Pour voir si je peux le mettre avec la macro existante.

      Sinon poste ton classeur sans données sensibles ici:

      https://www.cjoint.com/

      Ensuite tu colles le lien sur ce post

      @+
      0
    5. tacounet Messages postés 28 Statut Membre > cs_Le Pivert Messages postés 8437 Statut Contributeur
       
      Voici mon fichier...
      https://www.cjoint.com/c/KGCriUIw7HS


      En te remerciant par avance, et en espérant réussir à comprendre tout ça un jour...

      Stéphane
      0
  3. tacounet Messages postés 28 Statut Membre
     
    Rebonjour,

    Préférant travailler étape par étape, afin de bien visualiser les différentes étapes et ainsi identifier facilement les problèmes, j'ai:

    Créé une deuxième feuille, qui, via macro, va chercher les valeurs et format des cellules de ma feuille d'origine, (1ère macro), affiche les images qui correspondent à mes différentes données (2ème macro).
    J'ai modifié la macro d'enregistrement en .xlsx pour que ce soient bien les éléments de cette 2ème feuille (valeurs + images) qui soient sauvegardées en.xlsx.
    Mais là où le bas blesse, c'est que la mise en page (taille des cellules, polices, couleurs de remplissage) de cette feuille ne sont pas pris en compte dans cet .xlsx pourtant correctement créé, au bon endroit...
    qu'ai-je loupé???

    Je vais faire comme à mon habitude, laisser pour ce soir le PC de côté (au risque de m'énerver dessus), et espérer que la nuit me permettra d'y revenir demain, avec un regard neuf...
    0