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 :

[VBA-E]nombre qui influe sur une boite de dialogue


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club Avatar de vovor
    Inscrit en
    Avril 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 119
    Points : 59
    Points
    59
    Par défaut [VBA-E]nombre qui influe sur une boite de dialogue
    Je bloque sur ceci.

    Sur une boite de dialogue A, je fais indiquer une valeur numerique dans un champ "num". C'est un nombre de produits
    Quand je clique sur Ok, ça ouvre une boite de dialogue B (ça passe a la suivante, grosso modo.. ). Sur celle ci je voudrais qu'il y ait une ligne par nombre de produit, avec sur chaque ligne :
    - une zone de liste modifiable (pour qu'ils choissent dans la liste des produits disponibles)
    - une zone de texte pour indiquer une quantité.

    1.Comment je dois faire pour qu'a chaque ligne, les zones de textes (et les listes modifiables) soient en dessous les uns des autres.
    2. Comment dois je faire pour que ceux de la 1ere ligne s'appelle ComboBox1 et TextBox1, ceux de la 2eme ligne ComboBox2 et TextBox2
    3. Comment aggrandir automatiquement la boite en fonction du nombre de lignes.

    merci

  2. #2
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par vovor
    Je bloque sur ceci.

    Sur une boite de dialogue A, je fais indiquer une valeur numerique dans un champ "num". C'est un nombre de produits
    Quand je clique sur Ok, ça ouvre une boite de dialogue B (ça passe a la suivante, grosso modo.. ). Sur celle ci je voudrais qu'il y ait une ligne par nombre de produit, avec sur chaque ligne :
    - une zone de liste modifiable (pour qu'ils choissent dans la liste des produits disponibles)
    - une zone de texte pour indiquer une quantité.

    1.Comment je dois faire pour qu'a chaque ligne, les zones de textes (et les listes modifiables) soient en dessous les uns des autres.
    2. Comment dois je faire pour que ceux de la 1ere ligne s'appelle ComboBox1 et TextBox1, ceux de la 2eme ligne ComboBox2 et TextBox2
    3. Comment aggrandir automatiquement la boite en fonction du nombre de lignes.

    merci
    Bonjour,

    Personnellement, je passerais par des groupes de contrôles de Combox et de TextBox que je charge ou décharge suivant le nombre de produits.
    Pour l'utilisation, on les appelle par leur index ComboBox(1) ComboBox(2) ...
    Cela simplifie grandement les choses.

    Regarde dans l'aide du côté de la propriété "Index".
    Ainsi que sur le forum, il existe plusieurs sujets concernant les groupes de contrôles.

    A plus tard, quand tu auras commencer à coder.

    Bonne continuation

    Théo

  3. #3
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    1. tu définis la position avec la propriété Top en te basant sur la propriété Top du contrôle précédent et en y ajoutant sa hauteur (Height) et une valeur de marge.

    2. Avec les groupes de contrôles tel qu'indiqué par Theo

    3. Avec les mêmes valeurs de Hauteur et de marge que tu ajoutes à la hauteur de ta Form.

  4. #4
    Membre du Club Avatar de vovor
    Inscrit en
    Avril 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 119
    Points : 59
    Points
    59
    Par défaut
    ok je vais me lancer la dedans...

    sinon je viens de remarquer que lorsque je fais [tab] pour passer d'une zone a une autre... ça me fait tout dans le desordre... comment je rétabli ça?

  5. #5
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par zazaraignée
    Salut

    1. tu définis la position avec la propriété Top en te basant sur la propriété Top du contrôle précédent et en y ajoutant sa hauteur (Height) et une valeur de marge.

    2. Avec les groupes de contrôles tel qu'indiqué par Theo

    3. Avec les mêmes valeurs de Hauteur et de marge que tu ajoutes à la hauteur de ta Form.
    Je rajouterais même le tout dans 2 frames pour permettre un scroll en cas de nombreux produits...

    La technique :
    • une frame fixe
    • une seconde frame avec une taille plus importante que la précédente
    • une ScrollBar verticale


    Et le tour est terminé

    Pour plus de détails voir la FAQ ici

    +

    Théo

  6. #6
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par vovor
    ok je vais me lancer la dedans...

    sinon je viens de remarquer que lorsque je fais [tab] pour passer d'une zone a une autre... ça me fait tout dans le desordre... comment je rétabli ça?
    Là il faut que tu renumérotes les valeurs de TabIndex de chaque contrôle.

    Théo

  7. #7
    Membre du Club Avatar de vovor
    Inscrit en
    Avril 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 119
    Points : 59
    Points
    59
    Par défaut
    c'est ok pour la tabulation...

    mais pas pour les groupes de controles.

    Pourtant je suis un utilisateur regulier de VBA. Mais là, vous me posez une colle. et j'trouve pas grand chose dans le moteur de recherche.

    PS : quand je veux mettre une parenthese à une value, il m'envoi boulet, theoriquement... sinon ça ferait longtemps que j'aurais reussi.

  8. #8
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par vovor
    c'est ok pour la tabulation...

    mais pas pour les groupes de controles.

    Pourtant je suis un utilisateur regulier de VBA. Mais là, vous me posez une colle. et j'trouve pas grand chose dans le moteur de recherche.

    PS : quand je veux mettre une parenthese à une value, il m'envoi boulet, theoriquement... sinon ça ferait longtemps que j'aurais reussi.
    Très juste les groupes de contrôles n'existent pas au niveau en VBA...



    Pas cool ça ... Je ne sais pas comment faire pour le moment...

    +

    Théo

  9. #9
    Membre du Club Avatar de vovor
    Inscrit en
    Avril 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 119
    Points : 59
    Points
    59
    Par défaut
    sinon j'avais pensé passer par une feuille excel, puisque c'est de l'appli sur Excel.

    Mais franchement ça ferait "sale". Je passe par une serie de boite de dialogue pour arriver a l'edition finale de la feuille, c'est pas pour coller une feuille excel au milieu. C'est ni propre, ni pro ..

    Mais puisqu'il n'y a que 5 produits maxi, j'avais pensé passer par la propriété .visible.
    Mais comment faire ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i=1 to 5 
    if i<=num then
    textBox"i".visible= true
    else
    textBox"i".visible=false
    end if

  10. #10
    Membre du Club Avatar de vovor
    Inscrit en
    Avril 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 119
    Points : 59
    Points
    59
    Par défaut
    d'ailleurs, toujours dans le meme genre de soucis, j'ai besoin que tous mes champs soient rempli pour valider la boite et passer a la suite. Comment je fais sans boucle For?

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Problème hyper super classique.
    Il s'agit de pallier aux groupes de contrôles
    Pour tes textbox, tu inclus, dans leurs noms, le même mot pour tous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For each LetxtBox in LaForm.Controls
         i = i + 1
         if instr(LetxtBox.name,"text") <> 0 then     ' tu as un textbox(i)
               NomTxtBox = LaForm.Controls(i).name
         endif
    Next
    Juste pour le principe mais tu vois qu'on peut récupérer les saisies dans une boucle

    Pour l'ordre dans lequel tu souhaites te déplacer d'une txt à une autre, tu fixes ça "en dur" dans les propriétés des textbox
    C'est la valeur TabIndex qui t'indique la chronologie des déplacements. Tu indiques simplement le N° d'ordre. Commence par le dernier.

    Tu dis

    A+

    Edit
    Vérifie, j'ai corrigé 2 (deux) erreurs dans mon code

  12. #12
    Membre du Club Avatar de vovor
    Inscrit en
    Avril 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 119
    Points : 59
    Points
    59
    Par défaut
    merci.

    je teste ça demain et je met en "resolu"

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Peut-être bien, où ?

    J'ai bien mis "Juste pour le principe"

  14. #14
    Membre du Club Avatar de vovor
    Inscrit en
    Avril 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 119
    Points : 59
    Points
    59
    Par défaut
    rien rien.. j'avais seulement un morceau de ton message, d'abord...

    on va arreter de s'editer au fur et a mesure..

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tiens, un exemple concret :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CopierHorairesATantôt()
    Dim NomContrôle As Control, ok as boolean
        For Each NomContrôle In GrilleDeSaisie.Controls
            ok = InStr(NomContrôle.Name, "TextATantôt") <> 0
            If ok Then
                msg = TextATantôtLundi.Text
                NomContrôle.Text = msg
            End If
        Next NomContrôle
    End Sub
    Qui copie les horaires du lundi après-midi sur tous les après-midi de la semaine

    Tu peux t'en inspirer

    A+

  16. #16
    Membre du Club Avatar de vovor
    Inscrit en
    Avril 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 119
    Points : 59
    Points
    59
    Par défaut
    arf je ne les comprend pas tellement, tes fonctions...

    tu peux me les expliquer ligne par ligne si ça t'embete pas trop?

  17. #17
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par vovor
    arf je ne les comprend pas tellement, tes fonctions...

    tu peux me les expliquer ligne par ligne si ça t'embete pas trop?
    On t'a volé la touche F1 de ton clavier???

  18. #18
    Membre du Club Avatar de vovor
    Inscrit en
    Avril 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 119
    Points : 59
    Points
    59
    Par défaut
    aieuhhh

    la touche F1 m'aidera pas trop à comprendre quelles sont les variables et les fonctions dans le 1er programme qu'il m'a donné. Je peux passer des heures a chercher une fonction ou une variable interne LetextBox alors qu'il s'agit d'une appelation de sa part.

    de plus , c'est la 1ere fois que je vois une conditionnelle si ecrite de la sorte :

  19. #19
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par ouskel'n'or
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim NomContrôle As Control, ok as boolean
          ok = InStr(NomContrôle.Name, "TextATantôt") <> 0
    Franchement, je ne vois pas ce qu'il y a de difficile à comprendre...

    Si InStr renvoie autre chose que 0, ok (booléen) devient True.

    Faudra vraiment t'impliquer un peu plus si tu veux avancer.

  20. #20
    Membre du Club Avatar de vovor
    Inscrit en
    Avril 2005
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 119
    Points : 59
    Points
    59
    Par défaut
    comment dois je prendre cela? tu connais meme pas mon niveau ou ma progression.
    bon d'accord je passe en "resolu" et je me debrouille moi meme!

    merci à toi, ouskel'n'or...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Afficher un message sur une boite de dialogue
    Par kamalkimo dans le forum Forms
    Réponses: 11
    Dernier message: 04/11/2012, 10h12
  2. redirection apres clic sur une boite de dialogue
    Par nico le noob dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/08/2010, 18h16
  3. Connaitre l'action de l'utilisateur sur une boite de dialogue
    Par Général03 dans le forum Débuter
    Réponses: 2
    Dernier message: 05/11/2009, 12h22
  4. gerer le cancel sur une boite de dialogue
    Par Nako_lito dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/06/2009, 10h45
  5. Erreur sur une boite de dialogue WXWIDGETS
    Par barbarello dans le forum Autres éditeurs
    Réponses: 6
    Dernier message: 06/01/2006, 20h46

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