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 d'importation automatique en fonction d'un fichier choisi par userform - Optimisation du code qui ram :( [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Country Finance Manager
    Inscrit en
    Juin 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Country Finance Manager

    Informations forums :
    Inscription : Juin 2014
    Messages : 38
    Points : 35
    Points
    35
    Par défaut Macro d'importation automatique en fonction d'un fichier choisi par userform - Optimisation du code qui ram :(
    Bien le bonjour au forum,

    Je viens vers vous pour une problématique auquelle je fais face et qui dépasse mes compétences, l'optimisation d'un code qui fonctionne parfaitement, seulement lorsque la cible est une base donnée un peu plus grosse mon code ram et ne finit jamais.

    J'ai mis des pauses de 6 secondes pour attendre l'ouverture de mon fichier mais rien y fait il continue de rammer, est-ce que l'un d'entre vous aurait une petite idée ou un lien pour m'aiguiller ? (j'ai rien trouvé sur internet )

    Ci après mon code :

    D'abord le code de mon userform :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CommandButton1_Click()
    fileToOpen = Application.GetOpenFilename(, , "file explorer")
    If fileToOpen <> False Then
    Expat_way.Value = fileToOpen
    End If
    End Sub
    Private Sub CommandButton2_Click()
    Call Import_Nat
    Unload Me
    End Sub
    Private Sub CommandButton3_Click()
    Unload Me
    End Sub
    Puis celui de ma macro :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    Sub Import_Nat()
    With UF_Import_Nat
        'control
        If .Expat_way.Value = "" Then
            Message = "Could you select a file !"
            .Expat_way.SetFocus
            Exit Sub
        End If
    fileToOpen2 = .Expat_way.Value
    End With
     
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Feuil7.Cells.Clear
     
    Dim Expat_WB As Workbook
    Dim Myfile As String
    Dim Answer As Long
     
    Myfile = "fileToOpen2"
    Verif = IsFileOpen(Myfile)
     
    If Verif = True Then
        Answer = MsgBox("The National allocation file is already opened, do you want to extract from the opened version ?", vbYesNo, "WARNING : File already opened")
        Select Case Answer
            Case vbYes
                Set Expat_WB = GetObject(fileToOpen2)
     
                Application.Wait (Now + TimeValue("0:00:06"))
                With Expat_WB
                Application.CutCopyMode = False
                .Sheets("Staff list").Cells.Copy
                End With
     
                ThisWorkbook.Activate
                Feuil7.Activate
                Range("A1").Select
                With Selection
                .PasteSpecial xlPasteValues
                .PasteSpecial xlPasteFormats
                End With
     
                Application.CutCopyMode = False
     
                Application.ScreenUpdating = True
                Range("A1").Select
                Feuil1.Activate
     
                Expat_WB.Close (True)
                MsgBox ("National allocation imported")
     
            Case vbNo
                Workbooks.Open Filename:=fileToOpen2
                'corriger erreur si déjà ouvert = trouver code correspondant
                Set Expat_WB = GetObject(fileToOpen2)
     
                Application.Wait (Now + TimeValue("0:00:06"))
                With Expat_WB
                Application.CutCopyMode = False
                .Sheets("Staff list").Cells.Copy
                End With
     
                ThisWorkbook.Activate
                Feuil7.Activate
                With Selection
                .PasteSpecial xlPasteValues
                .PasteSpecial xlPasteFormats
                End With
     
                Application.CutCopyMode = False
     
                Application.ScreenUpdating = True
                Range("A1").Select
                Feuil1.Activate
     
                Expat_WB.Close (True)
                MsgBox ("National allocation imported")
        End Select
     
    Else
        Workbooks.Open Filename:=fileToOpen2
     
        Set Expat_WB = GetObject(fileToOpen2)
     
                Application.Wait (Now + TimeValue("0:00:06"))
                With Expat_WB
                Application.CutCopyMode = False
                .Sheets("Staff list").Cells.Copy
                End With
     
        ThisWorkbook.Activate
        Feuil7.Activate
        Range("A1").Select
        With Selection
        .PasteSpecial xlPasteValues
        .PasteSpecial xlPasteFormats
        End With
     
        Application.CutCopyMode = False
     
        Application.ScreenUpdating = True
        Range("A1").Select
        Feuil1.Activate
        Range("C20").Value = Date
        Expat_WB.Close (True)
        MsgBox ("National allocation imported")
    End If
    Application.EnableEvents = True
    End Sub
    Un très grand merci d'avance pour vos éclairages.

    Bien cordialement,

    Thallhos

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    plutôt que de copier TOUTES les cellules de la feuille, ne pourrais-tu pas restreindre à la plage utile (UsedRange) ou carrément copier cette feuille ?

    Si le fichier est très lourd, malheureusement il n'y a pas de méthode miracle pour son ouverture, faut charger en mémoire tout son contenu

    à moins de rappartrier les éléments en faisait une requête sur classeur fermé, mais tu perdras toutes les mises en formes

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Country Finance Manager
    Inscrit en
    Juin 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Country Finance Manager

    Informations forums :
    Inscription : Juin 2014
    Messages : 38
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    plutôt que de copier TOUTES les cellules de la feuille, ne pourrais-tu pas restreindre à la plage utile (UsedRange) ou carrément copier cette feuille ?

    Si le fichier est très lourd, malheureusement il n'y a pas de méthode miracle pour son ouverture, faut charger en mémoire tout son contenu

    à moins de rappartrier les éléments en faisait une requête sur classeur fermé, mais tu perdras toutes les mises en formes
    Hello Joe,

    Je te remercie de ta réponse, en fait les informations contenues dans cette feuille sont liées à des formules excel dans d'autres onglets, donc je veux surtout pas créer de nouvelle feuille, et les données ne sont pas fixes c'est une base de données donc mise à jour tout les mois et sa taille change.

    Je vais essayer de sélectionner toutes les lignes jusqu'à la dernière non vide, je te fais un retour asap


    Merci encore,

    Thal

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Country Finance Manager
    Inscrit en
    Juin 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Country Finance Manager

    Informations forums :
    Inscription : Juin 2014
    Messages : 38
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par Thallhos Voir le message
    Hello Joe,

    Je te remercie de ta réponse, en fait les informations contenues dans cette feuille sont liées à des formules excel dans d'autres onglets, donc je veux surtout pas créer de nouvelle feuille, et les données ne sont pas fixes c'est une base de données donc mise à jour tout les mois et sa taille change.

    Je vais essayer de sélectionner toutes les lignes jusqu'à la dernière non vide, je te fais un retour asap


    Merci encore,

    Thal
    Okay, je viens de tester, c'est moins beau visuellement mais ca fonctionne, merci encore !!

    Bonne journée

    Thal

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

Discussions similaires

  1. [WD-2013] mise en forme automatique des titres d'un fichier word par un macro vba
    Par TheBoumer dans le forum VBA Word
    Réponses: 0
    Dernier message: 18/05/2017, 16h06
  2. Réponses: 1
    Dernier message: 21/04/2011, 11h30
  3. [OL-2007] Macro d'importation automatique de liste de contact csv ";"
    Par Tekpaaf dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 23/05/2010, 00h57
  4. Réponses: 6
    Dernier message: 09/10/2009, 15h54
  5. Réponses: 1
    Dernier message: 15/04/2008, 22h24

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