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 non reconnue - Ranges Offset en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut Syntaxe non reconnue - Ranges Offset en VBA
    Bonjour,

    J'aimerais que le "Combobox_Ad2" de mon Userform ait une "rowsource" définie par la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox_Ad2.RowSource = WorksheetFunction.Offset(Range("levmomA1"), WorksheetFunction.Match(Range("Admin1_Field")(TextBox_Prev_Next.Text).Value, Range("Admin1_Ref"), 0), 1, WorksheetFunction.CountIf(Range("Admin1_Ref"), Range("Admin1_Field")(TextBox_Prev_Next.Text).Value), 1)
    Rien à faire :

    Err.428 :Object does not support this property or method... ?

    Une idée d'où peut provenir ce bug ?


    NB : les "Range" auxquels la formule fait référence sont tous définis dans le Workbook en question.

    PS:désolé pour la barbarie de l'expression, à la relecture ca fait mal aux yeux...

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,

    RowSource attend une plage sous le format "Feui1!A1:A10"

    Tu dois donc jouer avec les " et & pour obtenir la plage voulue.
    Du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox_Ad2.RowSource = "Feuil1!a1:a" & DerLigne

    C'est ça ou passer par la méthode Ad Item

    A+

  3. #3
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut
    Merci pour ton aide F'

    Malheureusement l'utilisation de " et & ne me parlent pas du tout...
    Existe-t-il un tuto la dessus?

    Je viens de tenter le code suivant en prenant soins de définir tous les range (Workbook/Worksheet/Range pour référer aux ranges définis dans mon classeur):
    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
     
    Dim RangeLevmomA1 As Range
    Dim RangeAdmin1_Field As Range
    Dim RangeAdmin1_Ref As Range
    Dim ComboBox_Ad2Range As Range
     
    Set RangeLevmomA1 = ActiveWorkbook.Worksheets("_geo").Range("levmomA1")
     
    Set RangeAdmin1_Field = ActiveWorkbook.Worksheets("Data").Range("Admin1_Field")
     
    Set RangeAdmin1_Ref = ActiveWorkbook.Worksheets("_geo").Range("Admin1_Ref")
     
    Set ComboBox_Ad2Range = WorksheetFunction.Offset(RangeLevmomA1, WorksheetFunction.Match(ComboBox_Ad1.Value, RangeAdmin1_Ref, 0), 1, WorksheetFunction.CountIf(RangeAdmin1_Ref, ComboBox_Ad1.Value), 1)
     
    ComboBox_Ad2.RowSource = ComboBox_Ad2Range
    Mais il me retourne encore Erreur 438...

  4. #4
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,
    Les " et & vont concaténer des éléments, mon exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DerLig = Sheets("Feuil1").cells(columns(1).cells.count,1).end(xlup).row 'récupère le numéro de la dernière ligne remplie, imaginons 10
    ComboBox_Ad2.RowSource = "Feuil1!a1:a" & DerLigne 'Equivaut à "Feuil1a1:a10"
    Revenons à ton fichier, explique moi tes variables, c'est quoi le principe et que retournent elles ?

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    et si tu nous disais directement quelle est la valeur retournée par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.Offset(RangeLevmomA1, WorksheetFunction.Match(ComboBox_Ad1.Value, RangeAdmin1_Ref, 0), 1, WorksheetFunction.CountIf(RangeAdmin1_Ref, ComboBox_Ad1.Value), 1)
    qui doit être un string....

    cordialement,

    Didier

  6. #6
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut
    Bonjour F' et Ormonth,

    Desole pour la reponse tardive, on me fait passer du coqu à l'âne et j'ai bien du mal a me concentrer sur mon fichier.

    Pour ce qui est du principe F' il s'agit d'un problème déjà posé duquel tu m'avais dépatouillé --> http://www.developpez.net/forums/d81...obox-userform/

    L'idée est donc de déterminer la liste (range) d'un Combobox en fonction du précédant (et ce sur plusieurs niveaux).

    A l'usage j'ai réalisé que le code que tu m'as proposé (ou l'adaptation que j'en ai fait) decale une des listes comme expliqué dans le post que j'ai remonté.

    N'ayant pas eu de réponse j'ai donc retenté ma chance mais dans une voie que je comprends mieux, en tentant d'adapter mes formules de listes dépendantes (qui fonctionnent nickel comme "Validation Rules" dans le spreadhseet) aux Userform, sans succes...

    Ormonth, la valeur retournée (ou plutot espérée ) est un range.

    Dans le spreadhseet la fonction OFFSET (couplee a MATCH et COUNTIF) fonctionne très bien. Mais impossible de la transférer dans mon VBA... :-(

    Merci pour votre patience

    J'ai enchainé tout ce que j'ai pu de lecture sur le sujet.

    Globalement la conclusion est qu'il vaut mieux ne pas utiliser de fonction type Offset, etc. en VBA mais coder directement.

    Je me reporte donc au travail partagé par F' sur le sujet quoté ci dessus et qui marche très bien.

    Le petit décalage en question n'est pas bien grave au final (juste frustrant de ne pas réussir à comprendre le pourquoi et à corriger vraiment...)

    Encore merci pour votre aide!

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Mas_Carpone :
    Ormonth, la valeur retournée (ou plutot espérée ) est un range.
    Soyons clairs :

    Quand tu écris Worksheets("Sheet1").Range("A5"), tu fais appel à la propriété Range de la collection Range (rare collection qui ne prend pas de « s » final pour renvoyer un objet plage qui peut ne représenter qu’une seule cellule.

    La syntaxe de cette propriété est : Range(arg), pour l’argument, il est précisé que :
    « Si vous utilisez un argument de type texte pour l'adresse de la plage, vous devez spécifier l'adresse en notation de style A1 (l'utilisation de la notation de style L1C1 n'est pas autorisée) ».
    La notation employée ci-dessus, est d’ailleurs entre guillemets ce qui indique bien un String en vba.

    D'autre part :

    RowSource, propriété
    Spécifie la source de données fournissant une liste à un contrôle ComboBox ou ListBox.
    Syntaxe
    object.RowSource [= String]
    La syntaxe de la propriété RowSource comprend les éléments suivants :
    Élément Description
    object Objet valide.
    String Facultatif. Source de données de la liste du contrôle ComboBox ou ListBox.
    et on écrit bien au final : xxxxxxx.RowSource = "a1:e4", "a1:e4" étant bien une chaîne....


    cordialement,

    Didier

  8. #8
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut
    Merci pour le suivi Didier,

    Je crois que le problème dans ce cas vient du fait que le range lui même fait appelle à une formule qui inclue OFFSET, MATCH et COUNTIF.

    J'ai tenté dans mon code de définir ce range séparément avant d'y faire référence pour le RowSource de mon ComboBox, de manière justement à attribuer un string au RowSource et non pas une formule.

    Le bug survient alors au moment ou je définis ce range. Le problème semble bien provenir de l'utilisation d'un enchainement de formules style Offset...

    Bizarre cette dichotomie entre les formules sur fichier et le vba... du haut de ma mini expérience en VBA, mais visiblement courant...?

    Le code proposé par F' dans l'autre sujet "fait l'affaire". Il n'est pas parfait (ce qui est peut être dû à l'adaptation que j'en ai fait) puisque décalé mais me permet d'afficher toutes les valeurs voulues (+ 1 ou 2 "out of range").

    Je n'ai malheureusement pas plus de temps pour l'instant à consacrer à ce point précis. Plein d'autres problèmes à régler... mais par pointillisme (?) j'y reviendrai dès que possible...

    Merci pour votre aide et patience... plein de mystères à percer encore me concernant...

  9. #9
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,

    Désolé de t'avoir 'abandonné' sur l'autre sujet, je te propose d'ouvrir un tout nouveau Post reprenant bien les adaptations que tu as apporté et les problèmes persistant.

    Je dis un nouveau Post car ça permet à d'autre 'Forumeurs' d'intervenir, car personnellement je suis un peu débordé pour l'instant

    A+

  10. #10
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Par défaut
    Citation Envoyé par Fvandermeulen Voir le message
    Salut,

    Désolé de t'avoir 'abandonné' sur l'autre sujet, je te propose d'ouvrir un tout nouveau Post reprenant bien les adaptations que tu as apporté et les problèmes persistant.

    Je dis un nouveau Post car ça permet à d'autre 'Forumeurs' d'intervenir, car personnellement je suis un peu débordé pour l'instant

    A+
    Aucun souci tu as déjà fait énormément sur le premier sujet!
    J'hésite à le relancer de suite étant moi même absorbé par d'autres problèmes ces jours.

    Je dois entre autres travailler à une interface d'analyse automatisée (avec graphs) des données pour un déploiement iminent (genre "hier" ) de cet outil...

    Du coups je vais y aller "comme ca" pour l'instant et je reviendrai sur ce petit décalage dès que je ressort la tête de l'eau!

Discussions similaires

  1. Formule excel non reconnue en VBA
    Par geopolux dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/10/2008, 18h05
  2. Réponses: 4
    Dernier message: 01/08/2007, 14h37
  3. [VBA Excel] FileDialog non reconnu
    Par micmic1320 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/03/2007, 18h44
  4. [VBA-E] Probleme PivotField champs non reconnu
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/11/2006, 14h25
  5. [VBA Excel] FormatDateTime non reconnu selon la vers d excel
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/02/2006, 16h35

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