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 :

Get data VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Février 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Février 2014
    Messages : 11
    Par défaut Get data VBA
    Bonjour à tous
    Je me heurte à un probléme qui dépasse mes modestes connaissances en vba.
    J'ai trouvé sur le net un code pour importer des données d'un classeur fermé sans l'ouvrir.
    J'ai attribué un bouton à la macro GetData_NESTOR

    Ce qu'il ya c'est que le code a bien fonctionné le premier jour , mais le lendemain il me met l'erreur

    """The file name ,sheet name or Range is invalid of: c/users/..../deskop/BILAN55/NESTOR.xlsm""""

    J'utilise excel 2013 sur W7 64bits

    j'ai beau vérifier les noms des fichiers mais tout me parait bien renseignés.
    est ce un probléme de compatiblité des versions excel?

    Merci d'avance de m'aider à avancer dans mon projet.
    Ci joint le code .
    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
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    Option Explicit
     
     
    Public Sub GetData(SourceFile As Variant, SourceSheet As String, _
                       SourceRange As String, TargetRange As Range, Header As Boolean, UseHeaderRow As Boolean)
    ' 30-Dec-2007, working in Excel 2000-2007
        Dim rsCon As Object
        Dim rsData As Object
        Dim szConnect As String
        Dim szSQL As String
        Dim lCount As Long
     
        ' Create the connection string.
        If Header = False Then
            If Val(Application.Version) < 12 Then
                szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                            "Data Source=" & SourceFile & ";" & _
                            "Extended Properties=""Excel 8.0;HDR=No"";"
            Else
                szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=" & SourceFile & ";" & _
                            "Extended Properties=""Excel 12.0;HDR=No"";"
            End If
        Else
            If Val(Application.Version) < 12 Then
                szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                            "Data Source=" & SourceFile & ";" & _
                            "Extended Properties=""Excel 8.0;HDR=Yes"";"
            Else
                szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=" & SourceFile & ";" & _
                            "Extended Properties=""Excel 12.0;HDR=Yes"";"
            End If
        End If
     
        If SourceSheet = "" Then
            ' workbook level name
            szSQL = "SELECT * FROM " & SourceRange$ & ";"
        Else
            ' worksheet level name or range
            szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
        End If
     
        On Error GoTo SomethingWrong
     
        Set rsCon = CreateObject("ADODB.Connection")
        Set rsData = CreateObject("ADODB.Recordset")
     
        rsCon.Open szConnect
        rsData.Open szSQL, rsCon, 0, 1, 1
     
        ' Check to make sure we received data and copy the data
        If Not rsData.EOF Then
     
            If Header = False Then
                TargetRange.Cells(1, 1).CopyFromRecordset rsData
            Else
                'Add the header cell in each column if the last argument is True
                If UseHeaderRow Then
                    For lCount = 0 To rsData.Fields.Count - 1
                        TargetRange.Cells(1, 1 + lCount).Value = _
                        rsData.Fields(lCount).Name
                    Next lCount
                    TargetRange.Cells(2, 1).CopyFromRecordset rsData
                Else
                    TargetRange.Cells(1, 1).CopyFromRecordset rsData
                End If
            End If
     
        Else
            MsgBox "No records returned from : " & SourceFile, vbCritical
        End If
     
        ' Clean up our Recordset object.
        rsData.Close
        Set rsData = Nothing
        rsCon.Close
        Set rsCon = Nothing
        Exit Sub
     
    SomethingWrong:
        MsgBox "The file name, Sheet name or Range is invalid of : " & SourceFile, _
               vbExclamation, "Error"
        On Error GoTo 0
     
    End Sub
     
    Function LastRow(sh As Worksheet)
        On Error Resume Next
        LastRow = sh.Cells.Find(What:="*", _
                                After:=sh.Range("A1"), _
                                Lookat:=xlPart, _
                                LookIn:=xlFormulas, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlPrevious, _
                                MatchCase:=False).Row
        On Error GoTo 0
    End Function
     
     
    Function Array_Sort(ArrayList As Variant) As Variant
        Dim aCnt As Integer, bCnt As Integer
        Dim tempStr As String
     
        For aCnt = LBound(ArrayList) To UBound(ArrayList) - 1
            For bCnt = aCnt + 1 To UBound(ArrayList)
                If ArrayList(aCnt) > ArrayList(bCnt) Then
                    tempStr = ArrayList(bCnt)
                    ArrayList(bCnt) = ArrayList(aCnt)
                    ArrayList(aCnt) = tempStr
                End If
            Next bCnt
        Next aCnt
        Array_Sort = ArrayList
    End Function
     
     
     
     
    Sub GetData_NESTOR()
    ' It will copy the Header row also (the last two arguments are True)
    ' Change the last argument to False if you not want to copy the header row
        GetData ThisWorkbook.Path & "\NESTOR.xlsm", "BILAN1", _
                "A7:S72", Sheets("TDB").Range("A80:S141"), True, True
     
    End Sub

  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,

    Pour simplifier un peu je ferai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    szConnect = "Provider=Microsoft" & IIf(Val(Application.Version) < 12, ".Jet.OLEDB.4.0;", ".ACE.OLEDB.12.0;") & _
                "Data Source=" & SourceFile & ";" & _
                "Extended Properties=""Excel " & _
                IIf(Val(Application.Version) < 12, "8", "12") & ".0;HDR=" & _
                IIf(Header = False, "No", "Yes") & """;"
    au lieu de ça :
    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
     
    If Header = False Then
        If Val(Application.Version) < 12 Then
            szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 8.0;HDR=No"";"
        Else
            szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 12.0;HDR=No"";"
        End If
    Else
        If Val(Application.Version) < 12 Then
            szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 8.0;HDR=Yes"";"
        Else
            szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                        "Data Source=" & SourceFile & ";" & _
                        "Extended Properties=""Excel 12.0;HDR=Yes"";"
        End If
    End If
    mais le fonctionnement est le même. Le message que tu reçois est celui indiqué en fin de proc à savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SomethingWrong:
        MsgBox "The file name, Sheet name or Range is invalid of : " & SourceFile, _
               vbExclamation, "Error"
    Donc, comme tu utilise "ThisWorkbook.Path", mets un point d'arrêt dans "GetData" et contrôle la valeur de la variable "SourceFile" en survolant avec le curseur.
    Quand tu dis :
    Ce qu'il ya c'est que le code a bien fonctionné le premier jour , mais le lendemain il me met l'erreur
    le test est fait avec la même configuration (même PC) à savoir excel 2013 et W7 64 bits ?

  3. #3
    Membre averti
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Février 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Février 2014
    Messages : 11
    Par défaut
    Bonjour
    Merci de ton aide
    J'ai éssayé les fichiers sur un autre ordi avec les memes caractéristiques ( w7 64 bits, excel 2013) et tout fonctionne .Je n'ai plus d'erreur de chemin d'acces
    Par contre je me rends compte que je ne peux pas faire de calculs ( somme, moyenne...) avec les données importées du classeur fermé. En fait c'est comme si les données étaient copiées au format texte . Les données à l'origine sont issues de calculs de valeurs donc bien des nombres.
    Une idée??
    Je suis entrain d'essayer d'adapter ton code à mes fichiers
    A quelle macro dois je affecter le bouton de commande?
    Merci encore de ton aide

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = environ("userprofile") & "\deskop\BILAN55\NESTOR.xlsm"
    Édite: To problème de format de données dans Excel vient du fait que les données transite par ado et vba .
    Il faut reformater tes données dans ta requête SQL.

    Pourquoi ne pas en profiter pour que ta requête te retourne tes somme min max moy?


    http://www.developpez.net/forums/d13...e/#post7606752
    Dernière modification par Invité ; 13/10/2015 à 19h13.

  5. #5
    Membre averti
    Femme Profil pro
    Ressources humaines
    Inscrit en
    Février 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Février 2014
    Messages : 11
    Par défaut
    Bonjour et merci Durut
    j'ai bien recupéré le code get data avec le formatage en nombre . Je te remercie
    Mais une fois lancé , j'ai l'erreur du chemin d'acces """The file name ,sheet name or Range is invalid of: c/users/..../deskop/BILAN55/NESTOR.xlsm""""
    Une idée du probléme ?

    Bien cordialement

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Dans ton code tu fais début.print environ("userprofile") & "\deskop\BILAN55\NESTOR.xlsm"Ensuite tu ouvre la fenêtre d'exécution raccourci clavier [ctrl] + [g] tu copy cole le résultat dans la barre d'adresse de Windows explorer et tu cherche l'erreur!

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

Discussions similaires

  1. Get Data CellTable
    Par Ma29200 dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 07/06/2013, 08h49
  2. Problème Set/Get Data Callback
    Par TheDwarf01 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 01/02/2012, 15h06
  3. Error get DATA response parameter (wrong length)
    Par Creanet dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2009, 14h08
  4. [eCommerce] Error get DATA response parameter (wrong length)
    Par didi38 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 06/05/2009, 13h08
  5. [VBA-E] Cherche codes équivalents à "Read, Data, Restore (Basic)"
    Par Brunox73 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/05/2006, 13h17

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