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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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!

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