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. #1
    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 Nombre stocké sous forme de texte
    Bonjour,
    J'ai passé plusieurs heures chercher comment lire des données dans un classeur fermé et a chaque fois soit la routine était très longue a s’exécuter soit je n'arrivé pas a adapter le code a mon cas. Finalement, c'est sur la page de Ron de Bruin: http://www.rondebruin.nl/win/s3/win024.htm que j'ai fini par trouvé mon bonheur.
    Enfin, c'est ce que que je croyais jusqu’à’à ce que me rende compté que les nombres stockés sous forme de texte, ce qui bloque certaines formules.
    Quelqu’un connait-il cette macro o une façon de de remettre sous forme de nombre mes infos?
    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Poste plutôt ton code que ceux de la page de Ron deBruin.

  3. #3
    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
    Voici la fonction que l'on appel par :
    GetData Range("Chemin").Value & Range("Fichier").Value, "CONFIG", "B14:B25", Sheets("CONFIG").Range("B14"), False, False
    Les options a la fin (False, False) servent a definir si la plage comporte une entête.
    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
    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

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cdbl(cequetuveuxconvertirennombre)

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Nulle part, dans le code que tu as publié la variable "TargetRange" n'est définie
    Essaie de modifier comme ceci :
    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
    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
                Numérique (TargetRange)
            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
                    Numérique (TargetRange)
                Else
                    TargetRange.Cells(1, 1).CopyFromRecordset rsData
                    Numérique (TargetRange)
                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
    et ajoute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Numérique(TargetRange)
        Dim C As Range
        For Each C In TargetRange
            If IsNumeric(C) Then
                C.NumberFormat = "General"
                C.Value = CDbl(C.Value)
            End If
        Next C
    End Sub

  6. #6
    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,
    Merci pour vos réponse. J'ai d'abord essayé, comme me la proposé EngueEngue un Cdbl en bouclant sur chaque cellule de ma plage avec un test IsNumeric et ca marche mais c'est très long a s’exécuter.

    Et je viens maintenant d'essayer la proposition de Daniel et ça plante dans le Sub Numeric. Aprés la ligne "For Each...", j'ai une erreur 424:"Objet requis"
    Par contre j'ai vu que la variable TargetRange est définie comme un Range comme paramètre de la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Sub GetData(SourceFile As Variant, SourceSheet As String, _
                       SourceRange As String, TargetRange As Range, Header As Boolean, UseHeaderRow As Boolean)

  7. #7
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Oui, il faut lui passer la plage TableRange en paramètre. Sinon le principe est celui de "EngueEngue".

    Par contre j'ai vu que la variable TargetRange est définie comme un Range comme paramètre de la fonction.
    Oui mais qu'est-ce que tu passes comme paramètre quand tu appelles la fonction GetData ?

  8. #8
    Invité
    Invité(e)
    Par défaut bonjour,
    fais ta conversion dans ta requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sql="Select CDbl([MyNum]) as MonNombre ,....

  9. #9
    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
    Bonsoir,
    Daniel,
    Les paramètres pour appeler la fonction sont dans l'ordre:
    - Le répertoire du fichier fermé & le nom du fichier fermé
    - Le nom de la feuille du fichier fermé (dans mon exemple, l'onglet source et destination ont le même nom)
    - La plage des cellules contiguës a lire dans fichier fermé
    - La cellule de mon fichier a partir de la quelle je colle la plage copiée
    - Les 2 "false" correspondent a des options sur les entêtes (existant? a recopier?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetData Range("Chemin").Value & Range("Fichier").Value, "CONFIG", "B14:B25", Sheets("CONFIG").Range("B14"), False, False
    Robert,
    Sql="Select CDbl([MyNum]) as MonNombre ,.... moi pas comprendre
    Ce code n'est pas de moi , et je n'en saisie pas tout le sens notamment ce Sql....
    Tu termine par .... Est-ce que je suis sensé finir ta phrase? Si oui, RDV dans plusieurs mois.
    Merci quand même.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Excel_man Voir le message
    Bonsoir,
    Robert,
    Sql="Select CDbl([MyNum]) as MonNombre ,.... moi pas comprendre
    Ce code n'est pas de moi , et je n'en saisie pas tout le sens notamment ce Sql....
    Tu termine par .... Est-ce que je suis sensé finir ta phrase? Si oui, RDV dans plusieurs mois.
    Merci quand même.
    effectivement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    ceci est mon code; pas besoin de traitement supplémentaire. la mise en forme ce fait dans la requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     szSQL = "SELECT cdbl([Champ1]) ,[Champ2] FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    ...
    TargetRange.Cells(1, 1).CopyFromRecordset rsData
    tu es sensé connaitre ta requête! je suis d'accord RDV dans plusieurs mois, voir jamais!

  11. #11
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    A rdurupt :

    Apparemment, il s'agit d'une requête sur une plage Excel sans entêtes.

    A Excel_man:

    Remplace les 3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Numérique (TargetRange)
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Numérique(SourceRange, TargetRange)
    et la macro "Numérique devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Numérique(SourceRange, TargetRange)
        Dim C As Range, Plage As Range
        With Range(SourceRange)
            Set Plage = TargetRange.Resize(.Rows.Count, .Columns.Count)
        End With
        For Each C In TargetRange
            If IsNumeric(C) Then
                C.NumberFormat = "General"
                C.Value = CDbl(C.Value)
            End If
        Next C
    End Sub
    D'une manière générale, tu as un très bon tutoriel en français ici :

    http://silkyroad.developpez.com/VBA/ClasseursFermes/

  12. #12
    Invité
    Invité(e)
    Par défaut bonjour Daniel,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print rsData(0).name
    tu verras que tous le champs ont une entête par défaut.

  13. #13
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Je mourrai moins idiot ce soir

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Je mourrai moins idiot ce soir
    ou demain ça presse pas

  15. #15
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut

  16. #16
    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 suite
    Bonsoir,
    J'ai tourné le pb dans tout les sens avant de faire ce message car je sent que je vais passer pour une truffe .
    J'ai remplacé la ligne Sql... par celle de Robert et ça plante a la ligne 48:


    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
    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$ & "];"
            szSQL = "SELECT cdbl([Champ1]) ,[Champ2] 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 '>>>>>>>>> erreur qui renvoi vers SomethingWrong
    
        ' 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
    En me relisant, je n'ai pas précisé que les infos que vais chercher dans le fichier fermé peuvent être des chiffres, du texte ou ds dates.

    Daniel, j'ai essayé ta proposition de code mais ça ne change rien sur les nombres stockés sous forme de texte.
    Merci pour le lien, je vais m'y pencher... deja j'ai lire au début qu'il fallait avoir les références Microsoft ActiveX Data Objects x.x Library que je n'ai pas et pourtant le code initiale fonctionne ??? Voila ce que j'ai d'installé:
    Images attachées Images attachées   

  17. #17
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    szSQL = "SELECT [F1],[F2] ...FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    Citation Envoyé par rdurupt Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print rsData(0).name
    tu verras que tous le champs ont une entête par défaut.

  18. #18
    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 Il manque SQueLque chose
    Merci tout de même, Robert pour ce nouvelle essai mais ça plante de la même manière (ligne 48) avec une erreur: Erreur de syntaxe dans l'expression "[F2]..".

    J'ai tout de même fini par trouvé un code en fouinant sur le net, que j'utilise une fois l'import des données terminé sur ma plage de destination. Cette macro qui utilise des tableau est suffisamment rapide même si j'aurais préféré ne pas avoir a retraiter les données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub ChgTxtToNum(MyRange As Range)
    Dim var
    Dim i&
    Dim j&
    var = MyRange
    For i& = 1 To UBound(var, 1)
      For j& = 1 To UBound(var, 2)
        If IsNumeric(var(i&, j&)) Then
          var(i&, j&) = CDbl(var(i&, j&))
        End If
      Next j&
    Next i&
    MyRange = var
    End Sub
    Merci

  19. #19
    Invité
    Invité(e)
    Par défaut
    les ... sont pour te dire de finir la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    szSQL = "SELECT [F1],[F2],[F3] FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    [F4],...,...,[F7] autant que tu as de champs!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    szSQL = "SELECT [F1],cdbl([F2]),format([F3] ,'YYYY-MM-DD HH:MM:SS') as MaDate FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    tu peux formater toutes tes données.
    fais déjè ce test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    szSQL = "SELECT [F1],[F2],[F3] FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"
    attention, si tu n'as que 2 champs pas de [F3], un champ [F°] par nombre de champs si tu as 5 champs [F de 1 à 5].

    le [F] représente les colonnes de ton tableau EXCEL.

    [F1] colonne 1, [F2] colonne 2 Etc...
    Dernière modification par Invité ; 04/12/2013 à 23h59.

  20. #20
    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 comprend vite mais faut m'expliquer longtemps!
    Bonjour,
    Effectivement c'est mieux ainsi. Par contre je peux avoir 53 champs (colonnes correspondant au n° de semaine) comme 1 seul (liste de nom) car cette fonction me sert a récupérer différentes infos qui n'ont pas la même pagination. De plus dans les 53 colonnes, je peux soit avoir du texte ou des chiffres. Si je comprend bien, si je formate la requête SQL, je serais contraint de toujours l'utilisé dans les même condition?
    En tout cas j'aurais appris quelques chose qui pourrait bien me resservir! Merci.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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