XL 2016 [Résolu] Validation Formulaire = Ecriture sur ligne correspondante

roby

XLDnaute Occasionnel
Bonjour le Forum

Je ne trouve pas de solution satisfaisante pour écrire les informations d'un formulaire "Ajouter ..." sur la ligne correspondante.
En effet, la boite de dialogue est appelée sous deux formes :
- bouton sur la feuille "Accueil" = formulaire vide ou
- en un click sur les colonnes B et C de la feuille correspondante "1 01" ( feuille activée suivant la date du jour - ici j'ai choisie janvier car le premier mois de l'année et elle servira comme modèle pour les autres mois de l'année et le premier 1 correspond à l'agent n°1 car il peut y en avoir maxi 6 ).

deux problèmes :
1 ) dû fait que la boite de dialogue peut être ouverte sur un clic colonne B ou C lorsque je veux écrire sur ses deux colonnes, il pense que je veux ouvrir de nouveau la boite de dialogue.
j'ai mis en place une variable public FO qui lorsqu'elle a la valeur 1 schinte le click qui appelle la boite de dialogue mais cela ne fonctionne pas.
2 ) je ne trouve pas également comment masquer le bouton "Ajouter ..." lorsque l'on click sur une ligne non vide donc une modification et inversement masque le bouton "Modifier ..." lorsque la ligne vide est sélectionnée pour écrire en fait une nouvelle ligne.

dans l'attente d'une petite piste
je vous souhaite une bonne journée

Roby
 

Pièces jointes

  • Roby.zip
    160.1 KB · Affichages: 10

fanch55

XLDnaute Barbatruc
Bonjour,
Je vous indique ce que j'ai modifié :
(Rassurez-vous, le code complet est joint)
VB:
Private Sub OptionButton4_Click()
    If Me.CheckBox1 = True Then
        Me.Frame3.Enabled = False
        Me.Label6.Enabled = False
        Me.Label7.Enabled = False
        Me.Label10.Enabled = False
        Me.ComboBox2.BackColor = &HE0E0E0 '&H80000005&
        Me.TextBox5.BackColor = &HE0E0E0 '&H80000005&
        Me.TextBox6.BackColor = &HE0E0E0 '&H80000005&
        Me.OptionButton3 = False
        Me.OptionButton4 = False
        If Me.TextBox7 = "" Then Me.TextBox7 = Date
        If Me.TextBox8 = "" Then Me.TextBox8 = Date
        Me.CommandButton1.SetFocus
    Else
        If Me.OptionButton4 = True Then
            Me.Frame3.Enabled = False
            Me.Label6.Enabled = False
            Me.Label7.Enabled = False
            Me.Label10.Enabled = False
            Me.ComboBox2.BackColor = &HE0E0E0 '&H80000005&
            Me.TextBox5.BackColor = &HE0E0E0 '&H80000005&
            Me.TextBox6.BackColor = &HE0E0E0 '&H80000005&
'            If Me.TextBox7 = "" Then Me.TextBox7 = Date
            If Me.TextBox8 = "" Then Me.TextBox8 = Date
            If Me.CommandButton1.Visible Then Me.CommandButton1.SetFocus
        Else
            Me.Frame3.Enabled = True
            Me.Label6.Enabled = True
            Me.Label7.Enabled = True
            Me.Label10.Enabled = True
            Me.ComboBox2.BackColor = &H80000005
            Me.TextBox5.BackColor = &H80000005
            Me.TextBox6.BackColor = &H80000005
 '           Me.TextBox7 = ""
            Me.TextBox8 = ""
           Me.ComboBox2.SetFocus
       End If
    End If
End Sub
VB:
Private Sub CommandButton3_Click()
    Unload Me
End Sub
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("B5:C300")) Is Nothing Then
        If Cells(Target.Row, 2) <> vbNullString Then
            Call RecupData
        Else
            Call Formulaire
        End If
    End If
End Sub
VB:
Sub Formulaire()
    VerifU
    Sheets(Range("VF").Value).Select
    Display_Userform
    
End Sub
Sub Display_Userform()
    
    If Range("Accueil!T1") = 1 Then If Not Agent1.Visible Then Agent1.Show
    If Range("Accueil!T1") = 2 Then Agent2.Show
    If Range("Accueil!T1") = 3 Then Agent3.Show
    If Range("Accueil!T1") = 4 Then Agent4.Show
    If Range("Accueil!T1") = 5 Then Agent5.Show
    If Range("Accueil!T1") = 6 Then Agent6.Show

End Sub

Sub RecupData()
    Call RazFormulaire
    If Range("Accueil!T1") = 1 Then
        Agent1.CommandButton1.Visible = False
        If ActiveCell.Offset(0, 0).Value <> "" Then Agent1.ComboBox1 = ActiveCell.Offset(0, 0).Value
        If ActiveCell.Offset(0, 1).Value <> "" Then Agent1.TextBox2 = ActiveCell.Offset(0, 1).Value
        If ActiveCell.Offset(0, 2).Value <> "" Then Agent1.TextBox3 = ActiveCell.Offset(0, 2).Value
        If ActiveCell.Offset(0, 3).Value = "C" Then Agent1.OptionButton1 = True
        If ActiveCell.Offset(0, 3).Value = "M" Then Agent1.OptionButton2 = True
        If ActiveCell.Offset(0, 4).Value <> "" Then Agent1.TextBox4 = ActiveCell.Offset(0, 4).Value
        If ActiveCell.Offset(0, 5).Value <> "" Then Agent1.ComboBox2 = ActiveCell.Offset(0, 5).Value
        If ActiveCell.Offset(0, 6).Value <> "" Then Agent1.TextBox5 = ActiveCell.Offset(0, 6).Value
        If ActiveCell.Offset(0, 7).Value = "Oui" Then Agent1.CheckBox1 = True
        If ActiveCell.Offset(0, 8).Value = "Alarme injustifée" Then Agent1.OptionButton3 = True
        If ActiveCell.Offset(0, 8).Value = "Alarme technique" Then Agent1.OptionButton4 = True
        
        If ActiveCell.Offset(0, 8).Value = "Alarme injustifée" Then Agent1.OptionButton3 = True
        If ActiveCell.Offset(0, 8).Value = "Alarme technique" Then Agent1.OptionButton4 = True
        
        If ActiveCell.Offset(0, 9).Value <> "" Then Agent1.TextBox6 = ActiveCell.Offset(0, 9).Value
        If ActiveCell.Offset(0, 10).Value <> "" Then Agent1.TextBox7 = ActiveCell.Offset(0, 10).Value
        If ActiveCell.Offset(0, 11).Value <> "" Then Agent1.TextBox8 = ActiveCell.Offset(0, 11).Value
   End If
    Display_Userform

End Sub
 

Pièces jointes

  • Roby.xlsm
    164.4 KB · Affichages: 8

roby

XLDnaute Occasionnel
Bonjour le Forum, fanch55

Merci pour cette réponse rapide.

je ne connaissais pas ce "display", peux-tu me dire à quoi cela correspondant dans mon exemple ?
qu'elle est l'instruction qui "hinibe" le click de la feuille "1 01"

bonne journée à tous
Roby
 

fanch55

XLDnaute Barbatruc
je ne connaissais pas ce "display", peux-tu me dire à quoi cela correspondant dans mon exemple ?
Dans ton code initial, tu avais :
VB:
Sub Formulaire()
    VerifU
    Sheets(Range("VF").Value).Select
'    Range("B1").Select
'    DerLigne
    If Range("Accueil!T1") = 1 Then Agent1.Show
    If Range("Accueil!T1") = 2 Then Agent2.Show
    If Range("Accueil!T1") = 3 Then Agent3.Show
    If Range("Accueil!T1") = 4 Then Agent4.Show
    If Range("Accueil!T1") = 5 Then Agent5.Show
    If Range("Accueil!T1") = 6 Then Agent6.Show
End Sub
Comme le show doit être fait par la Sub Formulaire et la sub RecupData,
j'ai préféré faire une sub commune aux deux :
Code:
Sub Display_Userform()
    
    If Range("Accueil!T1") = 1 Then If Not Agent1.Visible Then Agent1.Show
    If Range("Accueil!T1") = 2 Then Agent2.Show
    If Range("Accueil!T1") = 3 Then Agent3.Show
    If Range("Accueil!T1") = 4 Then Agent4.Show
    If Range("Accueil!T1") = 5 Then Agent5.Show
    If Range("Accueil!T1") = 6 Then Agent6.Show

End Sub
l'instruction If Not Agent1.Visible Then Agent1.Show empêchera l'erreur ci-dessous :
1630584368676.png
 

roby

XLDnaute Occasionnel
Bonjour le Forum, fanch55

Ce que je voulais dire :
c'est que du fait que les cellules colonnes B et C activent l'ouverture du formulaire, le fait de vouloir écrire dans ses cellules Excel comprend comme si on faisait un click et donc ouvre le formulaire une nouvelle fois.

Ta solution résout donc ce problème.

merci encore
Roby
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 316
Membres
102 860
dernier inscrit
fredo67