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 checkbox if else


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    gardien
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : gardien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Par défaut Vba checkbox if else
    Bonjour à tous.

    J'ai un petit souci sur un UserForm qui contient 3 checkbox pour une demande d'étiquettes.
    Ma macro devrait ajouter une ligne en mettant un 1 dans les colonnes F, G et H SI on coche les textbox.
    Tout fonctionne sauf ça. Que je coche ou pas, ça me met toujours un 1 dans les 3 colonnes.
    Je précise qu'il me faut un espace si la textbox n'est pas coché sinon à la prochaine demande le 1 va remonter sur la dernière cellule vide.
    Je suis sûr que je suis pas loin mais je vois pas mon erreur. Si qqun peut m'aider...Voici le code de mon bouton valider.

    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
    Private Sub CmdValider_Click()
     
        If Me.TextLOG.Text = "" Then
            MsgBox "Le n° du logement est obligatoire."
            Me.TextLOG.SetFocus
            Exit Sub
        End If
        If CheckInterphonie.Value = True Then
            Me.CheckInterphonie.SetFocus
        Else
            Me.CheckInterphonie.Value = " "
            'Exit Sub
        End If
        If CheckBAL.Value = True Then
            Me.CheckBAL.SetFocus
        Else
           Me.CheckInterphonie.Value = " "
            'Exit Sub
        End If
        If CheckTableau.Value = True Then
            Me.CheckTableau.SetFocus
        Else
            Me.CheckInterphonie.Value = " "
            'Exit Sub
        End If
     
        Range("D65536").End(xlUp).Offset(1, 0).Value = Me.TextLOG.Text
        Range("F65536").End(xlUp).Offset(1, 0).Value = 1
        Range("G65536").End(xlUp).Offset(1, 0).Value = 1
        Range("H65536").End(xlUp).Offset(1, 0).Value = 1
        Range("I65536").End(xlUp).Offset(1, 0).Value = Date
        Unload Me
     
    End Sub
    Merci de votre retour.

  2. #2
    Membre Expert

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

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

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

    Pour plus de lisibilité, pensez à utiliser la balise CODE (le symbole # quand on écrit un message).

    Le problème est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Range("D65536").End(xlUp).Offset(1, 0).Value = Me.TextLOG.Text
    Range("F65536").End(xlUp).Offset(1, 0).Value = 1 'Ecrit 1
    Range("G65536").End(xlUp).Offset(1, 0).Value = 1 'Ecrit 1
    Range("H65536").End(xlUp).Offset(1, 0).Value = 1 'Ecrit 1
    Range("I65536").End(xlUp).Offset(1, 0).Value = Date
    Ce morceau de code est placé seul sans condition donc dans TOUS les cas, 1 sera écrit dans la dernière cellule des colonnes F,G,H.

    Ton but : Ma macro devrait ajouter une ligne en mettant un 1 dans les colonnes F, G et H SI on coche les textbox.

    Plusieurs solutions :
    - Tu testes déjà si chacune des checkbox sont cochées. Ajoute à ce code la ligne qui écrit "1"
    - Tu as besoin que les 3 checkbox soient cochées pour écrire "1".
    Tu peux donc faire cela
    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
     
    Private Sub CmdValider_Click()
     
    Dim Compteur as Integer 'ICI
    If Me.TextLOG.Text = "" Then
    MsgBox "Le n° du logement est obligatoire."
    Me.TextLOG.SetFocus
    Exit Sub
    End If
    If CheckInterphonie.Value = True Then
    Compteur=Compteur+1 'ICI
    Me.CheckInterphonie.SetFocus
    Else
    Me.CheckInterphonie.Value = " "
    'Exit Sub
    End If
    If CheckBAL.Value = True Then
    Compteur=Compteur+1 'ICI
    Me.CheckBAL.SetFocus
    Else
    Me.CheckInterphonie.Value = " "
    'Exit Sub
    End If
    If CheckTableau.Value = True Then
    Compteur=Compteur+1 'ICI
    Me.CheckTableau.SetFocus
    Else
    Me.CheckInterphonie.Value = " "
    'Exit Sub
    End If
     
    If Compteur=3 Then 'ICI
       Range("D65536").End(xlUp).Offset(1, 0).Value = Me.TextLOG.Text
       Range("F65536").End(xlUp).Offset(1, 0).Value = 1
       Range("G65536").End(xlUp).Offset(1, 0).Value = 1
       Range("H65536").End(xlUp).Offset(1, 0).Value = 1
       Range("I65536").End(xlUp).Offset(1, 0).Value = Date
       Unload Me
    End If 'ICI
     
    End Sub
    En espérant t'avoir aidé,

  3. #3
    Membre averti
    Homme Profil pro
    gardien
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : gardien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Par défaut
    Bonjour et merci pour la rapidité.


    Je viens de tester mais cela ne fonctionne pas comme je veux.

    Si je ne coche qu'une case cela ne marche pas.
    Je suis obligé de cocher les 3 checkbox pour que ça fonctionne et ilme met 1 sur les 3 colonnes bien sûr.

    Je voudrais pouvoir ne cocher qu'une checkbox selon le cas et que cala mette 1 seulement dans case correspondante.

    Je regarde à tout hasard si je n'oublie pas un truc.

    Encore merci de ton aide précieuse.

  4. #4
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CmdValider_Click()
     
    If Me.TextLOG.Text = "" Then MsgBox "Le n° du logement est obligatoire.":Me.TextLOG.SetFocus:Exit Sub
    If CheckInterphonie.Value <> True Then Me.CheckInterphonie.SetFocus: Exit Sub
    If CheckBAL.Value <> True Then Me.CheckBAL.SetFocus:Exit Sub
    If CheckTableau.Value <> True Then Me.CheckTableau.SetFocus:Exit Sub

  5. #5
    Membre averti
    Homme Profil pro
    gardien
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : gardien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Par défaut
    Je viens de voir l'erreur.

    Non. Je n'ai pas besoin que les 3 checkbox soient cochée puisque c'est un choix qui peut être multiple.

    Je veux des 1 où je coche c'est tout.

    Car je peux avoir besoin de commander soit 1, soit 2 ou soit les 3 étiquettes. cela dépend de la config du lieu en fait.

    Merci encore

  6. #6
    Membre Expert

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

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    Le code que je t'ai donné était une solution vu que le besoin n'était pas clair pour moi.

    Je t'ai écris cela :
    Plusieurs solutions :
    - Tu testes déjà si chacune des checkbox sont cochées. Ajoute à ce code la ligne qui écrit "1"
    - Tu as besoin que les 3 checkbox soient cochées pour écrire "1".


    Le code que tu as testé était la deuxième possibilité.

    Pour la première (celle que tu veux), essayes ceci
    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
     
    Private Sub CmdValider_Click()
     
    If Me.TextLOG.Text = "" Then
    MsgBox "Le n° du logement est obligatoire."
    Me.TextLOG.SetFocus
    Exit Sub
    End If
     
    If CheckInterphonie.Value = True Then
    Range("F65536").End(xlUp).Offset(1, 0).Value = 1 'ICI 
    Me.CheckInterphonie.SetFocus
    Else
    Me.CheckInterphonie.Value = " "
    'Exit Sub
    End If
     
    If CheckBAL.Value = True Then
    Range("G65536").End(xlUp).Offset(1, 0).Value = 1 'ICI
    Me.CheckBAL.SetFocus
    Else
    Me.CheckInterphonie.Value = " "
    'Exit Sub
    End If
     
    If CheckTableau.Value = True Then
    Range("H65536").End(xlUp).Offset(1, 0).Value = 1 'ICI
    Me.CheckTableau.SetFocus
    Else
    Me.CheckInterphonie.Value = " "
    'Exit Sub
    End If
     
    Range("D65536").End(xlUp).Offset(1, 0).Value = Me.TextLOG.Text ' je sais pas où placer cela
    Range("I65536").End(xlUp).Offset(1, 0).Value = Date ' idem 
    Unload Me
    End Sub
    Tu peux bien sur inverser les lignes tagguées "ICI" suivant dans quelle colonne tu écris 1 pour une checkbox donnée

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CmdValider_Click()
    If Me.TextLOG.Text = "" Then MsgBox "Le n° du logement est obligatoire.":Me.TextLOG.SetFocus:Exit Sub
    If CheckInterphonie.Value + CheckBAL.Value + CheckTableau.Value <>true then msgbox "Vous devez cocher 1": Exit Sub
    Dernière modification par AlainTech ; 09/02/2015 à 02h39. Motif: Correction balises

  8. #8
    Membre averti
    Homme Profil pro
    gardien
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : gardien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Par défaut
    Respect!

    Le dernier code fonctionne.

    En revanche quand je coche qu'une checkbox il me met bien le 1 ou je veux mais pas l'espace dans celles qui restent vides.

    Du coup, si je fais une autre demande derrière et que la cellule de la ligne du dessus est vide, mon 1 remonte jusqu'à la dernière cellule non vide.

    Pourtant on dirait bien que tu le gère:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If CheckInterphonie.Value = True Then
        Range("F65536").End(xlUp).Offset(1, 0).Value = 1 'ICI
        Me.CheckInterphonie.SetFocus
    Else
        Me.CheckInterphonie.Value = " "
        'Exit Sub
    End If

  9. #9
    Invité
    Invité(e)
    Par défaut
    Me.CheckInterphonie.Value = " " est un contrôle pas un cellule!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CheckTableau.Value = True Then Range("H65536").End(xlUp).Offset(1, 0).Value = 1  :  Range("H65536").End(xlUp).value=" " '??????

  10. #10
    Membre Expert

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

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 877
    Par défaut
    Tu dois faire exactement pareil que pour écrire le "1".

    PS : bonne remarque de rdurupt (+1)

    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If CheckInterphonie.Value = True Then
    Range("F65536").End(xlUp).Offset(1, 0).Value = 1 'ICI on écrit 1 si checkbox cochée
    Me.CheckInterphonie.SetFocus
    Else
    Me.CheckInterphonie.Value = " "
    Range("F65536").End(xlUp).Offset(1, 0).Value=" " 'ICI on écrit le caractère ESPACE si non cochée
    'Exit Sub
    End If

  11. #11
    Membre averti
    Homme Profil pro
    gardien
    Inscrit en
    Janvier 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : gardien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 14
    Par défaut
    Bravo et encore merci.

    Voici le code complet qui me va bien. J'ai fait pareil pour les deux autres boutons et c'est nickel.

    En fait je rentre le n° du logement dans une TextBox en colonne D et la colonne I me met la date de la demande pour les 2 dernières ligne.
    Dans mon UserForm j'ai un bouton qui me met la date de prise en compte et un autre pour la clôture.
    Rien de bien compliqué pour vous mais pour moi qui adore Excel c'est un peu plus compliqué; mais je m'accroche.

    Encore mille 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
    Private Sub CmdValider_Click()
     
    If Me.TextLOG.Text = "" Then
        MsgBox "Le n° du logement est obligatoire."
        Me.TextLOG.SetFocus
        Exit Sub
    End If
     
    If CheckInterphonie.Value = True Then
        Range("F65536").End(xlUp).Offset(1, 0).Value = 1 'ICI on écrit 1 si checkbox cochée
        Me.CheckInterphonie.SetFocus
    Else
        Me.CheckInterphonie.Value = " "
        Range("F65536").End(xlUp).Offset(1, 0).Value = " " 'ICI on écrit le caractère ESPACE si non cochée
    End If
     
    If CheckBAL.Value = True Then
        Range("G65536").End(xlUp).Offset(1, 0).Value = 1
        Me.CheckBAL.SetFocus
    Else
        Me.CheckInterphonie.Value = " "
        Range("G65536").End(xlUp).Offset(1, 0).Value = " "
    End If
     
    If CheckTableau.Value = True Then
        Range("H65536").End(xlUp).Offset(1, 0).Value = 1
        Me.CheckTableau.SetFocus
    Else
        Me.CheckInterphonie.Value = " "
        Range("H65536").End(xlUp).Offset(1, 0).Value = " "
    End If
     
    Range("D65536").End(xlUp).Offset(1, 0).Value = Me.TextLOG.Text
    Range("I65536").End(xlUp).Offset(1, 0).Value = Date
    Unload Me
    End Sub

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

Discussions similaires

  1. Aide sur VBA condition If /else if/end if
    Par mederick dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 25/04/2014, 17h48
  2. VBA checkbox affichage personnalisé Power Point
    Par voilier06 dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 31/10/2012, 21h17
  3. [XL-2007] VBA, If...Then...Else
    Par orliko dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/10/2012, 10h15
  4. VBA checkbox de non affichage
    Par europium2 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/07/2011, 10h29
  5. [XL-2007] VBA checkbox à choisir
    Par vivi4561 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/02/2011, 13h40

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