Dernier probleme sur case à cocher

Signaler
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008
-
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008
-
Rebonjour à tous, ceci est normalement, j'ai bien di normalement mdr mon dernier soucis.
Alors en fait j'utilise un userform ADM pour 2 fonctions, je m'explique
pour saisir une activité on arrive sur ADM puis on rentre toutes les valeurs et on valide et
pour modifier une activité, on choisi l'activité à modifier pui ADM s'ouvre mais avec les valeurs précédemment saisie pour justement les modifier
Dans ce userform ADM j'ai des cases à cocher, donc j'ai fait en sorte que quand la case était décoché mais qu'un prix était présent (donc inaccessible) il ne s'inscrivé pas dans excel mais mon problème est que cela marche mais seulement quand on saisie une activité et pas quand on l'a modifie.
Voila mon code :

Private Sub OK_Click()
    Dim Ws As Worksheet
    Dim Ligne As Integer

    Set Ws = Sheets("abonnements")
        If MODIFICATION = True Then
            Ligne = Line
        Else
            Ligne = Ws.Columns(1).Find("").Row
        End If
       
               If (case1 True Or case2 True Or case3 = True Or case4 = True Or case5 = True) Then
        Ws.Cells(Ligne, 1) = Act
        End If
        If case1.Value = True Then
        Ws.Cells(Ligne, 2) = prix1
        End If
        If case2.Value = True Then
        Ws.Cells(Ligne, 3) = prix2
        End If
        If case3.Value = True Then
        Ws.Cells(Ligne, 4) = prix3
        End If
        If case4.Value = True Then
        Ws.Cells(Ligne, 5) = prix4
        End If
        If case5.Value = True Then
        Ws.Cells(Ligne, 6) = prix5
        End If
   
        If Act = "" Then
            Rep = MsgBox("La saisie d'une activité est obligatoire", vbOKOnly + vbCritical, "ATTENTION")        ElseIf (case1 False And case2 False And case3 = False And case4 = False And case5 = False) Then
            mes = MsgBox("La saisie d'au moins un prix est obligatoire", vbOKOnly + vbCritical, "ATTENTION")
        Else
            Unload ADM
            Rep = MsgBox("Voulez-vous rentrer une autre activité ?", _
            vbYesNo + vbQuestion, "Programmer une autre activité ?")
        End If
    If Rep = vbYes Then
        ADM.Show
    ElseIf Rep = vbNo Then
        bye = MsgBox("Les nouvelles données sont bien enregistrées ; Merci et à très bientôt", , "AUREVOIR") 'envoyer un message d'information
    End If
    MODIFICATION = False
End Sub

C'est long mais je ne savais pas quoi couper, je travaille sous excel 2003.
Merci de votre aide

4 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Re
Reprenons ça plus clairement
Private Sub OK_Click()
    Dim Ws As Worksheet
    Dim Ligne As Integer

    Set Ws = Sheets("abonnements")
        If MODIFICATION = True Then
            Ligne = Line
        Else
            Ligne = Ws.Columns(1).Find("").Row
        End If
                If (case1 True Or case2 True Or case3 = True Or case4 = True Or case5 = True) Then _
           Ws.Cells(Ligne, 1) = Act        If case1.Value True Then Ws.Cells(Ligne, 2) prix1        If case2.Value True Then Ws.Cells(Ligne, 3) prix2        If case3.Value True Then Ws.Cells(Ligne, 4) prix3        If case4.Value True Then Ws.Cells(Ligne, 5) prix4        If case5.Value True Then Ws.Cells(Ligne, 6) prix5
    
        If Act = "" Or Not (case1 Or case2 Or case3 Or case4 Or case5) Then
            MsgBox "La saisie d'une activité est obligatoire", vbOKOnly Or vbCritical, "ATTENTION"
        Else
            Unload ADM
            Rep = MsgBox("Voulez-vous rentrer une autre activité ?", _
                                     vbYesNo Or vbQuestion, "Programmer une autre activité ?")
            If Rep = vbYes Then
               ADM.Show
            Else
               MsgBox "Les nouvelles données sont bien enregistrées ; Merci et à très bientôt", , _
                                       "AUREVOIR"    'envoyer un message d'information
            End If
        End If
        MODIFICATION = False
End Sub

J'ai allégé certaines lignes ou combinaisons répétitives.
Cela ne devrait rien changer au résultat.
Je vous bien un "Unload ADM", mais je ne vois pas de Load ...
Quand MODIFICATION est faux, Ligne représente une ligne vierge puisque tu recherches ""
Que vaut 'Line' ? d'où sort cette valeur ?

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008

Bonjour, je ne recherche pas rien je cherche à modifier donc à remplacer une fois des valeurs changées au même emplacement qu'au début, Line renvoi à la ligne que l'on veut modifier.
Et en fait mon problème c'est que cette partie du code ne s'applique pas quand on modifie maos seulement quand on saisie
If case1.Value True Then Ws.Cells(Ligne, 2) prix1        If case2.Value True Then Ws.Cells(Ligne, 3) prix2        If case3.Value True Then Ws.Cells(Ligne, 4) prix3        If case4.Value True Then Ws.Cells(Ligne, 5) prix4        If case5.Value True Then Ws.Cells(Ligne, 6) prix5

Merci de votre aide
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Si, elle s'applique quelque soit la valeur de MODIFICATION, mais aucune des 5 'case' n'est à True
Messages postés
105
Date d'inscription
dimanche 16 décembre 2007
Statut
Membre
Dernière intervention
11 novembre 2008

Alors j'ai fait comme ca parce que vu qu'aucune n'était à true il fallait que je donne une condition si c'était à false.

ElseIf MODIFICATION = True Then
        'sinon si on est passé par MODIFICATION alors
            If case1.Value = False Then
            'si case1 n'est pas cochée alors
                Ws.Cells(Ligne, 2) = ""
                'effacer dans la 2ème cellule
            End If
            'finsi
            If case2.Value = False Then
                Ws.Cells(Ligne, 3) = ""
            End If
            If case3.Value = False Then
                Ws.Cells(Ligne, 4) = ""
            End If
            If case4.Value = False Then
                Ws.Cells(Ligne, 5) = ""
            End If
            If case5.Value = False Then
                Ws.Cells(Ligne, 6) = ""
            End If

Ca marche, mais est-ce correct?