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 de sauvegarde


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 165
    Par défaut Macro de sauvegarde
    Bonjour,

    J'ai créer une macro permettant de créer un document.
    J'ai créer en premier lieu un formulaire, ou l'on doit renseigner les champs.
    Il y a ensuite 3 boutons : Un pour produire le document, un pour sauvegarder et un pour vider le formulaire.

    Je rencontre un petit soucis pour sauvegarder le document.
    Enfête je voudrais que lorsqu'on appuye sur sauvergarder,

    un nouveau document excel se créer (et non pas une nouvelle sheet)
    que je puisse copier 3 sheets de mon documents actuels dans l'autre documents et que je puisse l'enregistrer avec 3chiffres_3chiffres_totaux dans un chemin special sur un serveur.

    exemple du nom : 999_999_totaux

    J'espère que vous pourrez m'aider.

    Merci d'avance

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,

    A mon avis il sera plus simple d'utiliser le copier/coller de feuille.
    Avec l'enregistreur de macros tu devrais pouvoir t'en sortir, ça devrait donner quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub SaveCopy()
     
        Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Copy
        ChDir "C:\TonChemin"
        ActiveWorkbook.SaveAs Filename:="C:\TonChemin\" & LeNom & ".xlsm"
        Activeworkbook.close
     
    End Sub
    A toi de voir pour alimenter la variable LeNom avec les infos de ton exemple

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 165
    Par défaut Bug
    Merci pour ta réponse, mais je rencontre à nouveau un problème :

    j'ai créer un bouton pour déclencher cette macro :

    dont le code est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sub savecorpy()
    sheets(Array("SLD&INT","DPT","DIVI")).COPY
    chdir "le chemin sans la barre"
    activeworkbook.saveas filename:="le chemin avec la barre à la fin" & LeNom & ".xlsm"
    activeworkbook.close
     
    end sub
    et il bug sur la phrase avec le nom

    Help !

  4. #4
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,

    Si ton code (hormis les chemins) est complet, c'est normal !
    Ta variable LeNom est vide, tu dois l'alimenter, donc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sub savecorpy()
    Dim LeNom as string
     
    LeNom = sheets("PourLexemple").range("A1") 'Tu alimente ta variable, pour l'exemple avec le contenu de la cellule A1 de la feuille PourLexemple.
     
    sheets(Array("SLD&INT","DPT","DIVI")).COPY
    chdir "le chemin sans la barre"
    activeworkbook.saveas filename:="le chemin avec la barre à la fin" & LeNom & ".xlsm"
    activeworkbook.close
     
    end sub

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 165
    Par défaut Solution
    Ca fonctionne à présent, j'avais déterminer une variable dans un autre module, et il n'a pas suivit... ! à présent sa fonctionne !

    Une dernière question, ma variable étant une série de chiffre 999999, je voudrais y intégrer un "-" pour obtenir 999-999. C'est possible ? sachant que je ne peux pas rajouter à la base ce tiret.

    et je voudrais rajouter "_total_" et une autre variable après le dernier "_" pour rajouter la langue (deja déterminer dans un autre module)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    Sub savecopy()
    Dim LeNom As String
     
    LeNom =Sheets("SLD&INT").Range("G3")
    Sheets(Array("SLD&INT", "DPT", "DIVI")).COPY
     
    CHDIR "K:..............."
    ACTIVEWORKBOOK.SAVEAS FILENAME:="K.............." & LeNom & ".xls"
     
    activeworkbook.close
     
    end sub
    Pour le range("a3"), aucun problème car c'est le même chiffre qui apparait sur les 3 feuilles.

    Merci d'avance..

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Tu peux y arriver facilement avec le principe de concaténation (symbole &) comme pour le Filename du Save As.

    En partant du principe que ta série comporte toujours 6 caractères, on va scinder en deux grâce à Left et Right pour ce qui est du mot Total, pas de soucis c'est du texte.
    Pour la dernière partie, soit tu crées une nouvelle variable dans ce module (principe que je vais utiliser) soit tu déclares ton autre procédure en Public (tu devrais trouver un tuto expliquant ça sur le forum)

    donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub savecopy()
    Dim LeNom As String, LaLangue as string
     
    LeNom =left(Sheets("SLD&INT").Range("G3"),3) & "-" & right(Sheets("SLD&INT").Range("G3"),3)
    LaLangue = 'Ici tu affecte la langue à la variable
     
    Sheets(Array("SLD&INT", "DPT", "DIVI")).COPY
     
    CHDIR "K:..............."
    ACTIVEWORKBOOK.SAVEAS FILENAME:="K.............." & LeNom & "_Total_" & LaLangue & ".xls"
     
    activeworkbook.close
     
    end sub
    J'ai modifié à main levé j'espère ne pas avoir fait de faute de syntaxe...
    On aurait pu aussi affecté à la variable LeNom la totalité de ce que tu souhaite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LaLangue = 'Ici tu affecte la langue à la variable
    LeNom =left(Sheets("SLD&INT").Range("G3"),3) & "-" & right(Sheets("SLD&INT").Range("G3"),3) & "_Total_" & LaLangue
    ...
    ACTIVEWORKBOOK.SAVEAS FILENAME:="K.............." & LeNom & ".xls"

    A+

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 165
    Par défaut Finition
    Super merci ! sa fonctionne à merveille,

    j'aurai encore une question, mais je sais pas si je dois refaire une nouvelle question sur le forum juste pour ca : j'explique le problème :

    Ma première sheet est un formulaire : une fois les données remplies on appuye sur un bouton "PRODUCTION" qui selectionne les données du formulaire une par une (sachant que se sont des variables) et il les utilises de la sheet travail, pour créer des tableaux, etc...

    j'aimerai enfête créer des messages d'erreurs, imaginons que quelqu'un oublie la donnée à 6 chiffres (RefRacine) dans la cellule F15, ou qu'ils mettent que 5 chiffres. C'est possible de générer ces erreurs ?

    Sanchant qu'il y a des données dans :

    -les cellulles B10 à E13(que j'ai nommé adresse)

    -F15 qui est un numéro de racine donc l'erreur (5 chiffres ou 7 chiffres ) sachant qu'il doit être à 6 chiffres, ou alors l'oublie

    -F17 qui est la langue en deux lettres (majuscules minuscules, il le comprend déjà) donc juste l'oubli

    -F19 est une série de 4 chiffres et rien de plus

    -F21 est une année donc 2010 ou 2009 par exemple et pas plus.

    Comment gérener tous ces messages d'erreur ?

    exemple : Vous avez oublier l'année !

    Si il en a oublier deux :

    Vous avez oublier l'année !
    Vous avez oublier l'adresse ! sur le même message d'erreur

    Je sais que c'est surment long à expliquer, mais je retiens tous ces informations
    et je vous en suis très reconnaissant...

  8. #8
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,

    Vu que ça n'a rien à voir, une nouvelle question aurait été mieux, toutefois, dans la feuille Excel tu peux déjà t'aider des validations de données, ça te permet déjà de forcer la saisie de certaine données, voir créer une liste comme pour l'année, en vba tu n'as plus qu'à vérifier si il y n'y a pas de saisie oubliée.

    Sinon, tu peux à la validation, via VBA, pour chaque cellule, vérifier si le contenu est conforme. Mais tu dois alors être certain de tes algos et connaitre un peu la syntaxe
    Par exemple,
    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
    Sub Verif()
    Dim MonMessErreur
     
    If Not IsNumeric(Range("F19")) Or Len(Range("f19")) <> 4 Then
        MonMessErreur = "La valeur saisie en F19 doit être numérique et de 4 caractères" & Chr(10)
    End If
     
    If IsEmpty(Range("F21")) Then
        MonMessErreur = MonMessErreur & "Vous avez oublier l'année"
    End If
     
    'etc
     
    If MonMessErreur = "" Then
        MsgBox "Formulaire validé"
       'Renvoyer vers l'autre procédure
    Else
        MsgBox MonMessErreur
    End If
     
    End Sub
    A+

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 165
    Par défaut Question
    D'accord mais ce code, je dois l'inserer ou enfin de compte ?

    Car j'ai mon premier module qui comporte les variables avec la séléction de donnée et qui lance automatiquement suite à un bouton la construction des documents.
    C'est à dire que je dois appuyer sur PRODUCTION pour lancer la macro, mais si je met Sub Verif, elle ne rentrera pas en action ? Le sub qui est accrocher sur le bouton est Macro2, je l'ai pas renommé.

    Comment faire ?

  10. #10
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Tu as deux possibilités:

    1° tu ajoute le code au code existant avec une petite adaptation à mon exemple
    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
    23
    24
     
    Sub LeNomDeTaMacroActuelle ()
    Dim MonMessErreur
     
    If Not IsNumeric(Range("F19")) Or Len(Range("f19")) <> 4 Then
        MonMessErreur = "La valeur saisie en F19 doit être numérique et de 4 caractères" & Chr(10)
    End If
     
    If IsEmpty(Range("F21")) Then
        MonMessErreur = MonMessErreur & "Vous avez oublier l'année"
    End If
     
    'etc
     
    If MonMessErreur <> "" Then
        MsgBox MonMessErreur
        Exit sub 'Sort de la procédure pour permettre la saisie correcte
    Else
        MsgBox "Formulaire validé"
     End If  
     
    'A partir d'ici la procdédure que tu as déjà...
     
    End Sub
    2° tu rattache cette macro au bouton et si saisie correcte tu appelles ton autre procédure (il suffit de mettre le nom de la macro), donc:
    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
    Sub Verif()
    Dim MonMessErreur
     
    If Not IsNumeric(Range("F19")) Or Len(Range("f19")) <> 4 Then
        MonMessErreur = "La valeur saisie en F19 doit être numérique et de 4 caractères" & Chr(10)
    End If
     
    If IsEmpty(Range("F21")) Then
        MonMessErreur = MonMessErreur & "Vous avez oublier l'année"
    End If
     
    'etc
     
    If MonMessErreur = "" Then
        MsgBox "Formulaire validé"
        LeNomDeTonAutreMacro 'pour renvoyer vers l'autre procédure
    Else
        MsgBox MonMessErreur
    End If
     
    End Sub

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 165
    Par défaut Impeccable
    D'accord sa fonctionne, le seul hic c'est qui balance quand même le programme, je voudrais le bloquer tant que les informations du formulaire ne sont pas valide.
    En fin de compte qu'il se repositionne sur la sheet "formulaire", et qu'il continu pas dans le programme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Macro pour sauvegarder des données txt en csv
    Par Vincent32 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/10/2011, 11h34
  2. [XL-2003] Macro de sauvegarde
    Par Edaine dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/07/2011, 11h14
  3. Simplification macro de sauvegarde
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/07/2010, 11h25
  4. Macro pour sauvegardes multiples d'un même fichier
    Par gigotdagneau dans le forum Conception
    Réponses: 11
    Dernier message: 26/10/2009, 12h26
  5. desactiver macros apres sauvegarde
    Par will Igetit dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/08/2008, 22h08

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