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 :

Syntaxe macro excel 4


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Bonjour,
    Je dois récupérer la valeur d'une cellule dans un fichier externe fermé.
    le nom du fichier ou se trouve la valeur correspond à la valeur d' une cellule du fichier actif (B10). Pour le nom d'onglet (toujours dans le fichier externe), celui ci est parfois amené à changer de nom et je ne peux donc pas utiliser ce paramétre dans ma macro et voudrais plutôt utiliser le N° d'ordre de l'onglet qui lui ne changera pas. Voici concrétement mes lignes de code :

    Cette ligne fonctionne avec le nom d'onglet (ONGLET N°3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cells(1, 1).Value = ExecuteExcel4Macro("'c:\mondossier\monsousdossier\[" & (ThisWorkbook.Sheets("MONONGLET").Cells(10, 2).Value) & "]ONGLET N°3'!R1C12")
    Cette ligne ne fonctionne pas avec le N° d'ordre (Sheets(3))car je ne trouve pas la bonne syntaxe (si toutefois c'est possible?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cells(1, 1).Value = ExecuteExcel4Macro("'c:\mondossier\monsousdossier\[" & (ThisWorkbook.Sheets("MONONGLET").Cells(10, 2).Value) & "]  Sheets(3)'! R1C12")
    Un grand merci à qui pourra m'aiguiller vers la solution

    [Edit]
    Notification par mail....

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, je crains que cela ne soit pas possible, il faut utiliser le nom d'onglet de la feuille, voir ici et

    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
    Option Explicit
     
    Private Function ExtraireValeur(sDossier As String, _
                                    sFichier As String, _
                                    sFeuille As String, _
                                    sCellule As String)
    Dim sArgument As String
        sDossier = Replace(sDossier, "'", "''")
        sFichier = Replace(sFichier, "'", "''")
        sArgument = "'" & sDossier & "[" & sFichier & "]" & sFeuille & "'!" & Range(sCellule).Address(, , xlR1C1)
        ExtraireValeur = ExecuteExcel4Macro(sArgument)
    End Function
     
    Sub Tst()
    Dim Dossier As String
    Dim Fichier As String
    Dim Feuille As String
    Dim Cellule As String
        Dossier = "C:\Transfert\Test\"
        Fichier = "Test.xls"
        Feuille = "Feuil2"
        Cellule = "A1"
        ActiveSheet.Cells(1, 1) = ExtraireValeur(Dossier, Fichier, Feuille, Cellule)
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Bonsoir,
    Merci kiki29 ton code permet surement d'aboutir mais je suis entrain de l'adapter à ma config. et j'ai un peu de difficultés. pas d'arret de macro mais un #REF! dans la cellule, j'ai l'impression que ça bug au niveau de:
    Range(sCellule).Address car en ligne 23 les valeurs sont bien reconnues sauf cellule

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, ici cela fonctionne sans problème, ton "adaptation" est donc fautive. Je ne vois pas d'ailleurs ce qu'il y a à adapter.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 16
    Par défaut
    Bonjour,
    Effectivement Kiki29 ton code fonctionne trés bien tel que tu l'a publié mais mon probléme persiste dans le sens où le paramétre "Feuille" doit correspondre, chez moi, à un N° d'ordre de feuille dans le fichier fermé (pas de nom dans la macro car il change réguliérement) et c'est cette foutue syntaxe que je ne parviens pas à trouver.

    ce qui donne chez moi (avec un prob sur paramétre Feuille bien sure)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Dossier = "C:\Mondossier\Monsousdossier\"
        Fichier = Cells(4, 2).Value
        Feuille =  Sheets(2).Name '(du fichier fermé, c'est là mon soucis )
        Cellule = "A1"
        Cells(2, 2) = ExtraireValeur(Dossier, Fichier, Feuille, Cellule)
    Merci encore

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Re,
    je crains que cela ne soit pas possible, il faut utiliser le nom d'onglet de la feuille
    donc "Feuil3" ou autre
    Voir les liens proposés dans le post# 2

    Sinon passer par qqch d'alambiqué 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
    Option Explicit
     
    Dim Ar() As String
     
    Private Function ExtraireValeur(sDossier As String, _
                                    sFichier As String, _
                                    sFeuille As String, _
                                    sCellule As String)
    Dim sArgument As String
        sDossier = Replace(sDossier, "'", "''")
        sFichier = Replace(sFichier, "'", "''")
        sArgument = "'" & sDossier & "[" & sFichier & "]" & sFeuille & "'!" & Range(sCellule).Address(, , xlR1C1)
        ExtraireValeur = ExecuteExcel4Macro(sArgument)
    End Function
     
    Sub Tst()
    Dim Dossier As String
    Dim Fichier As String
    Dim Feuille As String
    Dim Cellule As String
    Dim sFichier As String
     
        Dossier = "C:\Transfert\Test\"
        Fichier = "Test.xls"
     
        sFichier = Dossier & Fichier
        ListeNomFeuilles sFichier
        '    Ar() contient le nom des feuilles dans l'ordre ALPHABETIQUE 
        '    et non dans l'ordre des positions du classeur testé
        Feuille = Ar(3)
     
        Cellule = "A1"
        ActiveSheet.Cells(1, 1) = ExtraireValeur(Dossier, Fichier, Feuille, Cellule)
    End Sub
     
    Private Sub ListeNomFeuilles(sNom As String)
    Dim Conn As Object
    Dim Cat As Object
    Dim FeuilleXL As Object
    Dim i As Long
     
        Erase Ar
        Set Conn = CreateObject("ADODB.Connection")
        Set Cat = CreateObject("ADOX.Catalog")
     
        Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sNom & ";Extended Properties=Excel 8.0;"
     
        Set Cat.ActiveConnection = Conn
     
        For Each FeuilleXL In Cat.Tables
            Select Case Right$(FeuilleXL.Name, 1)
                Case "$"
                    i = i + 1
                    ReDim Preserve Ar(i)
                    Ar(i) = Left$(FeuilleXL.Name, Len(FeuilleXL.Name) - 1)
                Case "'"
                    ' Nom de feuille comportant des espaces
                    i = i + 1
                    ReDim Preserve Ar(i)
                    Ar(i) = Mid$(FeuilleXL.Name, 2, Len(FeuilleXL.Name) - 3)
            End Select
        Next FeuilleXL
     
        Conn.Close
        Set Conn = Nothing
        Set Cat = Nothing
    End Sub

Discussions similaires

  1. Supression de macro Excel et module en VBA
    Par Sammy dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/10/2005, 10h25
  2. Macro excel perso.xls et évènement commandButton1_click()
    Par Annie dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/09/2005, 19h05
  3. [macro Excel]
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/09/2005, 09h54
  4. débutant en VBA je n'arrive pas à finir ma macro excel
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/01/2005, 12h20
  5. Porter une macro Excel vers OpenOffice
    Par totofweb dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 13/07/2004, 13h20

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