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 :

Problème pour accéder aux données d'une feuille dans un fichier .XLAM [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Problème pour accéder aux données d'une feuille dans un fichier .XLAM
    Bonjour,

    J'ai regroupé depuis longtemps mes fonctions personnalisées dans un fichier .xla.
    Ces fonctions utilisent des paramètres inscrits dans des fichiers excel séparés.
    Avec excel 2013, j'ai enregistré mon fichier .xla au format .xlam, et j'ai transféré les feuilles de paramètres des fichiers excel directement dans le fichier .xlam

    Mon problème vient du fait que je n'arrive pas à récupérer ces données dans les fonctions personnalisées.
    Dans la fonction ci-dessous, le paramètre typ_tub correspond à une zone nommée de la feuille de données du fichier .xlam
    j'ai essayé différentes façons pour définir ztub,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ztub = typ_tub
    ztub = range(typ_tub)
    ztub = range("Tubes."&typ_tub)
    etc ...

    mais à chaque fois, la fonction se termine sur la ligne "ztub = ..." sans signaler d'erreur et bien sûr sans avoir récupéré de données.

    Si quelqu'un à une idée de mon problème, toute aide sera la bienvenue.

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function diam_int(diametre, Optional typ_tub = "PE_6")
        Dim il, i As Long
        Dim ztub As Range
        ztub = Workbooks("MonFichier.xlam").Sheets("Tubes").Range(typ_tub).Select
        il = ztub.Rows.Count
        For i = 1 To il
    .....

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jack237 Voir le message
    Bonjour,

    Il faut donner un nom à votre projet (fichier .xlam) et mettre ce projet en référence dans le fichier où vous souhaitez utiliser les fonctions ou procédures.

    Nb : Je ne savais pas qu'on pouvait stocker des données dans des onglets encore présents dans un fichier .xlam, il faudra que j'essaye.

    Cordialement.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jack237 Voir le message
    Pour faire suite à mon précédent message, j'ai modifié une macro complémentaire (en état : IsAddin = True). J'ai basculé en IsAddin = False et j'y ai ajouté un onglet paramètres dans lequel j'ai créé et rempli une zone nommée puis j'ai rebasculé en IsAddin = True.

    C'est bien ce qui me semblait, en référençant la macro complémentaire dans un fichier .xlsm, j'accède seulement aux fonctions et aux procédures présentes dans la macro complémentaire. Je n'accède pas non plus, en créant une procédure interne à la macro complémentaire pour charger le contenu de la zone nommée.

    Si quelqu'un y arrive, je suis preneur de la solution.

    Nb : hormis qu'on ne puisse pas accéder à des zones nommées dans le fichier .xlam, on ne peut affecter une variable comme vous le faîtes dans votre fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ztub = Workbooks("MonFichier.xlam").Sheets("Tubes").Range(typ_tub).Select
    On devrait avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ztub = ......Sheets("Tubes").Range("typ_tub")
    Si typ_tub est une zone nommée.

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Solution pour accéder aux données d'une feuille dans le fichier .xlam
    La syntaxe exacte est: set ztub = workbooks("Monfichier.xlam").Sheets("Tubes").Range(typ_tub)
    typ_tub étant la variable qui contient le nom de la zone nommée.

    Cela fonctionne également parfaitement avec set ztub = workbooks("Monfichier.xlam").Sheets("Tubes").Range("a1:c25")

    Les deux points qui semblent importants sont le set en début de ligne et l'extension du fichier ".xlam". J'ai essayé sans et la fonction se termine sans erreur mais également sans rien faire.

    Merci beaucoup Eric car ton message m'a mis sur la bonne piste.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jack237 Voir le message
    Si tu y es arrivé, peux-tu me dire la valeur de la propriété IsAddin de ton fichier .xlam (dans ThisWorkbook) ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour Eric,

    Pour accéder à la feuille de données du fichier .xlam, tu dois passer "isaddin" à false.
    La feuille s'affiche et tu peux y travailler comme dans une feuille normale.
    Pour sauvegarder les données, tu es obligé de repasser "isaddin" à true, sinon excel refuse de l'enregistrer et te propose de l'enregistrer sous un autre non.

    Cdt
    Jack

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jack237 Voir le message
    Bonjour,

    Ok, pas de problème, mais tu arrives ensuite à exploiter les données de ces onglets ? Je n'y suis jamais arrivé.

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Ci-dessous la zone nommée "PVC_6) de la feuille de données de .xlam

             90	84.6
    	110	104.6
    	125	119
    	140	133
    	160	152
    	180	171
    	200	190
    	225	214.6
    	250	236.6
    	280	266
    	315	299.6
    	355	337.6
    	400	380.4
    	450	428
    	500	475.4
    	560	527.2
    	630	599.2
    	710	668.6
    	800	753.4
    La première colonne indique le diamètre extérieur d'un tube et la deuxième, son diamètre intérieur.
    La fonction ci-après nous donne le diamètre intérieur d'un tube lorsqu'on lui fournit le diamètre extérieur et le type de tube (matière et pression de service)


    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
    '
    '  Recherche du diamètre interne d'un tube
    '
    '
    Function diam_int(diametre, Optional typ_tub = "PE_6")
        Dim il, i As Long
        Dim ztub As Range
        Set ztub = Workbooks("MonFichier.xlam").Sheets("Tubes").Range(typ_tub)
        il = ztub.Rows.Count
        For i = 1 To il
            If ztub.Cells(i, 1).Value = diametre Then
                diam_int = ztub.Cells(i, 2).Value
                Exit Function
            End If
        Next
        diam_int = 0
    End Function
    Si dans une feuille d'un fichier .xlsx, on tape la formule = diam_int(250;"PVC_6) on aura comme résultat 236.6

    Cdt

    P.S. : "MonFichier.xlam" (ou un raccourci) est placé dans le dossier XLSTART pour être chargé automatiquement au démarrage d'excel

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci Jack.

    Dans ta méthode, ta macro complémentaire apparaît-elle le menu Compléments d'Excel comme dans ce vidage d'écran ?

    Pièce jointe 234953
    Dernière modification par AlainTech ; 11/02/2017 à 20h20. Motif: Fusion de 2 messages

  10. #10
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Bonjour Eric,

    Oui, le fichier apparaît dans les compléments excel

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jack237 Voir le message
    Merci Jack, j'y suis enfin arrivé. Je pense que cela va bien me servir.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/11/2009, 15h00
  2. Problème pour lire les donnée d'une table externe
    Par mardoch dans le forum SQL*Loader
    Réponses: 6
    Dernier message: 17/07/2008, 17h41
  3. [C#] Comment accéder aux données d'une Form ?
    Par cjacquel dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/07/2006, 12h55
  4. Problème pour accéder aux données ASP.net côté client
    Par mappy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/07/2006, 16h10
  5. Accéder aux propriétés d'une feuille de style liée
    Par b Oo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/05/2006, 09h34

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