Calcule sous condition

  • Initiateur de la discussion Initiateur de la discussion Gabs
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Gabs

XLDnaute Nouveau
Bonsoir , je revient vers vous une nouvelle fois , donc étant toujours débutant ... je ne sais pas comment faire , je m'explique :

J'ai fait un formulaire en VBA pour faire un rassemblement de reservations

Donc cela concerne les colonnes D,E,F.

J'ai mis dans chaque cellule de la colonne F un =SOMME((7*D7)+(5*E7))
Qui correspond a D et E de la même ligne ! 7 et 5 sont le prix des places et dans les case sont indiquer le nombre de personnes

exemple :

Code:
D2 = 10
E2 = 10
F2 = 20€
Donc F2 calcule par lui même le prix final , or j'aimerai rajouté une option dans mon formulaire avec un Checkbox pour annulé ce calcul (entrée offerte ou gratuite)

mon formulaire utilise :
Code:
    ' Conversion du nom et prénom en NOMPRPRE
    nom = Application.WorksheetFunction.Proper(Me.txtNom.Text)
    Prenom = Application.WorksheetFunction.Proper(Me.txtPrenom.Text)
    adulte = Application.WorksheetFunction.Proper(nbradu)
    enfant = Application.WorksheetFunction.Proper(nbrenf)
    ' Mise en place des valeurs saisies
    Range("B65536").End(xlUp).Offset(1, 0).Value = nom
    Range("C65536").End(xlUp).Offset(1, 0).Value = Prenom
    Range("D65536").End(xlUp).Offset(1, 0).Value = adulte
    Range("E65536").End(xlUp).Offset(1, 0).Value = enfant

pour me remplir les case automatiquement a la ligne
collone F calcule toujours toute seule !

donc comment faire en fonction d'un checkbox ?
Checkbox coché resultat 0 €
non coché resultat D?+E? ?

Merci beaucoup !
PS : mon code complet
Code:
Private Sub cmdAnnuler_Click()
    Unload Me
End Sub

Private Sub nbradu_Change()
    ' Vérifie si la valeur entrée est numérique
    If Not IsNumeric(nbradu.Text) Then
        Cancel = True ' Annule la validation de contrôle
        MsgBox "Veuillez entrer un nombre !"
    End If
End Sub

Private Sub nbrenf_Change()
    ' Vérifie si la valeur entrée est numérique
    If Not IsNumeric(nbradu.Text) Then
        Cancel = True ' Annule la validation de contrôle
        MsgBox "Veuillez entrer un nombre !"
    End If
End Sub


Private Sub cmdOk_Click()
    ' On teste la saisie du nom
    If Me.txtNom.Text = "" Then
        MsgBox "Vous devez entrer un nom."
        Me.txtNom.SetFocus
        Exit Sub
    End If
        ' On teste la saisie du nomombre d'adulte
    If nbradu = "" Then
        MsgBox "Vous devez entrer un nombre. (0 si nul)"
        Me.nbradu.SetFocus
        Exit Sub
    End If
            ' On teste la saisie du nombre d'enfants
    If nbrenf = "" Then
        MsgBox "Vous devez entrer un nombre. (0 si nul)"
        Me.nbrenf.SetFocus
        Exit Sub
    End If
    ' On teste la saisie du prénom
    If Me.txtPrenom.Text = "" Then
        MsgBox "Vous devez entrer un prénom."
        Me.txtPrenom.SetFocus
        Exit Sub
    End If

    ' Conversion du nom et prénom en NOMPRPRE
    nom = Application.WorksheetFunction.Proper(Me.txtNom.Text)
    Prenom = Application.WorksheetFunction.Proper(Me.txtPrenom.Text)
    adulte = Application.WorksheetFunction.Proper(nbradu)
    enfant = Application.WorksheetFunction.Proper(nbrenf)
    ' Mise en place des valeurs saisies
    Range("B65536").End(xlUp).Offset(1, 0).Value = nom
    Range("C65536").End(xlUp).Offset(1, 0).Value = Prenom
    Range("D65536").End(xlUp).Offset(1, 0).Value = adulte
    Range("E65536").End(xlUp).Offset(1, 0).Value = enfant
    

    'Recup cellule A
Dim ligne As Long

ligne = [B65536].End(xlUp).Row

TextBoxCode.Value = Range("A" & ligne)



End Sub
 
Re : Calcule sous condition

Bonsoir,
Il me semble que le plus simple serait de rajouter "exo" dans une cellule (colonne G par exemple) de la ligne, ce qui te permettra de t'y retrouver et pour tes statistiques ultérieures, puis dans ta formule colonne F
=SI(Gx="Exo";0;7*Dx+5*Ex) x étant le num de ligne
et dans ton formulaire
Code:
Private Sub cmdOk_Click()
Dim ligne As Long
ligne = [B65536].End(xlUp).Row + 1
'....
    Range("B" & ligne) = nom
    Range("C" & ligne) = Prenom
    Range("D" & ligne) = adulte
    Range("E" & ligne) = enfant
    Range("G" & ligne) = IIf(Checkbox1 = True, "Exo","")
'....
End Sub
A+
kjin
 
Re : Calcule sous condition

Re,
Au plus simple, sélectionnes ta colonne G (si c'est bien celle là)
Menu --> Format/Mise en Forme Conditionnelle -->
La valeur de la cellule est --> égale à --> ="Exo" (Si c'est bien "Exo")
puis tu choisies le format à appliquer puis OK
Sinon VBA

Edit : Au fait, j'avais oublié
Code:
    adulte = Application.WorksheetFunction.Proper(nbradu)
    enfant = Application.WorksheetFunction.Proper(nbrenf)
C'est pas très génant, mais le format Nom Propre pour un nombre ne veut pas dire grand chose; donc totalement inutile
Par contre une TextBox renvoyant une donnée de type String, il sera plus juste d' écrire :

Code:
    adulte = Cbyte(nbradu)
    enfant = Cbyte(nbrenf)
qui renverra un nombre compris entre 0 et 255
On peut de fait simplifier en supprimant les variables intermédiaires
Code:
Private Sub cmdOk_Click()
Dim ligne As Long
ligne = [B65536].End(xlUp).Row + 1
'....
    Range("B" & ligne) = Application.Proper(txtnom)
    Range("C" & ligne) = Application.Proper(txtprenom)
    Range("D" & ligne) = Cbyte(nbradu)
    Range("E" & ligne) = Cbyte(nbrenf)
    Range("G" & ligne) = IIf(Checkbox1 = True, "Exo","")
'....
End Sub
A+
kjin
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
585
Réponses
5
Affichages
717
Réponses
5
Affichages
488
Réponses
2
Affichages
334
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour