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 :

Nombre stocké sous forme de texte [XL-2010]


Sujet :

Macros et VBA Excel

  1. #21
    Invité
    Invité(e)
    Par défaut bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql="SELECT IIf(IsNumeric([F7]),CDbl([F7]),[F7]) AS Expr1,..."
    ... = Etc!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    szSQL = "SELECT [F1],[F2],[F3],[F4],[F5],[F6],[F7],[F8],[F9],[F10],[F11],[F12],[F13],[F14],[F15],[F16],[F17],[F18],[F19],[F20],"
    szSQL =szSQL & "[F21],[F22],[F23],[F24],[F25],[F26],[F27],[F28],[F29],[F30],[F31],[F32],[F33],[F34],[F35],[F36],[F37],[F38],[F39],"
    szSQL =szSQL & "[F40],[F41],[F42],[F43],[F44],[F45],[F46],[F47],[F48],[F49],[F50],[F51],[F52],[F53],[F54],[F55],[F56]"
    szSQL =szSQL & " FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    si tu ne connais pas d'avance le nombre de champs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    szSQL = "SELECT  top 1 * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    rsData.Open szSQL, rsCon, 0, 1, 1
     
    szSQL = "SELECT  "
    For i = 0 To rsData.Fields.Count - 1
        szSQL = szSQL & "[" & rsData(i).Name & "],"
    Next
    szSQL = Left(szSQL, Len(szSQL) - 1) & " FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    rsData.Open szSQL, rsCon, 0, 1, 1
    la même chose avec mise en forme conditionelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    szSQL = "SELECT  top 1 * FROM [" & SourceSheet$ & "$" & SourceRange$ & "],"
    rsData.Open szSQL, rsCon, 0, 1, 1
     
    szSQL = "SELECT  "
    For i = 0 To rsData.Fields.Count - 1
        szSQL = szSQL & "iff(isdate(iff(IsNumeric([" & rsData(i).Name & "]),"
        szSQL = szSQL & "CDbl([" & rsData(i).Name & "]),[" & rsData(i).Name & "])"
        szSQL = szSQL & "and instr(1,[" & rsData(i).Name & "],'/'))<>0,"
        szSQL = szSQL & "Format([" & rsData(i).Name & "],'yyyy-mm-dd hh:mm:ss'),"
        szSQL = szSQL & "iff(IsNumeric([" & rsData(i).Name & "]),CDbl([" & rsData(i).Name & "]),"
        szSQL = szSQL & "[" & rsData(i).Name & "]) ),"
    Next
    szSQL = Left(szSQL, Len(szSQL) - 1) & " FROM [" & SourceSheet$ & "$" & SourceRange$ & "],"
    Dernière modification par Invité ; 05/12/2013 à 14h24.

  2. #22
    Membre régulier Avatar de Excel_man
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 98
    Points : 89
    Points
    89
    Par défaut
    Bonjour,
    Décidément, j'y arrive pas! Robert, tu vas peux être me trouver obtus mais les requête c'est vraiment pas mon truc
    Avec ta dernière réponse et le boulot fait pour répondre a mon besoin, je me sentais obligé d'y arriver... Ben non
    Je met le code complet avec la ligne (ligne 39) que j'utilisai avant en commentaire et ton bout code dessous. J'ai,(ligne 44) le message d'erreur: Erreur 91: variable objet ou variable de bloc With non défini:
    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
    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
        Dim i%
     
        ' 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$ & "];"
     
    ' Modification faite par Rdurupt pour eviter l'erreur "Nombre stocké sous forme de texte":
     
                            szSQL = "SELECT  top 1 * FROM [" & SourceSheet$ & "$" & SourceRange$ & "],"
                            rsData.Open szSQL, rsCon, 0, 1, 1 '********* Erreur 91: variable objet ou variable de bloc With non défini **************
     
                            szSQL = "SELECT  "
                            For i = 0 To rsData.Fields.Count - 1
                                szSQL = szSQL & "iff(isdate(iff(IsNumeric([" & rsData(i).Name & "]),"
                                szSQL = szSQL & "CDbl([" & rsData(i).Name & "]),[" & rsData(i).Name & "])"
                                szSQL = szSQL & "and instr(1,[" & rsData(i).Name & "],'/'))<>0,"
                                szSQL = szSQL & "Format([" & rsData(i).Name & "],'yyyy-mm-dd hh:mm:ss'),"
                                szSQL = szSQL & "iff(IsNumeric([" & rsData(i).Name & "]),CDbl([" & rsData(i).Name & "]),"
                                szSQL = szSQL & "[" & rsData(i).Name & "]) ),"
                            Next
                            szSQL = Left(szSQL, Len(szSQL) - 1) & " 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

  3. #23
    Invité
    Invité(e)
    Par défaut bonjour,Excel_man
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    On Error GoTo SomethingWrong
     
        Set rsCon = CreateObject("ADODB.Connection")
        Set rsData = CreateObject("ADODB.Recordset")
    ta connexion ce fait après l'exécution de la requête. il faut remettre les chose dans l'ordre.
    de plus une l'égère absence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'c'est pas "iff(" mais
    "iif("
    Dernière modification par Invité ; 09/12/2013 à 10h15.

  4. #24
    Membre régulier Avatar de Excel_man
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 98
    Points : 89
    Points
    89
    Par défaut
    Bonjour,
    Robert, j'ai fait un nouvel essai avec le code modifié et j'ai un autre message d'erreur maintenant:



    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
    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
        Dim i%
     
        ' 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$ & "];"
    ' Modification faite par Rdurupt pour eviter l'erreur "Nombre stocké sous forme de texte":
     
        On Error GoTo SomethingWrong
        Set rsCon = CreateObject("ADODB.Connection") '>> déplacé
        Set rsData = CreateObject("ADODB.Recordset") '>> déplacé
     
                            szSQL = "SELECT  top 1 * FROM [" & SourceSheet$ & "$" & SourceRange$ & "],"
                            rsData.Open szSQL, rsCon, 0, 1, 1 '********* Erreur **************
     
                            szSQL = "SELECT  "
                            For i = 0 To rsData.Fields.Count - 1
                                szSQL = szSQL & "iif(isdate(iff(IsNumeric([" & rsData(i).Name & "]),"
                                szSQL = szSQL & "CDbl([" & rsData(i).Name & "]),[" & rsData(i).Name & "])"
                                szSQL = szSQL & "and instr(1,[" & rsData(i).Name & "],'/'))<>0,"
                                szSQL = szSQL & "Format([" & rsData(i).Name & "],'yyyy-mm-dd hh:mm:ss'),"
                                szSQL = szSQL & "iif(IsNumeric([" & rsData(i).Name & "]),CDbl([" & rsData(i).Name & "]),"
                                szSQL = szSQL & "[" & rsData(i).Name & "]) ),"
                            Next
                            szSQL = Left(szSQL, Len(szSQL) - 1) & " 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
    Images attachées Images attachées  

  5. #25
    Invité
    Invité(e)
    Par défaut
    si le top 1 gène on l'enlève

    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
    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
        Dim i%
     
        ' 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$ & "];"
    ' Modification faite par Rdurupt pour eviter l'erreur "Nombre stocké sous forme de texte":
     
        On Error GoTo SomethingWrong
        Set rsCon = CreateObject("ADODB.Connection") '>> déplacé
        Set rsData = CreateObject("ADODB.Recordset") '>> déplacé
     
                            szSQL = "SELECT   * FROM [" & SourceSheet$ & "$" & SourceRange$ & "],"
                            rsData.Open szSQL, rsCon, 0, 1, 1 '********* Erreur **************
     
                            szSQL = "SELECT  "
                          For i = 0 To rsData.Fields.Count - 1
        szSQL = szSQL & "IIf(IsDate([" & rsData.Fields(i).Name & "]) "
        szSQL = szSQL & "And InStr([" & rsData.Fields(i).Name & "],'/')<>0,"
        szSQL = szSQL & "Format([" & rsData.Fields(i).Name & "],'yyyy-mm-dd hh:mm:ss'),"
        szSQL = szSQL & "IIf(IsNumeric([" & rsData.Fields(i).Name & "]),"
        szSQL = szSQL & "CDbl([" & rsData.Fields(i).Name & "]),[" & rsData.Fields(i).Name & "])),"
    Next
                            szSQL = Left(szSQL, Len(szSQL) - 1) & " 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

  6. #26
    Membre régulier Avatar de Excel_man
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 98
    Points : 89
    Points
    89
    Par défaut
    Je viens de faire le test et j'ai exactement la même erreur.

  7. #27
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    szSQL = "SELECT  top 1 * FROM [" & SourceSheet$ & "$" & SourceRange$ & "],"
    a la fin de la requête j'ai mis une virgule!!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    szSQL = "SELECT  top 1 * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
                            rsData.Open szSQL, rsCon, 0, 1, 1 '********* Erreur **************
     
                            szSQL = "SELECT  "
                          For i = 0 To rsData.Fields.Count - 1
        szSQL = szSQL & "IIf(IsDate([" & rsData.Fields(i).Name & "]) "
        szSQL = szSQL & "And InStr([" & rsData.Fields(i).Name & "],'/')<>0,"
        szSQL = szSQL & "Format([" & rsData.Fields(i).Name & "],'yyyy-mm-dd hh:mm:ss'),"
        szSQL = szSQL & "IIf(IsNumeric([" & rsData.Fields(i).Name & "]),"
        szSQL = szSQL & "CDbl([" & rsData.Fields(i).Name & "]),[" & rsData.Fields(i).Name & "])),"
    Next
                            szSQL = Left(szSQL, Len(szSQL) - 1) & " FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"

  8. #28
    Membre régulier Avatar de Excel_man
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 98
    Points : 89
    Points
    89
    Par défaut
    Je viens d'essayer et ça bloque toujours au même en endroit avec le même message, j'ai aussi essayé sans le TOP1 mais toujours pareil et j'ai aussi essayé en remettant la connexion comme a l'origine et j'ai un autre message mais toujours sur la même ligne.

  9. #29
    Invité
    Invité(e)
    Par défaut bonjour,
    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
    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
        Dim i%
     
        ' 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$ & "];"
    ' Modification faite par Rdurupt pour eviter l'erreur "Nombre stocké sous forme de texte":
     
        On Error GoTo SomethingWrong
        Set rsCon = CreateObject("ADODB.Connection") '>> déplacé
        Set rsData = CreateObject("ADODB.Recordset") '>> déplacé
        rsCon.Open szConnect 'tu n'as pas mis ta connexion!
     
                            szSQL = "SELECT   * FROM [" & SourceSheet$ & "$" & SourceRange$ & "],"
                            rsData.Open szSQL, rsCon, 0, 1, 1 '********* Erreur **************
     
                            szSQL = "SELECT  "
                          For i = 0 To rsData.Fields.Count - 1
        szSQL = szSQL & "IIf(IsDate([" & rsData.Fields(i).Name & "]) "
        szSQL = szSQL & "And InStr([" & rsData.Fields(i).Name & "],'/')<>0,"
        szSQL = szSQL & "Format([" & rsData.Fields(i).Name & "],'yyyy-mm-dd hh:mm:ss'),"
        szSQL = szSQL & "IIf(IsNumeric([" & rsData.Fields(i).Name & "]),"
        szSQL = szSQL & "CDbl([" & rsData.Fields(i).Name & "]),[" & rsData.Fields(i).Name & "])),"
    Next
                            szSQL = Left(szSQL, Len(szSQL) - 1) & " 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

  10. #30
    Membre régulier Avatar de Excel_man
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2011
    Messages : 98
    Points : 89
    Points
    89
    Par défaut Bravo!
    Bonjour,
    Merci Robert, ça marche très bien
    Mais ça reste du chinois, ces requêtes! Heureusement on a un traducteur dans la bande.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2007] Nombre stocké sous forme de texte
    Par torvald dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/05/2011, 13h10
  2. Nombre stocké sous forme de texte .xls
    Par pfellmann dans le forum iReport
    Réponses: 0
    Dernier message: 05/08/2009, 11h11
  3. Nombre stocké sous forme de texte
    Par Archampi dans le forum Excel
    Réponses: 2
    Dernier message: 05/11/2008, 20h53
  4. Nombre stocké sous forme de texte
    Par krhyme dans le forum IHM
    Réponses: 5
    Dernier message: 31/10/2007, 00h12
  5. [VBA-E] Probleme avec Nombre stocké sous forme de texte
    Par AliochaBada dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/07/2006, 01h46

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