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 :

Validation Formulaire avec choix cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut Validation Formulaire avec choix cellule
    Bonjour,

    Je suis novice en Vba et je souhaiterais confier à votre expertise mon souci.

    J'ai créé un userform que vous pourrez trouver en pièce jointe.
    Ce userform contient des :
    - boutons d'option répartis dans des cadres;
    - un bouton de commande RAZ (macro déjà allouée)
    - un bouton valider (je n'arrive pas à faire la macro)
    - une zone de texte prévue pour saisir une cellule excel de la feuille active pour que les infos aillent dans cette cellule.

    Je souhaite donc pouvoir cocher des boutons d'option, valider le userform et que les informations aillent dans la cellule choisie. Ces informations devront s'écrire les unes derrière les autres dans la même cellule.

    Un grand merci à toutes les personnes qui pourront se pencher sur ce problème.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Bonjour, j'ai une proposition qui fonctionne normalement :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Private Sub CommandButton2_Click()
     
    'Vérifie préalablement si la textbox est remplie MAIS PAS SI LA CELLULE EXISTE
     
    If TextBox1.Text = "" Then
        MsgBox "Remplissez d'abord l'adresse de la cellule à remplir"
        TextBox1.SetFocus
        Exit Sub 'on ferme la macro pour éviter de lire le reste
    End If
     
    'on déclare les variables
    Dim ctrl As Control
    Dim Message As String
    Dim NbChoix As Integer
    Dim NbFrame As Integer
     
    For Each ctrl In Me.Controls 'on scanne tous les contrôles du formulaire
        Select Case TypeName(ctrl) 'on regarde leur type
            Case "OptionButton" 'on s'arrête sur les OptionButtons
                If ctrl.Value = True Then 'uniquement sur ceux dont la valeur est true
                    NbChoix = NbChoix + 1 'on incrémente le compteur d'OptionButtons
                    Message = Message & ctrl.Parent.Caption & " : " & ctrl.Caption & " / " 'On remplit la variable Message qu'on écrira à la fin
                End If
            Case "Frame" 'On s'arrête également sur les Frames
                NbFrame = NbFrame + 1 'on incrémente leur compteur
        End Select
    Next ctrl
     
    On Error GoTo Erreur
    If NbFrame = NbChoix + 1 Then '+ 1 car tu as UNE frame qui ne contient pas d'optionbutton
        Range(TextBox1.Text).Value = Message 'si on a bien le même nombre de frames que de choix, alors on écrit le message dans la cellule
    Else
        MsgBox "Impossible de procéder car " & NbFrame - NbChoix - 1 & " points ne sont pas remplis." 'sinon, on écrit un message d'erreur
    End If
     
    Exit Sub 'si tout se passe bien, on quitte la macro
     
    Erreur:  'Sinon, la macro enverra le code directement ici
    MsgBox "Il y a eu une erreur, il est probable que la cellule spécifiée n'existe pas, veuillez vérifier l'adresse ou contacter l'administrateur"
    TextBox1.SetFocus
     
    End Sub
    Pour info, pour que tu puisses comprendre le code, j'ai placé des commentaires.

    Par contre, je pense que tu ne devrais pas utiliser une textbox mais plutôt une RefEdit qui te permet de spécifier manuellement la cellule en la sélectionnant dans le tableau... Ou mieux : de l'imposer par la macro.

    Quentin

    PS : si tu veux remplacer les "/" par des retours à la ligne, utilise vbNewLine comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Message = Message & ctrl.Parent.Caption & " : " & ctrl.Caption & vbNewLine 'comme ça, ça écrira et insérera un retour à la ligne à chaque nouvelle info
    Les infos seront par ailleurs : le texte associé au parent de l'optionbutton activé (le nom de la frame dans lequel il se trouve) : le texte associé à l'optionbutton (+ retour à la ligne)

    En espérant que ce soit clair

    Quentin

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Tout d'abord merci beaucoup Quentin !

    j'ai essayé de rédiger la macro mais j'étais à 10 000 de trouver cela.
    Cela fonctionne parfaitement mais je ne voudrais pas que :
    - le nom de la frame apparaisse
    - les : après le nom de la frame non plus
    - les / entre les appréciations non plus
    - et que ce ne soit pas obligatoire de choisir une option dans toutes les frames (on peut en choisir une ou deux si on le souhaite mais pas obligatoirement toutes)

    Encore merci beaucoup pour ta justesse et ta rapidité.
    Au plaisir de te lire.

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Rebonsoir,

    Je n'ai pas vérifié mais logiquement ça devrait fonctionner ! Vu que l'on se fout du nombre de frames et tout, j'ai tout supprimé ce qui concernait les frames et le compte des optionbuttons cochés.

    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
    31
    32
    Private Sub CommandButton2_Click()
     
    'Vérifie préalablement si la textbox est remplie MAIS PAS SI LA CELLULE EXISTE
     
    If TextBox1.Text = "" Then
        MsgBox "Remplissez d'abord l'adresse de la cellule à remplir"
        TextBox1.SetFocus
        Exit Sub 'on ferme la macro pour éviter de lire le reste
    End If
     
    'on déclare les variables
    Dim ctrl As Control
    Dim Message As String
     
    For Each ctrl In Me.Controls 'on scanne tous les contrôles du formulaire
        If TypeName(ctrl) = "OptionButton" 'on s'arrête sur les contrôles dont le type est "OptionButton" uniquement
                If ctrl.Value = True Then 'Plus précisément sur ceux dont la valeur est True 
                    Message = Message & ctrl.Caption & " " 'On remplit la variable Message qu'on écrira à la fin, entre 2 valeurs il y aura un espace (libre à toi de changer)
                End If
        End If
    Next ctrl
     
    On Error GoTo Erreur
    Range(TextBox1.Text).Value = Message 'On écrit dans la cellule choisie le message formé par les optionbuttons
     
    Exit Sub 'si tout se passe bien, on quitte la macro
     
    Erreur:  'Sinon, la macro enverra le code directement ici
    MsgBox "Il y a eu une erreur, il est probable que la cellule spécifiée n'existe pas, veuillez vérifier l'adresse ou contacter l'administrateur"
    TextBox1.SetFocus
     
    End Sub
    Tu pourrais sinon garder le même code que précédemment et t'arranger pour qu'au lieu de mettre un message d'erreur disant que toutes les frames ne sont pas remplies et quitter, alors tu précises "attention, tous les champs ne sont pas remplis, continuer ? " et si c'est non, alors tu quittes.


    Quentin

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    C'est incroyable mais je crois que suis arrivé à résoudre cela.
    Merci beaucoup à ceux qui se sont penchés sur mon souci.

    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
    31
    32
    33
    34
    35
    36
    Private Sub CommandButton2_Click()
     
    'Vérifie préalablement si la textbox est remplie MAIS PAS SI LA CELLULE EXISTE
     
    If TextBox1.Text = "" Then
        MsgBox "Remplissez d'abord l'adresse de la cellule à remplir"
        TextBox1.SetFocus
        Exit Sub 'on ferme la macro pour éviter de lire le reste
    End If
     
    'on déclare les variables
    Dim ctrl As Control
    Dim Message As String
    Dim NbChoix As Integer
    Dim NbFrame As Integer
     
    For Each ctrl In Me.Controls 'on scanne tous les contrôles du formulaire
        Select Case TypeName(ctrl) 'on regarde leur type
            Case "OptionButton" 'on s'arrête sur les OptionButtons
                If ctrl.Value = True Then 'uniquement sur ceux dont la valeur est true
                    NbChoix = NbChoix + 1 'on incrémente le compteur d'OptionButtons
                    Message = Message & ctrl.Caption & "  "  'On remplit la variable Message qu'on écrira à la fin
                End If
            Case "Frame" 'On s'arrête également sur les Frames
                NbFrame = NbFrame + 1 'on incrémente leur compteur
        End Select
    Next ctrl
         Range(TextBox1.Text).Value = Message 'si on a bien le même nombre de frames que de choix, alors on écrit le message dans la cellule
     
    Exit Sub 'si tout se passe bien, on quitte la macro
     
    Erreur:  'Sinon, la macro enverra le code directement ici
    MsgBox "Il y a eu une erreur, il est probable que la cellule spécifiée n'existe pas, veuillez vérifier l'adresse ou contacter l'administrateur"
    TextBox1.SetFocus
     
    End Sub

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    remplace le textbox1 par un refedite et tu pourras selectionner la celulle avec la sourie dans la feuille de calcul EXCEL!

  7. #7
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Bonjour,
    le code ci dessous fonctionne parfaitement pour mon besoin. J'ai toutefois l'impression qu'il écrit les appréciations dans l'ordre où elles ont été créées dans mon userform. Je préfèrerais qu'elles apparaissent dans l'ordre où elles sont cliquées. Est ce que vous avez une idée de ce qu'il faut modifier dans ce code.
    Merci.


    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
    31
    32
    33
    34
    35
    36
    37
    38
    Private Sub CommandButton2_Click()
     
    'Vérifie préalablement si la textbox est remplie MAIS PAS SI LA CELLULE EXISTE
     
    If TextBox1.Text = "" Then
        MsgBox "Remplissez d'abord l'adresse de la cellule à remplir"
        TextBox1.SetFocus
        Exit Sub 'on ferme la macro pour éviter de lire le reste
    End If
     
    'on déclare les variables
    Dim ctrl As Control
    Dim Message As String
    Dim NbChoix As Integer
    Dim NbFrame As Integer
     
    For Each ctrl In Me.Controls 'on scanne tous les contrôles du formulaire
        Select Case TypeName(ctrl) 'on regarde leur type
            Case "OptionButton" 'on s'arrête sur les OptionButtons
                If ctrl.Value = True Then 'uniquement sur ceux dont la valeur est true
                    NbChoix = NbChoix + 1 'on incrémente le compteur d'OptionButtons
                    Message = Message & ctrl.Caption & "  "  'On remplit la variable Message qu'on écrira à la fin
                End If
            Case "Frame" 'On s'arrête également sur les Frames
                NbFrame = NbFrame + 1 'on incrémente leur compteur
        End Select
    Next ctrl
     
         On Error GoTo Erreur
    Range(TextBox1.Text).Value = Message 'On écrit dans la cellule choisie le message formé par les optionbuttons
     
    Exit Sub 'si tout se passe bien, on quitte la macro
     
    Erreur:  'Sinon, la macro enverra le code directement ici
    MsgBox "Il y a eu une erreur, il est probable que la cellule spécifiée n'existe pas, veuillez vérifier l'adresse ou contacter l'administrateur"
    TextBox1.SetFocus
     
    End Sub

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

Discussions similaires

  1. [ODBC] Valider formulaire avec champs vides
    Par dorot dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 12/07/2006, 17h15
  2. valider formulaire avec la touche 'entrer'
    Par mikees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 06/07/2006, 17h51
  3. [Javascript] Validation formulaire avec ENTREE
    Par titalex dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/06/2006, 16h37
  4. Pb validation formulaire avec checkbox
    Par wolfe dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/12/2005, 08h50

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