Erreur de compilation vba sur excel 2016

Fermé
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 - Modifié le 9 déc. 2017 à 00:48
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 - 9 déc. 2017 à 20:43
Bonjour,

J'ai aucune connaissance en vba, mais j'ai besoin d'aide pour pouvoir exploiter cette fonction, cependant j'ai des erreur de compilation

Ce que je veux, c'est pouvoir lire les valeurs d'une matrice sur un autre fichier excel '~150 000, ma fonction doit lire la valeur de la cellule A3 du fichier cible. Dans mon fichier source (la ou est la macro, j'ai une feuille excel qui recupere les données des cellule cible, le probleme que j'ai eu est que j'utilisai des SI donc 150 000 x 56 colonne de SI, et bien excel n'a pas trop apprécié ^^. J'en ai marre de refaire les liens, j'ai besoin d"une methode pertinente. Merci

La formule que j'utilise dans excel [=LectureFichier(B1;B2;B3;B4)]
Avec B1=\\192.168.2.1\t-informatique\0-Travail_du_vendredi_soir\Archive
B2=testFonction.xlsx Note: C'est le nom exacte de mon fichier
B3=FeuilTest1 Note: C'est le nom exacte de ma feuille
B3=A3 Note: A3 c'est le n° de cellule du document cible


:::source

Code:
Sub LectureFichier()
Function LinkFichierFFFC( _
        Chemin As String, _
        Fichier As String, _
        Feuille As String, _
        Cellule As Variant) As Variant
 
    Application.Volatile
 
    Dim Source As Object, Rst As Object, ADOCommand As Object
    Dim Cible As String
 
    Feuille = Feuille & "$"
    Cible = Cellule.Address(0, 0, xlA1, 0) & ":" & _
        Cellule.Address(0, 0, xlA1, 0)
 
    Set Source = CreateObject("ADODB.Connection")
    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Chemin & "\" & Fichier & _
        ";Extended Properties=""Excel 8.0;HDR=No;"";"
 
    Set ADOCommand = CreateObject("ADODB.Command")
    With ADOCommand
        .ActiveConnection = Source
        .CommandText = "SELECT * FROM [" & Feuille & Cible & "]"
    End With
 
    Set Rst = CreateObject("ADODB.Recordset")
    '1 = adOpenKeyset, 3 = adLockOptimistic
    Rst.Open ADOCommand, , 1, 3
    Set Rst = Source.Execute("[" & Feuille & Cible & "]")
 
    LinkFichierFFFC = Rst(0).Value
 
    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
End Function
End Function



J'obtiens l'erreur suivante dans Visual basic:
Erreur de compilation:
Seuls des commentaires peuvent apparaître après end sub

Et sur excel, on me demande de verifier les valeurs, que les noms commence par "_" , qu'il n'y est pas d'espace, que les noms ne soit pas identique.

Alors j'ai tester en mettant un underscore devant B2 et B3 ex: _testFonction.xlsx


Si quelqu’un a une idée Merci d'avance.
A voir également:

1 réponse

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
9 déc. 2017 à 09:34
En VBA/VB6, il n'est pas possible de déclarer une function/sub dans une autre function/sub corriges ton code en conséquence.
0
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
Modifié le 9 déc. 2017 à 13:30
Ok merci, les messages d'erreur ont disparu mais ca ne marche pas, qu'es qui ne va pas ? je ne trouve pas

Function LinkFichierFFFC( _
        Chemin As String, _
        Fichier As String, _
        Feuille As String, _
        Cellule As Variant) As Variant
 
    Application.Volatile
 
    Dim Source As Object, Rst As Object, ADOCommand As Object
    Dim Cible As String
 
    Feuille = Feuille & "$"
    Cible = Cellule.Address(0, 0, xlA1, 0) & ":" & _
        Cellule.Address(0, 0, xlA1, 0)
 
    Set Source = CreateObject("ADODB.Connection")
    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Chemin & "\" & Fichier & _
        ";Extended Properties=""Excel 8.0;HDR=No;"";"
 
    Set ADOCommand = CreateObject("ADODB.Command")
    With ADOCommand
        .ActiveConnection = Source
        .CommandText = "SELECT * FROM [" & Feuille & Cible & "]"
    End With
 
    Set Rst = CreateObject("ADODB.Recordset")
    '1 = adOpenKeyset, 3 = adLockOptimistic
    Rst.Open ADOCommand, , 1, 3
    Set Rst = Source.Execute("[" & Feuille & Cible & "]")
 
    LinkFichierFFFC = Rst(0).Value
 
    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
End Function
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 9 déc. 2017 à 14:10
Bonjour

Quelle version Excel ?
car
Extended Properties=""Excel 8.0 concerne des versions XL<2007
0
poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019 30
Modifié le 9 déc. 2017 à 14:12
ah ok, jai la version 2016, quel modif je dois apporté ?
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > poparnassus Messages postés 426 Date d'inscription vendredi 28 mars 2014 Statut Membre Dernière intervention 25 décembre 2019
9 déc. 2017 à 14:17
bonjour, essaie d'expliquer ce que tu veux réaliser.
si je comprends, tu as ton classeur local, qui contient la macro, et un autre classeur, que tu appelles cible, dont une feuille contient 150 000 x 56 valeurs.
je ne comprends pas ce que tu souhaites faire avec la cellule A3 du classeur cible.
et je ne comprends pas ce que tu souhaites que fasse ta fonction.
tu écris "ca ne marche pas", mais cela ne remplace pas une description du comportement que tu essaies d'obtenir.
à tout hasard, essaie-tu d'expliquer que tu essaies de récupérer la cellule du classeur cible dont l'adresse est en A3 dans le classeur source?
n'hésite pas à donner plusieurs exemples, cela t'aidera à expliquer.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 déc. 2017 à 14:21
0