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 :

tableau marche dans sub mais pas dans feuille


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
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Par défaut tableau marche dans sub mais pas dans feuille
    Bonjour,

    Je suis face à un comportement étrange de VBA que je ne comprends pas. Je crée une fonction Stock dans laquelle j'utilise une variable tableau ( initialisé à partir des cellules d'une feuilles )


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste_catégorie = Sheets("Stock minimum").Range("A1").CurrentRegion

    Quand j'appelle ma fonction via une SUB, il n'y a aucun problème.

    Mais quand je teste ma fonction dans Excel, ce code ne fonctionne plus

    Mais si je remplace par un tableau classique : liste_catégorie (0,0) = "Céréales", liste_catégorie (1,0) = "laitages", la fonction marche dans la feuille

    C'est à en perdre la boule

    Quelqu'un aurait-il une idée ?

    D'avance merci !
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Quel est le but atteindre? si j'ai bien compris, il semblerait que vous voulez rapatrier la valeur du stock mini en M1 pour la sous-catégorie sélectionnée, si c'est bien de cela qu'il s'agit, alors pourquoi passer par une fonction personnalisée? Une RECHERCHEV ne ferait-elle pas l'affaire?

    Cdlt

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Par défaut
    bonjour,

    merci de la réponse. Je connais bien évidemment la rechercheV(), mais c'est un exercice purement formel pour comprendre le VBA.

    Je ne comprends pas cette bizarrerie ... le tableau est correct quand c'est une une macro qui appelle la fonction Stock() mais pas à partir d'excel quand on met la fonction Stock dans une cellule de la feuille.

    :-)

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Alors ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function stock(Catégorie As String) As Long
        Dim x As Object
        Set x = Sheets("Stock minimum").Range("StockMinimum").Find(Catégorie)
        If Not x Is Nothing Then stock = Sheets("Stock minimum").Cells(x.Row, 2)
    End Function
    Cdlt

    Edit: ne pas valider la formule "=stock(L2)" avec CTRL + SHIFT + ENTREE comme vous l'avait fait auparavant.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Par défaut
    Bonjour,

    ça marche ! merci :-)

    mais du coup pourriez-vous m'expliquer ceci :

    Citation Envoyé par ARTURO83 Voir le message


    Set x = Sheets("Stock minimum").Range("StockMinimum").Find(Catégorie)


    d'où sort cette Range("StockMinimum) ... il n' y a pas de plage nommée StockMinimum dans le classeur, ni de colonne StockMinimum dans la feuille ?

    et d'autre part, mon but était d'utiliser un tableau, car finalement vous ne l'utilisez pas :
    Sheets("Stock minimum").Cells(x.Row, 2)
    Mon but est vraiment de comprendre pourquoi la création de tableau en utilisant directement une plage de cellules dans ce cas ne fonctionne pas ( alors que ça fonctionne quand je passe un appel via la sub test())

    C'est un intérêt purement théorique ...

    merci d'avance :-)

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    "StockMinimum " est le nom du tableau structuré, je fais une recherche sur l'ensemble de la plage entière du tableau.

    ********************************************

    Dans votre cas, avec la fonction personnalisée, "liste_catégorie" renvoie un nom, alors qu'avec une sub, cela renvoie un nombre de lignes, c'est pour cela que ça ne marche pas avec la fonction.

    sinon, autre écriture qui se rapproche votre code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function stock(Catégorie As String)
        Dim i As Integer, liste_catégorie As Variant
        liste_catégorie = Sheets("Stock minimum").ListObjects("StockMinimum").DataBodyRange.Rows.Count
        For i = 2 To liste_catégorie + 1
            If Catégorie = Sheets("Stock minimum").Cells(i, 1) Then
                stock = Sheets("Stock minimum").Cells(i, 2)
                Exit For
            End If
        Next
    End Function

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 15
    Par défaut
    Effectivement le problème vient de l'utilisation de currentregion ... pour le reste sinon ça fonctionne 😊
    Merci 😊

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/05/2013, 17h27
  2. Requete Marche sur WorkBench mais pas dans .Net
    Par s.toubal dans le forum Requêtes
    Réponses: 5
    Dernier message: 03/02/2013, 17h04
  3. Réponses: 10
    Dernier message: 02/07/2012, 17h30
  4. tableau croisé dans feuille précise
    Par mumu64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/07/2008, 15h02
  5. [MySQL] left outer join et concaténation dans un tableau passe par if mais pas par else ?
    Par SpaceFrog dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 08/04/2008, 15h09

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