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 :

extraction valeur cellule classeur fermé [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 112
    Par défaut extraction valeur cellule classeur fermé
    Bonjour,

    Je viens d'utiliser un code que j'ai trouvé pour extraire des valeurs d'un autre fichier excel fermé. et qui fonctionne très bien

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

    Voici le code que j'ai trouvé sur le site

    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
    Sub TestConnection_V1()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
     
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\monClasseurBase_V01.xls"
     
        Set Cn = New ADODB.Connection
     
        '--- Connexion ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
            .Open
        End With
     
        'Extended Properties=Excel 8.0 est utilisé pour les versions d'Excel 97, 2000 et 2002.
     
        '
        '... la requête ...
        '
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
    End Sub
    J'ai essayé de l'adapter au niveau du chemin complet du classeur fermé en lui indiquant d'aller récupérer ce chemin dans une cellule que j'ai nomme "chemin_balancen".
    Et la le code ne fonctionne plus il me r'envoi une erreur.

    voici le code adapté à ma sauce. Pouvez vous me dire ce qui ne fonctionne pas.

    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
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    Sub extractionValeurCelluleClasseurFerme()
        Dim Source As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim ADOCommand As ADODB.Command
        Dim Fichier As String, Cellule As String, Feuille As String
        Dim DL As Integer 'déclare al variable DL (Dernière Ligne)
        
        'ENTITE -------------------------------------------------------------------------
        
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "C2:C1000"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
          
        Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = Range("chemin_balancen").Value
                    
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
                    
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
                      
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
                      
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
         
        Range("A4").CopyFromRecordset Rst
        
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "A2:B1000"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
          
        Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = Range("chemin_balancen").Value
                    
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
                    
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
                      
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
                      
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
         
        Range("C4").CopyFromRecordset Rst
        
        'A Nouveau ------------------------------------------------------------------------------
        
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "G2:G1000"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
          
        Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = Range("chemin_balancen").Value
                    
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
                    
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
                      
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
                      
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
         
        Range("E4").CopyFromRecordset Rst
                
        'Mouvements ------------------------------------------------------------------------------
        
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "H2:I1000"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
          
        Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = Range("chemin_balancen").Value
                    
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
                    
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
                      
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
                      
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
         
        Range("F4").CopyFromRecordset Rst
        
        'Débits / Crédits / SOLDEN------------------------------------------------------------------------------
        
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "K2:M1000"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
          
        Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = Range("chemin_balancen").Value
                    
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
                    
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
                      
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
                      
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
         
        Range("H4").CopyFromRecordset Rst
                
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
        
        DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne DL de la colonne A (colonne à adapter à ton cas)
    Range("K4").FormulaR1C1 = "=IF(RC[-1]<0,0,RC[-1])"
    Range("K4").AutoFill Destination:=Range("K4:K" & DL), Type:=xlFillDefault
    With Range("K4:K" & DL)
    ActiveSheet.Calculate
    .Value = .Value
        
       
       End With
        
        DoEvents
        DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne DL de la colonne A (colonne à adapter à ton cas)
    Range("L4").FormulaR1C1 = "=IF(RC[-2]>0,0,RC[-2]*-1)"
    Range("L4").AutoFill Destination:=Range("L4:L" & DL), Type:=xlFillDefault
    With Range("L4:L" & DL)
    ActiveSheet.Calculate
    .Value = .Value
    
    End With
        
        DoEvents
       DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne DL de la colonne A (colonne à adapter à ton cas)
    Range("b4").FormulaR1C1 = "=LEFT(RC[1],4)"
    Range("b4").AutoFill Destination:=Range("b4:b" & DL), Type:=xlFillDefault
    With Range("b4:b" & DL)
    ActiveSheet.Calculate
    .Value = .Value
    
    End With
        
    End Sub
    Merci pour l'aide que vous pouvez m'apporter

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 112
    Par défaut
    Apres quelques recherche j'ai trouvé la solution.

    voici mon 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
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    Sub extractionValeurCelluleClasseurFerme()
        Dim Source As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim ADOCommand As ADODB.Command
        Dim Fichier As String, Cellule As String, Feuille As String
        Dim DL As Integer 'déclare al variable DL (Dernière Ligne)
     
        Sheets("Balance N").Select                                         'Sélection de l'onglet à traiter
        Let NumLigne = 4                                              'Numero 1er ligne de données (dans excel)
        Let NumDebCol = 1                                                       'Numero 1er colonne de titre dans Excel
        Let NumFinCol = 12                                                      'Numero derniere de titre dans Excel
        Let ColTraite = 1                                                       'Numero de colonne de données à tester
     
        Cells(NumLigne, ColTraite).Select                                       'selectionne la cellule de départ
        ActiveCell.End(xlDown).Select                                           'Descend en bas de la colonne
        NumFinLig = ActiveCell.Row                                          'Affecte à FinCopieLink le n° de ligne correspondant
     
     
     
        If (NumFinLig = 65536 Or NumFinLig = 1048576) _
            Then                                                                'Si ligne trouvée est 65536 soit tout en bas ...
                NumFinLig = NumLigne                                            'On renvoi la ligne de départ car la plage est vide !!!
        End If
     
        Range(Cells(NumLigne, NumDebCol), Cells(NumFinLig, NumFinCol)).Select
        Selection.ClearContents
     
     
        'ENTITE -------------------------------------------------------------------------
     
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
     
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "C2:C1000"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
     
        Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = Range("chemin_balancen").Value
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"";"
     
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Range("A4").CopyFromRecordset Rst
     
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "A2:B1000"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
     
        Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = Range("chemin_balancen").Value
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"";"
     
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Range("C4").CopyFromRecordset Rst
     
        'A Nouveau ------------------------------------------------------------------------------
     
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "G2:G1000"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
     
        Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = Range("chemin_balancen").Value
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"";"
     
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Range("E4").CopyFromRecordset Rst
     
        'Mouvements ------------------------------------------------------------------------------
     
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "H2:I1000"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
     
        Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = Range("chemin_balancen").Value
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"";"
     
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Range("F4").CopyFromRecordset Rst
     
        'Débits / Crédits / SOLDEN------------------------------------------------------------------------------
     
        'Adresse de la cellule contenant la donnée à récupérer
        Cellule = "K2:M1000"
          'Pour une plage de cellules, utilisez:
          'Cellule = "A4:C10"
     
        Feuille = "page$" 'n'oubliez pas d'ajouter $ au nom de la feuille.
        'Chemin complet du classeur fermé
        Fichier = Range("chemin_balancen").Value
     
        Set Source = New ADODB.Connection
        Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"";"
     
        Set ADOCommand = New ADODB.Command
        With ADOCommand
            .ActiveConnection = Source
            .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
        End With
     
        Set Rst = New ADODB.Recordset
        Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
        Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
     
        Range("H4").CopyFromRecordset Rst
     
        Rst.Close
        Source.Close
        Set Source = Nothing
        Set Rst = Nothing
        Set ADOCommand = Nothing
     
        DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne DL de la colonne A (colonne à adapter à ton cas)
    Range("K4").FormulaR1C1 = "=IF(RC[-1]<0,0,RC[-1])"
    Range("K4").AutoFill Destination:=Range("K4:K" & DL), Type:=xlFillDefault
    With Range("K4:K" & DL)
    ActiveSheet.Calculate
    .Value = .Value
     
     
       End With
     
        DoEvents
        DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne DL de la colonne A (colonne à adapter à ton cas)
    Range("L4").FormulaR1C1 = "=IF(RC[-2]>0,0,RC[-2]*-1)"
    Range("L4").AutoFill Destination:=Range("L4:L" & DL), Type:=xlFillDefault
    With Range("L4:L" & DL)
    ActiveSheet.Calculate
    .Value = .Value
     
    End With
     
        DoEvents
       DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne DL de la colonne A (colonne à adapter à ton cas)
    Range("b4").FormulaR1C1 = "=LEFT(RC[1],4)"
    Range("b4").AutoFill Destination:=Range("b4:b" & DL), Type:=xlFillDefault
    With Range("b4:b" & DL)
    ActiveSheet.Calculate
    .Value = .Value
     
    End With
     
     
        DoEvents
       DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la derniere ligne DL de la colonne A (colonne à adapter à ton cas)
    Range("u4").FormulaR1C1 = "=IF(RC[-18]="""","""",VALUE(LEFT(RC[-18],2)))"
    Range("u4").AutoFill Destination:=Range("u4:u" & DL), Type:=xlFillDefault
    With Range("u4:u" & DL)
    ActiveSheet.Calculate
    .Value = .Value
     
    End With
     
    End Sub
    j'ai fait ce changement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fichier = Range("chemin_balancen").Value

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

Discussions similaires

  1. Extraction de données classeur fermé (multi feuilles)
    Par blanka347 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/10/2011, 19h00
  2. [XL-2010] Extraction de donnée classeur fermé.
    Par blanka347 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/09/2011, 20h44
  3. Appairage de 2 cellules classeur fermé
    Par bagheria85 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/08/2010, 16h30
  4. [XL-2007] récupérer une valeur d'une cellule d'un classeur fermé
    Par baricot dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 27/10/2009, 18h36
  5. Réponses: 5
    Dernier message: 15/01/2009, 09h45

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