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 :

ouverture d'un formulaire lorsqu'un mot précis est sélectionné dans une liste


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut ouverture d'un formulaire lorsqu'un mot précis est sélectionné dans une liste
    Bonjour,

    je dispose d'un fichier assez complexe et je souhaiterai mettre un place un code vba qui permettra de surveiller la saisie dans les cellules qui se fait par liste déroulante.
    En effet je souhaite que l'utilisateur complète bien toutes les infos, comment écrire que si le mot "Traitement" est sélectionné, un formulaire s'ouvre pour demander le type de produit et sa quantité ?

    Merci

    PS : il est difficile pour moi de vous joindre un fichier.. dsl il comprend plein de codes avec mot de passe et noms utilisateurs et données confidentielles..

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Points : 2 427
    Points
    2 427
    Par défaut
    Bonjour,

    Quelque chose comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Traitement()
     
    If Range("XX").Value="Traitement" Then
    ' XX répresentant ta cellule, D3 par exemple
     
    Userform1.Show
    End If
     
    End Sub
    A toi de créer le Userfrom qui va bien derrière.

    Si cela peut t'aider, je débute VBA.

  3. #3
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Le mot "traitement", il est où ? dans un combobox, sur une feuille de ton classeur, ...?

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    Merci Miistik, mais je pense que cela est plus compliqué que cela pour que le code surveille chaque feuille!
    L'albatros, le mot "traitement" est situé dans une liste déroulante sur une feuille du classeur, et l'utilisateur est susceptible de le choisir plusieurs fois! (il s'agit de listes déroulantes en cascade à 3 niveaux (avec fonction DECALER, INDIRECT et le gestionnaire de noms)).

    Merci d'avance!

  5. #5
    Membre émérite

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Points : 2 427
    Points
    2 427
    Par défaut
    Re,

    Une chose que je n'ai pas compris.

    Tu dis que ta ListBox est sur une cellule sur une feuille mais tu veux parcourir toutes les feuilles

    Ensuite, "Traitement" peut-être choisi plusieurs fois
    Dans la même ListBox ?

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    Re!

    Désolé de ne pas avoir été très clair..

    Ma feuille "Fiche" est composée de différents tableaux. Dans l'un de ces tableaux, les utilisateurs doivent remplir les colonnes suivantes :
    Type de travaux, Nature des travaux, Matériel utilisé, durée et produit.
    Les cases sont toujours toutes remplis sur une ligne SAUF produit car seulement certains type de travaux nécessitent d'utiliser unproduit.

    Les cases : Type de travaux, Nature des travaux, Matériel utilisé se remplissent grâce à des listes déroulantes (pas une listbox mais gestionnaire de noms avec fonctions DECALER et INDIRECT). je souhaiterai que lorsque dans Type de travaux l'utilisateur sélectionne "Traitement", un formulaire s'ouvre pour demander le produit utilisé et sa quantité (pour "obliger" les utilisateurs à fournir ce renseignement). je cherche donc à créer un code vba qui "surveillerai" la feuille "fiche" pour afficher un formulaire dès que "Traitement" est sélectionné.

    Désolé encore..

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Points : 377
    Points
    377
    Par défaut
    Bonjour à tous,

    A priori, instruction à insérer dans l'événement "Change" de la feuille concernée, soit "Fiche" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Value = "Traitement" Then UserForm1.Show
    Cordialement.

  8. #8
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    merci pour cette piste!

    juste une autre question comment relever les coordonnées de la cellule où "traitement" aura été "détecté" ? et que représente l'apellation "target" ?

    Merci, merciiiii !

  9. #9
    Membre émérite

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Points : 2 427
    Points
    2 427
    Par défaut
    Bonjour,

    Target signifie " n'importe quelle cellule".

    Ainsi, il va chercher si une cellule quelconque a pour valeur "Traitement".

    Pour récupérer les informations de la cellule, essayes ceci:
    S'il y en a plusieurs, pose i à la place de 1 et fait le varier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i=1 To i=50
    ....
    Next

  10. #10
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    J'ai testé la code mais lorsque "Traitement" est sélectionné, j'ai une erreu de type 13 "incompatibilité de type" qui s'affiche. A quoi cela peut-il être du ?

  11. #11
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par Miistik Voir le message
    Target signifie " n'importe quelle cellule".
    Pas vraiment, Target signifie Cible
    C'est à dire, par exemple pour l’évènement Private Sub "Worksheet_Change(ByVal Target As Range)" la ou les cellules qui subissent une modification dans la feuille concernée

  12. #12
    Membre émérite

    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Juin 2012
    Messages
    877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Points : 2 427
    Points
    2 427
    Par défaut
    Re,

    Sur quelle ligne de code ?

    Essaye ceci également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.Cells(1).Name.Name
    @fring : Merci de la correction.

  13. #13
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    J'avais mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    qui ne fonctionne pas mais avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Range)
    cela fonctionne!

    Quelqu'un peut m'expliquer la différence ??
    Merci!

    PS : je n'avais pas vu vos messages avec le raffarichissement de la feuille.; dsl je vais testé la boucle pour "extraire" les coordonnées de la cellule! merci à tous les deux!

  14. #14
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964

  15. #15
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    merci! j'ai compris!

    une question lié à mon UserForm,
    peut-on créer des cases à cocher en fonction d'une feuille de la base de données ? Par exemple si dans ma BD j'ai 5 produits, l'Userform comprend 5 cases à cocher. Si un produit est supprimé ou ajouté, l'Userform se met à jour ?

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Points : 262
    Points
    262
    Par défaut
    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
    16
    17
    18
    Private Sub Userform_Initialize()
     
        Dim WS As Worksheet
        Dim i As Integer
        Dim Ctl As Control
        Set WS = ThisWorkbook.Worksheets("Feuil1")
     
     
        With WS
            For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
                Set Ctl = Me.Controls.Add("Forms.CheckBox.1")
                Ctl.Name = "CheckBox_" & i
                Ctl.Top = 20 * i
                Ctl.Left = 10
                Ctl.Caption = .Cells(i, 1)
            Next i
        End With
    End Sub
    Apres à toi d'ajuster les proprietés de tes controls pour les adapter à ton Userform.

  17. #17
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    c'est parfaiiiiiiiiiiiit!

    merci!

    et si je veux ajouter une checkbox et une textbox (ou inputbox ? quelle est la meilleure solution ?) pour taper une quantité ? j'inscrit cela à quelle ligne du code ?

  18. #18
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    J'ai réussi!

    J'ai aussi tenté de mettre un bouton "ok" mais cela ne fonctionne pas.. :/ je vous joins mon bout de code :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Private Sub Userform_Initialize()
     
        Dim WS As Worksheet
        Dim i As Integer
        Dim Ctl As Control
        Dim NbrCtl As Integer
        Set WS = ThisWorkbook.Worksheets("Produits")
     
        With WS
            For i = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
                Set Ctl = Me.Controls.Add("Forms.CheckBox.1")
                Ctl.Name = "CheckBox_" & i
                Ctl.Top = 20 * i
                Ctl.Left = 10
                Ctl.Width = 100
                Ctl.Caption = .Cells(i, 3)
                Set Ctl = Me.Controls.Add("Forms.TextBox.1")
                Ctl.Name = "Textbox_" & i
                Ctl.Top = 20 * i
                Ctl.Left = 100
                Ctl.Width = 100
                NbrCtl = 1 + i
            Next i
        End With
        Set Ctl = Me.Controls.Add("Forms.CommandButton.1")
        Ctl.Name = "CommandButtonOK"
        Ctl.Top = 40 * NbrCtl
        Ctl.Left = 50
        Ctl.Caption = OK
    End Sub

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Points : 262
    Points
    262
    Par défaut
    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
    16
        With WS
            For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
                ' Ajout des Controls CheckBox
                Set Ctl = Me.Controls.Add("Forms.CheckBox.1")
                Ctl.Name = "CheckBox_" & i
                Ctl.Top = 20 * i
                Ctl.Left = 10
                Ctl.Caption = .Cells(i, 1)
                ' Ajout des Controls TextBox
                Set Ctl = Me.Controls.Add("Forms.textBox.1")
                Ctl.Name = "TextBox_" & i
                Ctl.Top = 20 * i
                Ctl.Left = 80
                Ctl.TextAlign = fmTextAlignRight
            Next i
        End With
    Essaies comme ceci =)


  20. #20
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 129
    Points : 163
    Points
    163
    Par défaut
    ça ne fonctionne pas... la variable "NbrCtl est-elle bien défini et utlisée ?

Discussions similaires

  1. Nouveau Fichier lorsqu'un nouveau caractère est rencontré dans une colonne
    Par remi_adm dans le forum Programmation et administration système
    Réponses: 5
    Dernier message: 29/01/2015, 10h18
  2. Réponses: 1
    Dernier message: 02/06/2014, 13h56
  3. [XL-2000] Verrouiller une cellule quand un mot clé est saisi dans une autre
    Par Paloma dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/06/2009, 11h36
  4. Réponses: 28
    Dernier message: 05/03/2009, 12h55
  5. Ouverture d'un formulaire sur un enregistrement précis
    Par Halzard dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/06/2007, 14h36

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