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 :

Equivalent "appartient a" pour une collection créée


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Points : 253
    Points
    253
    Par défaut Equivalent "appartient a" pour une collection créée
    Bonjour a tous,

    voila mon probleme. Je vais tenter de faire simple.
    j'ai 3 variables, x1, x2 et x3. chacune d'entre elle peuvent prendre la valeur entre 0 et 30.
    je souhaite passer par un Select Case (ou un If) et traduire en vba Case Is "si les 3 variables x1, x2 ou x3 sont comprise entre 0 et 7 ou = a 30" alors [...], Case Is "les 3 variables sont comprises entre 8 et 30" alors [...] Case Else [...]

    Pour resumer c'est comme si je disais (x1<=7 ou x1=30) and (x2<=7 ou x2=30) and (x3<=7 ou x3=30) pour le 1er Case et (x1>=8) and (x2>=8) and (x3>=8) pour le 2eme Case

    J'ai tout d'abord pense a utiliser une 4eme variable xTotal par exemple pour l'utiliser dans mon "Select Case xT" en ayant defini xT=x1&x2&x3.
    Je me suis donc dis que je pourrait peut etre passer par la creation de 2 collections, la 1ere etant l'ensemble des concatenations que l'on peut realiser avec x1, x2 et x3 en ne prenant que des chiffres de 0 a 7 et 30 et idem pour la 2eme collection mais de 8 a 30.

    Ce que j'aimerais traduire, et la j'ai besoin de votre aide, c'est:
    si x1&x2&x3 appartient a la 1ere collection alors [...] si x1&x2&x3 appartient a la 2eme collection alors [...]

    La je bloque. Peut etre qu'il faut passer par une forme du type boolean...

    Merci de votre aide!

    vanhoa
    vanhoa

    Je suis ici pour venir en aide (a mon niveau) comme on le fait aussi pour moi!
    Merci pour votre indulgence quant a mes reponses.
    N'oubliez pas, nous sommes remuneres en quand c'est merite!!

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select Case True
        Case (x1 <= 7 Or x1 = 30) And (x2 <= 7 Or x2 = 30) And (x2 <= 7 Or x2 = 30): MsgBox "OK1"
        Case x1 >= 8 And x1 >= 8 And x1 >= 8: MsgBox "OK1"
    End Select
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    Grillé, mais c'est pas grave.

    Le Select Case True. Mon grand amour. La preuve absolue de la supériorité de VB sur C#, JAVA, et autres langages inférieurs (bon, d'accord, je trolle un peu. Mais c'est tellement puissant ET lisible...)

    C'est une astuce trèèèès puissante quand on a des spécifications du genre "Alors, vous faites ça si ça, sinon vous faites ça si ça, sinon....." Les équivalents en ElseIf sont tellement moins lisibles. Buerk.

    Pour le coup, oui, la solution passe par une forme boolean, comme intuité par le demandeur, mais la plus simple qui soit : "True".
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  4. #4
    Membre actif Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Points : 253
    Points
    253
    Par défaut
    Genial! Merci beaucoup!

    Je ne connaissais absolument pas, et effectivement, c'est bien pratique.

    Sinon, de quelle facon j'aurais pu traduire (d'une autre maniere que le fait de detailler inferieur ou egal etc...) car si j'ai un cas tres complexe qui m'empeche justement de detailler cas par cas inferieur a ou egal a ou egal a etc... comment traduire appartient a telle collection?

    Prenons l'exemple de la cellule A1, si on veut traduire Range("A1") fait partie de la collection Cells, comment le formuler?

    Merci :-)

    vanhoa
    vanhoa

    Je suis ici pour venir en aide (a mon niveau) comme on le fait aussi pour moi!
    Merci pour votre indulgence quant a mes reponses.
    N'oubliez pas, nous sommes remuneres en quand c'est merite!!

  5. #5
    Expert éminent
    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
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    Pour répondre strictement à "comment traduire appartient a telle collection?", il n'y a pas d'instruction directe, mais par contre tu peux utiliser le fait que les collections ne supportent que des clefs uniques pour les éléments les constituants, tu associes une clef texte identique à l'élément pour chacun et quand tu veux voir si l'élément existe déjà tu l'ajoutes à la collection et s'il existe => plantage que tu exploites via un traitement d'erreur.
    Dans la cas considéré si l'élément n'existe pas, il serait ajouté à la collection, donc du coup, il faut l’effacer derrière...
    cf : http://silkyroad.developpez.com/excel/doublons/#LIV-A
    Dans ce contexte, il serait peu-être plus judicieux d'utiliser un Dictionnaire (cf Scripting.dictionary) qui possède une méthode Exists pour voir si une clef existe déjà

    Prenons l'exemple de la cellule A1, si on veut traduire Range("A1") fait partie de la collection Cells, comment le formuler?
    le parallèle est intéressant, mais pas bon car on est dans un cas particulier d'objets Range, cells n'étant pas une collection, mais une propriété qui retourne une objet range (qui est lui-même une collection), du coup dans ce cas-ci tu utiliseras la méthode intersect sachant que si une cellule appartient à une plage, leur intersection est forcément non nulle

    cordialement,

    Didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  6. #6
    Membre actif Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Points : 253
    Points
    253
    Par défaut
    OK merci!

    Oui effectivement j'avais vu 2 sujets sur le forum qui en parlait deja, et je cherchais une instruction specifique, mais qui n'existe pas du coup!

    vanhoa
    vanhoa

    Je suis ici pour venir en aide (a mon niveau) comme on le fait aussi pour moi!
    Merci pour votre indulgence quant a mes reponses.
    N'oubliez pas, nous sommes remuneres en quand c'est merite!!

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 22/06/2009, 18h53
  2. [E-03] Clé pour une collection
    Par Onimi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/01/2009, 14h23
  3. [Debutant]Mapping pour une collection
    Par maxattack dans le forum Hibernate
    Réponses: 14
    Dernier message: 14/06/2007, 10h59
  4. Réponses: 3
    Dernier message: 27/09/2006, 15h38

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