Microsoft 365 Formulaire dans une feuille

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous :)

Je souhaite avoir un formulaire dans un feuille (sans UserForm).
J'ai fait des recherches et trouvé un modèle que je trouve "sympathique".

Il est en anglais et j'ai modifié certaines parties en français.

J'ai également voulu ajouter un bouton et j'ai également modifié ce qui me semblait être à modifier.
A l'exécution, j'ai une erreur :
1665872773578.png


Le code d'origine avant ajout du bouton "Mle" est : .Range("C" & iRow).Value = IIf(optMr.Value = True, "Mr", "Mme")
J'ai tenté ça : .Range("C" & iRow).Value = IIIf(optMme.Value = True, "Mr, Mme, Mle")
Je n'arrive pas à le modifier pour que ça fonctionne Grrrr !!!
Pourriez-vous me donner le bon code ?

En cas, je joins le fichier test.
Un grand merci du soir...
:)
 

Pièces jointes

  • Worksheet-Form2.xlsm
    83.8 KB · Affichages: 11
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Une autre façon de faire pour les 3 OptionButton
(testé sur une feuille avec 3 optionbutton)
Code dans la feuille
VB:
Private Sub OptionButton1_Change()
[A1] = Choose(1 + OptionButton1 + 1, "Mr", "Mme", "Mlle")
End Sub

Private Sub OptionButton2_Change()
[A1] = Choose(2 + OptionButton1 + OptionButton2 + 1, "Mr", "Mme", "Mlle")
End Sub
Private Sub OptionButton3_Change()
[A1] = Choose(3 + OptionButton2 + OptionButton3 + 1, "Mr", "Mme", "Mlle")
End Sub
Test OK chez moi.

EDIT: Bonsoir @Phil69970
Je n'ai pas regardé ton fichier.
Je ne doublonne pas niveau syntaxe, j'espère ? ;)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re

Une autre façon de faire pour les 3 OptionButton
(testé sur une feuille avec 3 optionbutton)
Code dans la feuille
VB:
Private Sub OptionButton1_Change()
[A1] = Choose(1 + OptionButton1 + 1, "Mr", "Mme", "Mlle")
End Sub

Private Sub OptionButton2_Change()
[A1] = Choose(2 + OptionButton1 + OptionButton2 + 1, "Mr", "Mme", "Mlle")
End Sub
Private Sub OptionButton3_Change()
[A1] = Choose(3 + OptionButton2 + OptionButton3 + 1, "Mr", "Mme", "Mlle")
End Sub
Test OK chez moi.
Merci JM :)
Je verrai ça demain. Mais pas certain du tout de pouvoir transposer dans le fichier...
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir,

JM j'apprécie ton humour à condition qu'il ne soit pas condescendant ou agressif.

Bonne nuit.
C'est vrai que voilà des dizaines de fois que je dis que Barbatruc ne veut rien dire dans mon cas .
Mais têtu est et têtu restera.
Blesser sous le couvert de l'humour n'est pas si cool que ça lol
Il y a aussi les MP pour certaines réflexions, c'est plus propre pour les fils...
Humour pour humour lol
:)
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re

@Usine à gaz
C'est ce qui devrait t'inquiéter car moi aussi j'ai Defender et il n'a pas bronché quand je suis allé sur le site en question.
C'est un autre anti-virus qui a lancé l'alerte ;)
Bof : les antivirus, j'en ai ma claque, j'en ai acheté à tour de bras et trop compliqués pour moi.
Defender me va bien et en cas de virus, j'ai déjà prévu ce qu'il me faudrait faire ... Mais voilà plusieurs années que je n'en n'ai pas eu avec defender ... On verra bien quand ça arrivera :)
 

Staple1600

XLDnaute Barbatruc
Bonsoir job75

[Précisions]
Aucune condescendance ou agressivité.
Simplement, Lionel est un membre "ancien" du forum.
Il connait donc les bonnes habitudes et l'existence de l'aide en ligne.
[/Précisions]

@Usine à gaz
Un virus c'est pas le plus embêtant
Mais un PC "hacké", c'est plus chiant
Mais ceci est une autre histoire.

Sinon, si tu utilises un simili-formulaire sur une feuille, tu peux le faire sans VBA
(en utilisant les contrôles de formulaires au lieu des ActiveX)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonsoir job75

[Précisions]
Aucune condescendance ou agressivité.
Simplement, Lionel est un membre "ancien" du forum.
Il connait donc les bonnes habitudes et l'existence de l'aide en ligne.
[/Précisions]

@Usine à gaz
Un virus c'est pas le plus embêtant
Mais un PC "hacké", c'est plus chiant
Mais ceci est une autre histoire.

Sinon, si tu utilises un simili-formulaire sur une feuille, tu peux le faire sans VBA
(en utilisant les contrôles de formulaires au lieu des ActiveX)
Je veux bien JM mais je ne sais pas le faire lol - même vieux Barbatruc que je dois être :)
 

laurent950

XLDnaute Accro
Bonsoir Usine a Gaz

VB:
Option Explicit
Function ValidateForm() As Boolean
    txtName.BackColor = vbWhite
    cmbQualification.BackColor = vbWhite
    txtCity.BackColor = vbWhite
    txtState.BackColor = vbWhite
    txtCountry.BackColor = vbWhite
    
    ValidateForm = True
    If Trim(txtName.Value) = "" Then
        MsgBox "Indiquez le nom et prénom", vbOKOnly + vbInformation, "Name"
        txtName.BackColor = vbRed
        txtName.Activate
        ValidateForm = False
    
    ElseIf optMme.Value = False And optMle.Value And OptMr.Value = False And optMle.Value = False Then
        MsgBox "Indiquez le Genre.", vbOKOnly + vbInformation, "Genre"
        ValidateForm = False
        
    ElseIf cmbQualification.Text <> "Patron" And cmbQualification.Text <> "Grand Patron" And _
            cmbQualification.Text <> "Employé" Then
        MsgBox "Indiquez la qualification", vbOKOnly + vbInformation, "Qualification"
        cmbQualification.BackColor = vbRed
        cmbQualification.Activate
        ValidateForm = False
    
    ElseIf Trim(txtCity.Value) = "" Then
        MsgBox "Indiquez la commune d'habitation", vbOKOnly + vbInformation, "City name"
        txtCity.BackColor = vbRed
        txtCity.Activate
        ValidateForm = False
        
    ElseIf Trim(txtState.Value) = "" Then
        MsgBox "Indiquez le pays d'habitation", vbOKOnly + vbInformation, "State Name"
        txtState.BackColor = vbRed
        txtState.Activate
        ValidateForm = False
    
    ElseIf Trim(txtCountry.Value) = "" Then
        MsgBox "Indiquez le département d'habitation", vbOKOnly + vbInformation, "Country Name"
        txtCountry.BackColor = vbRed
        txtCountry.Activate
        ValidateForm = False
    End If
End Function

Function Reset()
    Application.ScreenUpdating = False
    
    txtName.Value = ""
    txtName.BackColor = vbWhite

    'optHomme.Value = False
    'optFemme.Value = False
    
    cmbQualification.Text = ""
    cmbQualification.BackColor = vbWhite
    
    txtCity.Value = ""
    txtCity.BackColor = vbWhite
    
    txtState.Value = ""
    txtState.BackColor = vbWhite
    
    txtCountry.Value = ""
    txtCountry.BackColor = vbWhite
    
    Application.ScreenUpdating = True
End Function

Private Sub cmdReset_Click()
    Dim i As Integer
    i = MsgBox("Do you want to reset this form?", vbQuestion + vbYesNo + vbDefaultButton2, "Form Reset")
    If i = vbYes Then
        Call Reset
    End If
End Sub

Private Sub cmdEffacer_Click()
    Reset
End Sub

Private Sub cmdEnregistrer_Click()
    Application.ScreenUpdating = False
    Dim iRow As Long
    iRow = Sheets("Data").Range("A1048576").End(xlUp).Row + 1
    If ValidateForm = True Then
        With ThisWorkbook.Sheets("Data")
           .Range("A" & iRow).Value = iRow - 1
           .Range("B" & iRow).Value = txtName.Value
           '.Range("C" & iRow).Value = IIf(OptMr.Value = True, "Mr", "Mme")
           'If .Range("C" & iRow).Value <> "" Then .Range("C" & iRow).Value = "Mle"
           
           ' ******************************************************************************
           ' Solution ci-dessous donné par  @ChTi160
           ' iif imbriqué
            .Range("C" & iRow).Value = IIf(OptMr.Value = True, "Mr", IIf(optMme.Value = True, "Mme", "Mle"))
            ' ******************************************************************************
            
           .Range("D" & iRow).Value = cmbQualification.Text
           .Range("E" & iRow).Value = txtCity.Value
           .Range("F" & iRow).Value = txtState.Value
           .Range("G" & iRow).Value = txtCountry.Value
        End With
        Call Reset
    Else
        Application.ScreenUpdating = True
        Exit Sub
    End If
        Application.ScreenUpdating = True
End Sub
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonsoir le Fil
@ Laurent
j'avais proposé mais sans succés
Un imbriqué de Si en VBA Soit deux IIF

VB:
.Range("C" & iRow).Value = IIf(OptMr.Value = True, "Mr", IIf(optMme.Value = True, "Mme", "Mle"))

Et Lorsque dans ton Code tu mets :

VB:
 .Range("C" & iRow).Value = IIf(OptMr.Value = True, "Mr", "Mme")
  If .Range("C" & iRow).Value <> "" Then .Range("C" & iRow).Value = "Mle"

Dans le fichier fournit par Lionel
Les OptionButton sont alignés de la sorte "Mme" ,"Mle" ,"Mr"

et bien si tu testes en pas à pas
Si tu choisis "Mr" tu auras dans la "Data" "Mle"
Si tu choisis "Mle" tu peux voir dans "Data" que "Mme" est d'abord Collé dans la Cellule Cible et ensuite "Mle"

Mais bon !

Il suffit d'adapté l'alignement des OptionButton en fonction de la macro et ça devrait Fonctionner.

Jean marie
 

Discussions similaires

Statistiques des forums

Discussions
312 218
Messages
2 086 363
Membres
103 197
dernier inscrit
sandrine.lacaussade@orang