Userform Pb Suppression et insertion donnée

Aladin

XLDnaute Occasionnel
Bonsoir le forum
J' ai un souci avec un userform qui me permet d' inserer des donnée sur une feuille.
Mais si je fais une suppression de tous les données sur cette feuille en refaisant une nouvelle saisie, j' ai 2 pb.
Soit la saisie ne se fait pas, soit elle commence à la ligne suivante ou se situait les données éfface.
exemple ancienne donné ligne 1 à 8 - Suppréssion des ces données
Nouvelle saisie elle se place en ligne 10.
Voici un bout de code
Code:
Dim ligne As Long
Dim modification As Long
Dim control As Long
Dim focus As Long
Dim heures As Long

If Me.Controls("dtpicker1").Value = "" Then
MsgBox " Vous devez absolument indiquer une date !!!!", vbCritical + vbOKOnly, ""
Me.Controls("DTPicker1").SetFocus
Exit Sub
 End If
 
 If Me.Controls("combobox7").Value = "" Then
MsgBox " Vous devez absolument indiquer un cycle!!!!", vbCritical + vbOKOnly, ""
Me.Controls("combobox1").SetFocus
Exit Sub
 
 End If
Si quelqu' un une idée et peux me l' expliquer, merci d' avance
Aladin
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : ListView Pb Suppression et insertion donnée

Bonsoir Aladin, et à ceux qui passeront par ici,

Hormis des "Messages", je n'ai rien vu de la structure de ton projet.

Notamment:
- L'initialisation de la ListView.
- Sa relation avec une Feuille.

Mais peut-être il y a-t-il confusion entre la ListView et un autre contrôle?

Un Classeur exemple aiderait bien!!!

Amicalement, et à te lire,

Yann
 

Aladin

XLDnaute Occasionnel
Re :UserForm Pb Suppression et insertion donnée

Bonsoir Yann
Merci pour ta réponse je suis désolé mais le fichier est trop volumineux je t' envoie le code d' initialisation et le code du bouton de validation de la saisie.
Le code d' initialisation est
Code:
Private Sub UserForm_Initialize()
With Me
.StartUpPosition = 3
.Width = Application.Width
.Height = Application.Height
.Left = 0
.Top = 0
End With
DTPicker1.Value = Now
DTPicker3.Value = Now
End Sub

Le code du bouton validation

Code:
Dim ligne As Long
Dim modification As Long
Dim control As Long
Dim focus As Long
Dim heures As Long

If Me.Controls("dtpicker1").Value = "" Then
MsgBox " Vous devez absolument indiquer une date !!!!", vbCritical + vbOKOnly, ""
Me.Controls("DTPicker1").SetFocus
Exit Sub
 End If
 If Me.Controls("combobox7").Value = "" Then
MsgBox " Vous devez absolument indiquer un cycle!!!!", vbCritical + vbOKOnly, ""
Me.Controls("combobox1").SetFocus
Exit Sub
End If
 If Me.Controls("combobox1").Value = "" Then
MsgBox " Vous devez absolument indiquer une presse!!!!", vbCritical + vbOKOnly, ""
Me.Controls("combobox1").SetFocus
Exit Sub
End If
If Me.Controls("textbox1").Value = "" Then
MsgBox " Vous devez absolument indiquer une dim!!!!", vbCritical + vbOKOnly, ""
Me.Controls("textbox1").SetFocus
Exit Sub
End If
If Me.Controls("textbox2").Value = "" Then
MsgBox " Vous devez absolument indiquer une CAI!!!!", vbCritical + vbOKOnly, ""
Me.Controls("textbox2").SetFocus
Exit Sub
End If
If Me.Controls("combobox4").Value = "" Then
MsgBox " Vous devez absolument indiquer un type de membrane!!!!", vbCritical + vbOKOnly, ""
Me.Controls("combobox4").SetFocus
Exit Sub
End If
If Me.Controls("textbox3").Value = "" Then
MsgBox " Vous devez absolument indiquer le NB de cuissons!!!!", vbCritical + vbOKOnly, ""
Me.Controls("textbox3").SetFocus
Exit Sub
End If
If Me.Controls("dtpicker3").Value = "" Then
MsgBox " Vous devez absolument indiquer l'heure du changement!!!!", vbCritical + vbOKOnly, ""
Me.Controls("dtpicker3").SetFocus
Exit Sub
End If
If Me.Controls("combobox5").Value = "" Then
MsgBox " Vous devez absolument indiquer la cause!!!!", vbCritical + vbOKOnly, ""
Me.Controls("combobox5").SetFocus
Exit Sub
End If
If Me.Controls("combobox6").Value = "" Then
MsgBox " Vous devez absolument indiquer un commentaire!!!!", vbCritical + vbOKOnly, ""
Me.Controls("combobox6").SetFocus
Exit Sub
End If

With ThisWorkbook.Sheets("201")
If modification Then
ligne = ActiveCell.Row
Else
ligne = .Range("a65536").End(xlUp).Row + 1
End If

.Cells(ligne, 1) = Format(DTPicker1.Value, "dd/mm/yyyy")
.Cells(ligne, 2) = ComboBox7.Value
.Cells(ligne, 3) = ComboBox1.Value
.Cells(ligne, 4) = TextBox1.Value
.Cells(ligne, 5) = TextBox2.Value
.Cells(ligne, 6) = ComboBox4.Value
.Cells(ligne, 7) = TextBox3.Value
.Cells(ligne, 8) = Format(DTPicker3.Value, "hh:mm:ss")
.Cells(ligne, 9) = ComboBox5.Value
.Cells(ligne, 10) = ComboBox6.Text

End With
End Sub

Au cas ou cela ne sufiira pas, j' essayerai de te faire un classeur épuré
Aladin
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : ListView Pb Suppression et insertion donnée

Bonsoir Aladin, et à ceux qui passeront par là,

Je ne vois toujours pas trace de la ListView!!!

"dtpicker" C'est quoi?

J'ai peu de chose à dire, si ce n'est qu'il est préférable d'avoir ta Feuille "201" au format voulu,
plutôt que de tenter des "dd/mm/yyyy".

Tu souhaites que tous les TextBoxes soient renseignée, n'est-ce pas?
Alors au lieu de t'embêter à écrire pour chaque:

Code:
 If Me.Controls("combobox…").Value = "" Then

Tu crées un bouton de validation qui fait une boucle sur l'ensemble de ceux-ci.
Si l'un est vide: tu annihiles son action d'écrire dans ta feuille, et tu la remplaces par un message du genre: "Il y a une ou des données manquantes"

Le mieux serait de les mettre dans un groupe via un Module de Classe,
et de ne faire apparaître le dit "Bouton" que lorsque la saisie est complète.

Une astuce à entrevoir:
Ton TextBox1 correspond à la colonne 4
Ton ComboBox5 correspond à la colonne 9

J'aurais mis respectivement TextBox4 et ComboBox9:
Cela aurait simplifié la macro en récupérant leur dernier caractère.
(Particulièrement dans le cadre de groupes, mais pour l'instant c'est encore accessoire)

Tu proposes un Classeur épuré... Tu as raison. Mais n'oublies surtout pas la ListView.

Amicalement,

Yann
 
Dernière édition:

fhoest

XLDnaute Accro
Re : ListView Pb Suppression et insertion donnée

Bonsoir,Yann56,Aladin.
je suis comme yann56,je ne trouve rien sur la listview,
par contre je me demande si il est nécéssaire de mettre l'instruction exit sub derrière setfocus car automatiquement tu sort du sub vu que tu donne le focus a un autre controle.
Au plaisir.
 

Aladin

XLDnaute Occasionnel
Re : UserForm Pb Suppression et insertion donnée

Bonjour Yann, fhoest et le forum
Ci joint un fichier epuré qui permettra de mieux voir mon pb et si possible d' apporter qq corrections à l' opttimisation de mon code que je sais n' est pas parfait.
Comme je l' avais expliqué, en faisant un raz des données sur la feuille, lors d' une nouvelle saisie la première ligne ne se place plus en A2
Aladin
 

Pièces jointes

  • testAladin-14.zip
    215.4 KB · Affichages: 49
  • testAladin-14.zip
    215.4 KB · Affichages: 50
  • testAladin-14.zip
    215.4 KB · Affichages: 48
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : ListView Pb Suppression et insertion donnée

Bonjour Aladin, fhoest, et à ceux qui passeront par ici,

Je suis intervenu en voyant le mot "ListView".... Comme c'est un peu mon dada....

Mais là je dois avouer que je n'y comprends pas grand chose... C'est pas mon truc! :confused:

Je te laisse entre les mains expertes de fhoest, et qui sait, autres intervenants.

Amicalement, avec mes souhaits de bonne réussite dans ton projet,

Yann
 

Bebere

XLDnaute Barbatruc
Re : UserForm Pb Suppression et insertion donnée

bonjour Aladin,Yann,Fhoest
changer le code,mis un datepicker,etc
une question: pourquoi le contrôle microsoft date and time picker ne fonctionne pas(excel2003)
à bientôt
 

Pièces jointes

  • testAladin-14.zip
    218.7 KB · Affichages: 54
  • testAladin-14.zip
    218.7 KB · Affichages: 60
  • testAladin-14.zip
    218.7 KB · Affichages: 58

fhoest

XLDnaute Accro
Re : Userform Pb Suppression et insertion donnée

Bonjour a vous tous
en ce qui concerne le code ci dessous j'opterai pour une solution plus simple en message d'erreur pour les champs vide,
moins de ligne de code et pas de prise de tête; a voir/

Code:
Private Sub CommandButton2_Click()
    Dim ligne As Long
    Dim modification As Long
    Dim control As Long
    Dim focus As Long
    Dim heures As Long
    Dim c As control
For Each c In Me.Controls
If Left(c.Name, 7) = "TextBox" Or Left(c.Name, 8) = "Combobox" Then
If c.Value = "" Then MsgBox ("veuillez remplir tous les champs"), vbInformation: c.SetFocus: Exit Sub
End If
Next
   
    'ajout ou modification d'une ligne d'enregistrement
    With ThisWorkbook.Sheets("201")
'        If modification Then
'
'            ligne = ActiveCell.Row
'        Else
'
            'déterminer la première ligne libre du tableau
            ligne = .Range("A65536").End(xlUp).Row + 1
'        End If
        'maj de la ligne d'enregistrement


        .Cells(ligne, 1) = CDate(Me.TextBox4)
        .Cells(ligne, 1).NumberFormat = "dd/mm/yyyy"

        .Cells(ligne, 2) = ComboBox7.Value
        .Cells(ligne, 3) = ComboBox1.Value


        .Cells(ligne, 4) = TextBox1.Value
        .Cells(ligne, 5) = TextBox2.Value

        .Cells(ligne, 6) = ComboBox4.Value
        .Cells(ligne, 7) = TextBox3.Value
        .Cells(ligne, 8) = CDate(Me.TextBox5)
        .Cells(ligne, 8).NumberFormat = "hh:mm:ss"
        .Cells(ligne, 9) = ComboBox5.Value
        .Cells(ligne, 10) = ComboBox6.Text

    End With

    'ComboBox7.Value = ""
    'ComboBox1.Value = ""
    'TextBox1.Value = ""
    'TextBox2.Value = ""
    'ComboBox4.Value = ""
    'TextBox3.Value = ""
    'ComboBox5.Value = ""
    'ComboBox6.Value = ""
    'ComboBox7.SetFocus
End Sub

A+
je te propose de mettre à la place des labels ,des frames qui encadrent tes controls avec le .caption qui donne le titre cela fait beaucoup plus jolie sur un userform
 
Dernière édition:

Aladin

XLDnaute Occasionnel
Re : Userform Pb Suppression et insertion donnée

Bonjour fhoest et le forum
Merci pour l' optimisation du code, je l' ai l' ai mis en place et c' est OK. Mais j' ai un souci pour la valisdation. si un controle est vide, l' enregistrement se fait quand meme, j' aurais voulu que si un enregistrement manque qu' il n' y ai pas de validation
Aladin
 
Dernière édition:

fhoest

XLDnaute Accro
Re : Userform Pb Suppression et insertion donnée

Bonsoir,
je pense que ce que tu as besoins et ceci, test et donne des nouvelles,
Code:
Private Sub CommandButton2_Click()
    Dim ligne As Long
    Dim modification As Long
    Dim control As Long
    Dim focus As Long
    Dim heures As Long
    Dim c As control
For Each c In Me.Controls
If Left(c.Name, 7) = "TextBox" Or Left(c.Name, 8) = "Combobox" Then
If c.Value = "" Then 
MsgBox ("veuillez remplir tous les champs"), vbInformation
 c.SetFocus
 Exit Sub
else:
   
    'ajout ou modification d'une ligne d'enregistrement
    With ThisWorkbook.Sheets("201")
'        If modification Then
'
'            ligne = ActiveCell.Row
'        Else
'
            'déterminer la première ligne libre du tableau
            ligne = .Range("A65536").End(xlUp).Row + 1
'        End If
        'maj de la ligne d'enregistrement


        .Cells(ligne, 1) = CDate(Me.TextBox4)
        .Cells(ligne, 1).NumberFormat = "dd/mm/yyyy"

        .Cells(ligne, 2) = ComboBox7.Value
        .Cells(ligne, 3) = ComboBox1.Value


        .Cells(ligne, 4) = TextBox1.Value
        .Cells(ligne, 5) = TextBox2.Value

        .Cells(ligne, 6) = ComboBox4.Value
        .Cells(ligne, 7) = TextBox3.Value
        .Cells(ligne, 8) = CDate(Me.TextBox5)
        .Cells(ligne, 8).NumberFormat = "hh:mm:ss"
        .Cells(ligne, 9) = ComboBox5.Value
        .Cells(ligne, 10) = ComboBox6.Text

    End With
End If
Next c
   
End Sub
A+ (pas tester)
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
814