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 : problème de mise à jour sans ouvrir fichier


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2012
    Messages : 12
    Par défaut Macro : problème de mise à jour sans ouvrir fichier
    Bonjour à tous,

    Je suis novice dans le développement et je dois créer une macro qui va chercher des informations dans un autre fichier sans l'ouvrir. En cherchant sur ce site, j'ai trouvé beaucoup d'informations intéressante et j'en suis arrivé à cela :

    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
    Private Sub cmdValider_Click()
     
        Dim Chemin_Fichier_Modele As String, Chemin_MOAP As String, Chemin_Complet_MOAP As String
     
     
        ' Chemin du Fichier MOAP
     
        Chemin_Complet_MOAP = TextBoxMOAP.Text
        Chemin_MOAP = TextNameMOAP.Text
        Chemin_Fichier_Modele = ThisWorkbook.Name
        ThisWorkbook.Worksheets("Suivi").Range("B1").Value = Chemin_Complet_MOAP
     
        ' Vérifie si un fichier a été choisie
        If TextBoxMOAP.Text = "" Then
            MsgBox "Choisissez un fichier Excel (xls ou xlsm)"
            TextBoxMOAP.SetFocus
     
        Else
            ' Désactive le mise à jour de l'écran
            Application.ScreenUpdating = False
     
            Application.DisplayStatusBar = True
     
            Application.StatusBar = "En cours..."
            DoEvents
     
            Dim Cn As ADODB.Connection
            Dim Fichier As String
            Dim NomFeuille As String, texte_SQL As String
            Dim Rst As ADODB.Recordset
     
     
                'Définit le classeur fermé servant de base de données
                Fichier = "C:\Users\E51973\Desktop\MED-FML-2010-000129.xlsx"
                'Nom de la feuille dans le classeur fermé
                NomFeuille = "MED-FML-2010-000129"
     
                Set Cn = New ADODB.Connection
     
                '--- Connection ---
                With Cn
                     .Provider = "Microsoft.Jet.OLEDB.4.0"
                     .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                     & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
                     .Open
                End With
     
     
                ' Montant décidés de l'année en cours
                Range("B23").FormulaR1C1 = "=SUM('MED-FML-2010-000129.xlsx'!R10C46:R1500C46)/1000"
     
                Cn.Close
                Set Cn = Nothing
     
     
        End If
    End Sub

    En fait, dans excel j'ai créé une boite de dialogue sur lequel je charge un fichier et qui ensuite est censé me modifier une cellule dans mon fichier de base.
    Cependant cela marche que si j'ouvre le deuxième fichier. Pourquoi cela ?
    C'est assez gênant pour mon application.

    Je vous remercie d'avance pour votre aide.

    Salutations,

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    A la vue de ton code (qui d'ailleurs ne te sers à rien car tu ne récupère pas ce que retourne le RecordSet), je pense que tu peux te passer d'utiliser ADO. Il te suffit de construire ta formule de la manière suivante :
    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
     
    Sub Recup()
     
        Dim Chemin As String
        Dim Classeur As String
        Dim Feuille As String
        Dim Plage As String
     
        Chemin = "C:\Users\E51973\Desktop\"
        Classeur = "MED-FML-2010-000129.xlsx"
        Feuille = "MED-FML-2010-000129"
        Plage = "AT10:AT1500"
     
        Range("B23").Formula = "=SUM('" & Chemin & "[" & Classeur & "]" & Feuille & "'!" & Plage & ")/1000"
     
        'si tu ne veux conserver que la valeur sans la formule, ôte l'apostrophe
        'Range("B23").Value = Range("B23").Value
     
    End Sub
    Si tu ne veux conserver que la valeur, libère cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("B23").Value = Range("B23").Value
    Ton code fonctionne (ou plutôt ta formule) seulement quand ton classeur est ouvert car tu ne précise pas le chemin du classeur dans ta formule.

    Hervé.

  3. #3
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2012
    Messages : 12
    Par défaut
    Merci beaucoup Hervé.
    Cela fonctionne. Je ne sais pas pourquoi je me suis tant compliqué.

    J'ai une deuxième petite question.
    Si je veux prendre un fichier au hazard en le selectionnant depuis une boîte de dialogue, comment dois je m'y prendre ?

    Est ce que si je met les noms des boites de dialogue cela suffit ?
    ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Chemin ="TextBox.Text"
    Classeur="TextName.Text"
    En réalité ce ne sera pas toujours le même fichier.

    Merci pour ton aide et désolé pour si tout n'est pas très clair.

    Thomas,

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/10/2011, 12h52
  2. [XL-2003] Code macro avertissement de mise à jour fichier, à l'ouverture d'un fichier
    Par pourinfo dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/03/2010, 10h32
  3. [E-03] Macro qui se lance tous les jours sans ouvrir le document excel ?
    Par doublenico dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/10/2008, 10h06
  4. [DOM] Problème de mise à jour du fichier
    Par Galip dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 16/01/2008, 14h45

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