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 :

Sauvegarde d'un tableau en Vba [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Novembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Novembre 2012
    Messages : 17
    Par défaut Sauvegarde d'un tableau en Vba
    Bonjour à tous,

    une fois de plus je fais appelle à vos connaissances.
    Je dispose d'une base de données dans un fichier de travail. Il m'arrive de la modifier. A chaque fois que je fais des modifications, je tiens à faire une sauvegarde sur un fichier externe.

    Lorsque je fais cette sauvegarde, le fichier de travail est indisponible pendant un certain temps mais ce temps est à mon goût trop long. Voici, le code qui me permet de faire cette sauvegarde.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub Exporter()
    ' Neutralisation de l'affichage et des alertes
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
    'Ouverture du fichier de sauvegarde
        Workbooks.Open Filename:= _
                       "C:\Sauvegarde.xlsm"
    'Activation de la feuille
        Sheets("DONNEES").Activate
    'Selection et effacement du tableau de sauvegarde
        With Sheets("DONNEES").ListObjects("Tableau3")
            If .ListRows.Count > 0 Then .DataBodyRange.Delete
        End With
        Range("A2").Select
    'Activation du Gestionnaire
        Windows("Gestionnaire.xlsm").Activate
    'Selection et copie du tableau à sauvegarder
        Application.Goto Reference:="Tab_Donnees"
        Selection.Copy
    'Activation de la sauvegarde
        Windows("Sauvegarde.xlsm").Activate
    'Collage du tableau à sauvegarder
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                        :=False, Transpose:=False
        Range("A2").Select
    'Sauvegarde du fichier
        ActiveWorkbook.Save
        ActiveWindow.Close
    'Retour sur le fichier de travail
        Windows("Gestionnaire.xlsm").Activate
        F_Donnees.Activate
        Application.CutCopyMode = False
        F_Donnees.[A2].Select
        F_Travail.Activate
    'Activation de l'affichage et des alertes
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    End Sub
    Est ce que ce code pourrait être fait différemment? Auriez-vous une idée pour que cela soit fait plus... "rapidement"?

    Merci d'avance pour vos réponses.
    Bonne journée.

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut
    Bonjour ems69.

    As-tu essayé d'éxécuter ta macro pas à pas pour voir exactement la ligne de commande qui prend du temps de traitement?
    Il me semble que plus ton tableau sera important en données, plus le "paste.special" sera long...

    D'un point de vue personnel, j'utilise dans mes traitements VBA des tableaux internes afin d'optimiser les performances.

    Je crée un tableau à 2 dimensions TAB_INT(NB_LIG, NB_COL), puis je fais une boucle pour charger mon tableau avec toutes les cellules dont j'ai besoin. Ensuite, il suffit de boucler sur le tableau pour le décharger sur une autre feuille.

    Mais celà implique de modifier ton code. D'autant plus que je ne suis qu'un novice, je ne peux donc pas te confirmer qu'il y aura un gain de temps...

  3. #3
    Membre averti
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Novembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Novembre 2012
    Messages : 17
    Par défaut
    Bonjour Erhodes,

    En faite, lorsque j’exécute mon code en mode pas à pas, j'ai l'impression que toutes mes commandes prennent du temps.

    Qu'appelles tu "tableaux internes"? Car, le tableau que j'essaie de sauvegarder est tout seul sur une feuille et il n'y a rien d'autre que ça sur cette feuille. Est ce que cela sous entend que je dois faire une feuille "temporaire"?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 8
    Par défaut
    ... tu pourrais supprimer la feuille puis copier la feuille d'un classeur à l'autre puis tout sélectionner et collage spécial valeurs pour supprimer les formules si nécessaire. A voir si ça roule plus vite...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub MAJ_DONNEES_DANS_SAUVEGARDE()
        Application.ScreenUpdating = False: Application.DisplayAlerts = False
        L_ORIGINE = ActiveWorkbook.Name
        On Error Resume Next: Workbooks.Open Filename:="C:\Sauvegarde.xlsm": Sheets("DONNEES").Delete: On Error GoTo 0
        Windows(L_ORIGINE).Activate: Sheets("DONNEES").Copy Before:=Workbooks("Sauvegarde.xlsm").Sheets(1)
        Windows("Sauvegarde.xlsm").Activate: Sheets("DONNEES").Select
        Cells.Copy: Cells.PasteSpecial Paste:=xlPasteValues: [A1].Select
        ActiveWorkbook.Save: ActiveWindow.Close: Application.DisplayAlerts = True
    End Sub

  5. #5
    Nouveau candidat au Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut
    Si dans ton mode pas à pas tout prend du temps, je ne sais pas trop quoi te dire...

    Quand je parlais de tableaux internes, c'était par rapport à des zones virtuelles de stockage de données. Je n'utilise peut-être pas les bons termes.
    Par contre, n'utilise pas de feuilles temporaires, ca risque d'augmenter ton temps de traitement!

    Sinon, ton tableau il fait quelle taille (lignes, colonnes) à peu prêt?
    Tu as tenté de faire un copier coller à la mano pour voir si c'est à cause du tableau ou bien du code?

  6. #6
    Membre averti
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Novembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable sécurité

    Informations forums :
    Inscription : Novembre 2012
    Messages : 17
    Par défaut
    Re bonjour à tous,

    @Excelfan: Cela fonctionne parfaitement, je n'avais pas penser à carrément supprimer la feuille.

    @ Erhodes: Mon tableau peut avoir une taille variable. Actuellement, il comporte pas loin de 800 lignes sur 10 colonnes.
    Concernant le code, j'avais utilisé l'enregistreur de macro avant de le modifier pour qu'il soit plus "léger".

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/06/2008, 10h34
  2. Réponses: 4
    Dernier message: 29/04/2008, 09h52
  3. [VBA-E] Comment créer un tableau sous vba excel
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/01/2007, 09h52
  4. Sauvegarde d'un tableau dans mysql
    Par cedre22 dans le forum Administration
    Réponses: 1
    Dernier message: 11/01/2006, 21h02
  5. [BD Access] Sauvegarde d'un tableau
    Par Tips dans le forum C++
    Réponses: 3
    Dernier message: 07/01/2006, 19h51

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