écriture automatique bloquer par message...

Résolu
shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014
- 16 déc. 2013 à 15:59
shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014
- 2 janv. 2014 à 15:04
Bonjour,

mon code est le suivant:
Private Sub OK_REGULATOR_DATA_Click()

'i est la variante qui corespond à la ligne, les numéros de colonnes sont fixes
i = 2

'ecrit les données dans la prochaine ligne vide
While Feuil2.Cells(i, 1).Value <> ""
i = i + 1
Wend

If REGULATOR_DATA.TextBox1.Value = "" Then 'Customer Name
message
Else
If REGULATOR_DATA.TextBox2.Value = "" Then 'Project Name
message
Else
If REGULATOR_DATA.TextBox3.Value = "" Then 'P/N Project
message
Else
If REGULATOR_DATA.TextBox4.Value = "" Then 'S/N Project
message
Else
If REGULATOR_DATA.ComboBox9.Value = "" Then 'Product Name
message
Else
If REGULATOR_DATA.TextBox8.Value = "" Then 'P/N Product
message
Else
If REGULATOR_DATA.TextBox5.Value = "" Then 'S/N Product
message
Else
If REGULATOR_DATA.ComboBox6.Value = "" Then 'Bestcom Version
message
Else
If REGULATOR_DATA.ComboBox7.Value = "" Then 'Firmware Version
message
Else
If REGULATOR_DATA.ComboBox8.Value = "" Then 'Performed By
message
Else

End If
End If
End If
End If
End If
End If
End If
End If
End If
End If

Feuil2.Cells(i, 1).Value = REGULATOR_DATA.TextBox1.Value 'Customer Name
Feuil2.Cells(i, 2).Value = REGULATOR_DATA.TextBox2.Value 'Project Name
Feuil2.Cells(i, 3).Value = REGULATOR_DATA.TextBox3.Value 'P/N Project
Feuil2.Cells(i, 4).Value = REGULATOR_DATA.TextBox4.Value 'S/N Project
Feuil2.Cells(i, 5).Value = REGULATOR_DATA.ComboBox9.Value 'Product Name
Feuil2.Cells(i, 6).Value = REGULATOR_DATA.TextBox8.Value 'P/N Product
Feuil2.Cells(i, 7).Value = REGULATOR_DATA.TextBox5.Value 'S/N Product
Feuil2.Cells(i, 8).Value = REGULATOR_DATA.ComboBox6.Value 'Bestcom Version
Feuil2.Cells(i, 9).Value = REGULATOR_DATA.ComboBox7.Value 'Firmware Version
Feuil2.Cells(i, 10).Value = REGULATOR_DATA.ComboBox8.Value 'Performed By
Feuil2.Cells(i, 11).FormulaR1C1 = DateValue(Date) 'Date

Unload Me

End Sub

lorsque toutes les informations sont renseigné, la ligne se complète automatiquement et correctement.
lorsqu'une information est manquante, le message d'erreur s'affiche bien MAIS il écrit les valeurs dans la ligne. comment faire pour qu'un message apparaît lorsque toutes les conditions ne sont remplie et bloquer la fonction d'écriture de la ligne?

9 réponses

ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 16/12/2013 à 17:55
Bonjour,
Le Unload me donne à penser que tu es sur un userfor.

Ton code devrait alors être tout simplement ceci :

Private Sub OK_REGULATOR_DATA_Click()
Dim i As long, derlig As Long, k as integer
derlig = Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To 9
If Me.Controls("TextBox" & i).Text = "" Then
messsage i
Exit Sub
End If
Next
For i = 2 To derlig
toto = Array(TextBox1, TextBox2, TextBox3, TextBox4, ComboBox9, TextBox8, TextBox5, ComboBox6, ComboBox7, ComboBox8)
For k = 1 To 10
Worksheets("Feuil2").Cells(i, k).Value = toto(k).Value
Next
Worksheets("Feuil2").Cells(i, 11).FormulaR1C1 = DateValue(Date)
Unload Me
Next
End Sub

Private Sub messsage(i As Integer)
MsgBox "veuillez saisir une valeur dans la textbox Textbox" & i
End Sub


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
1
jordane45
Messages postés
35797
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 juillet 2022
358
17 déc. 2013 à 10:29
Bonjour,

Je pense que K doit commencer à 0 par à 1

 For k = 0 To 9
0
jordane45
Messages postés
35797
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 juillet 2022
358
16 déc. 2013 à 16:17
Bonjour,

Déjà, pense à utiliser la coloration syntaxique lorsque tu poste du code ici... ( voir ICI si tu ne sais pas le faire)

Ensuite, sans reprendre tout ton code (je ne suis pas fan des IF imbriqués..)... je pense que ceci devrait faire l'affaire :

  
Private Sub OK_REGULATOR_DATA_Click()
Dim nbErr As Integer
    nbErr = 0

' Si aucune condition remplie => 10 erreurs..
' Pas d'écriture..
Dim NbErrMax As Integer
NbErrMax = 10

'prochaine ligne vide
i = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1


If REGULATOR_DATA.TextBox1.Value = "" Then 'Customer Name
    Message
    nbErr = nbErr + 1
Else
    If REGULATOR_DATA.TextBox2.Value = "" Then 'Project Name
        Message
        nbErr = nbErr + 1
    Else
        If REGULATOR_DATA.TextBox3.Value = "" Then 'P/N Project
            Message
            nbErr = nbErr + 1
        Else
            If REGULATOR_DATA.TextBox4.Value = "" Then 'S/N Project
             Message
             nbErr = nbErr + 1
            Else
                If REGULATOR_DATA.ComboBox9.Value = "" Then 'Product Name
                 Message
                 nbErr = nbErr + 1
                 Else
                     If REGULATOR_DATA.TextBox8.Value = "" Then 'P/N Product
                         Message
                         nbErr = nbErr + 1
                    Else
                        If REGULATOR_DATA.TextBox5.Value = "" Then 'S/N Product
                            Message
                            nbErr = nbErr + 1
                        Else
                            If REGULATOR_DATA.ComboBox6.Value = "" Then 'Bestcom Version
                                Message
                                nbErr = nbErr + 1
                            Else
                                If REGULATOR_DATA.ComboBox7.Value = "" Then 'Firmware Version
                                    Message
                                    nbErr = nbErr + 1
                                Else
                                    If REGULATOR_DATA.ComboBox8.Value = "" Then 'Performed By
                                        Message
                                        nbErr = nbErr + 1
                                    Else

                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If
End If

If nbErr < 10 Then
    Feuil2.Cells(i, 1).Value = REGULATOR_DATA.TextBox1.Value 'Customer Name
    Feuil2.Cells(i, 2).Value = REGULATOR_DATA.TextBox2.Value 'Project Name
    Feuil2.Cells(i, 3).Value = REGULATOR_DATA.TextBox3.Value 'P/N Project
    Feuil2.Cells(i, 4).Value = REGULATOR_DATA.TextBox4.Value 'S/N Project
    Feuil2.Cells(i, 5).Value = REGULATOR_DATA.ComboBox9.Value 'Product Name
    Feuil2.Cells(i, 6).Value = REGULATOR_DATA.TextBox8.Value 'P/N Product
    Feuil2.Cells(i, 7).Value = REGULATOR_DATA.TextBox5.Value 'S/N Product
    Feuil2.Cells(i, 8).Value = REGULATOR_DATA.ComboBox6.Value 'Bestcom Version
    Feuil2.Cells(i, 9).Value = REGULATOR_DATA.ComboBox7.Value 'Firmware Version
    Feuil2.Cells(i, 10).Value = REGULATOR_DATA.ComboBox8.Value 'Performed By
    Feuil2.Cells(i, 11).FormulaR1C1 = DateValue(Date) 'Date
End If
Unload Me

End Sub




0
shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

17 déc. 2013 à 09:43
Bonjour,

effectivement je suis dans un userform.
je pense que je doit vous donner plus d'informations.
mon userform permet de faire 1 choix sur 5. donc un userform pour faire son choix et 5 autres userforms pour y travailler.
chacun des userform est affecté a une feuille du classeur.

merci pour la formule ucfoutu, mais la logique est bloqué à "k as integer"

je suis toujours bloqué...
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 déc. 2013 à 10:09
Comment cela, "elle est bloquée à k as integer" ?
Avec quel message d'erreur ?
0
shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

17 déc. 2013 à 14:25
le message d'erreur est:
erreur de compilation:
type défini par l'utilisateur non défini
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 déc. 2013 à 10:30
Vu.
L'erreur n'est pas où tu dis qu'elle est, mais ailleurs !
Remplace cette ligne :
 toto = Array(TextBox1, TextBox2, TextBox3, TextBox4, ComboBox9, TextBox8, TextBox5, ComboBox6, ComboBox7, ComboBox8)
par :
 toto = Array("", TextBox1, TextBox2, TextBox3, TextBox4, ComboBox9, TextBox8, TextBox5, ComboBox6, ComboBox7, ComboBox8)
--
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
jordane45
Messages postés
35797
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 juillet 2022
358
17 déc. 2013 à 10:33
Salut Ucfoutu.
Bien que cela "corrige" le souci de TOTO et te permette d'utiliser K à partir de 1, je n'en vois pas l'interet. Pourquoi ne pas faire commencer K à 0 ? (après tout, dans quasiment tous les langages de dev, les indices des array commencent toujours à 0... autant s'y habituer non ? )
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 déc. 2013 à 11:12
Bonjour, jordane45,
Pour éviter tout simplement d'"avoir à faire un calcul à chaque tour de la boucle k, car si on commence à 0, il faudrait alors écrire :
Worksheets("Feuil2").Cells(i, k+1).Value = toto(k).Value
et même si seules 10 opérations seront faites, je les évite (suis très avare).
0
shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

17 déc. 2013 à 14:27
j'ai le même message d'erreur.

erreur de compilation:
type défini par l'utilisateur non défini
0
jordane45
Messages postés
35797
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 juillet 2022
358
17 déc. 2013 à 11:15
Par contre Ucfoutu,
l'utilisateur, d'après ce que j'ai compris, souhaitait n'empecher l'écriture QUE si toutes les conditions n'étaient pas remplies..

comment faire pour qu'un message apparaît lorsque toutes les conditions ne sont remplie et bloquer la fonction d'écriture de la ligne?

hors ton code, sort de la macro DES qu'UNE des condition est vide.
A moins que le comportement voulu soit bien celui que tu lui propose (mauvaise rédaction de la part du demandeur)...

0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
17 déc. 2013 à 11:29
C'est bien ce qu'il veut : ne pas permettre la suite si toutes les textboxes ne sont pas remplies (donc si une seule ou plusieurs font défaut). C'est ce que j'ai compris. Il veut forcer la saisie de la totalité des textboxes
Pour tout te dire, j'aurais même volontiers (mais je pense que çà, il sait le faire tout seul), modifié la procédure message en ajoutant une instruction pour se rendre directement sur la textbox défaillante.
0
shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

17 déc. 2013 à 14:29
pour bien me faire comprendre:

du moment que toutes les informations des textbox et combobox ne sont rempli, alors l'écriture est bloqué.
si toutes les conditions sont remplie alors les informations seront écrites dans al première ligne vide.
0
jordane45
Messages postés
35797
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 juillet 2022
358
17 déc. 2013 à 15:05
La question était plutot : Est-ce que s'il ne te manque qu'une ou deux infos.. tu écris la ligne quand même ou pas ?
0
shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

30 déc. 2013 à 08:50
Jordan45,

la ligne ne doit pas être écrite.


-- je m'excuse du temps de réponse donné --
0
jordane45
Messages postés
35797
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 juillet 2022
358
30 déc. 2013 à 09:48
Bonjour,
la ligne ne doit pas être écrite.
Donc la réponse d'Ucfoutu doit totalement répondre à ton besoin.

Merci de passer la discussion en RESOLU si c'est bien le cas.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 30/12/2013 à 15:09
message est une procédure et non
une fonction ... ===>>
message i
et non
message (i)
PS : tu n'as même pas su, alors, copier/coller mon code ? (je n'y ai pas mis i entre parenthèses) ...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

30 déc. 2013 à 15:33
tu avais mis message(i as integer), sauf que ce dernier ne fonctionnais pas.
effectivement sans les parenthèse ça fonctionne mieux mais en mode débogage il me surligne toto. pourquoi?

Private Sub OK_REGULATOR_DATA_Click()

Dim i As Long, derlig As Long, k As Integer
derlig = Range("A" & Rows.Count).End(xlUp).Row
For i = 1 To 9
If Me.Controls("TextBox" & i).Text = "" Then
messsage i
Exit Sub
End If
Next
For i = 2 To derlig
Worksheets("Feuil2").Cells(i, k + 1).Value = toto(k).Value
For k = 1 To 10
Worksheets("Feuil2").Cells(i, k).Value = toto(k).Value
Next
Worksheets("Feuil2").Cells(i, 11).FormulaR1C1 = DateValue(Date)
Unload Me
Next
End Sub

Private Sub messsage(i)
MsgBox "veuillez saisir une valeur dans la textbox Textbox" & i
End Sub
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 30/12/2013 à 15:45
Rooo ...
1)
tu aurais pu corriger (visible) :
Dim i As Integer, derlig As Long, k As Integer
2) c'est bien :
Private Sub messsage(i As Integer)
3) où est passée ma ligne disant :
toto = Array(TextBox1, TextBox2, TextBox3, TextBox4, ComboBox9, TextBox8, TextBox5, ComboBox6, ComboBox7, ComboBox8)
??
Tu l'as "jetée" ? Comme çà ?
Tu n'es manifestement pas un développeur.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Modifié par ucfoutu le 30/12/2013 à 18:03
Il est bien entendu que 'mais cela va tellement de soi..) si ta feuille contient plus de 32 767 lignes, derlig sera alors un long et que, dans ce cas ===>>>
Dim i As long, derlig As Long, k As Integer
et
Private Sub messsage(i As long)
0
shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

30 déc. 2013 à 18:06
non, je ne suis pas un développeur. tout simplement un amateur qui apprend sur le tas en développant des programme sous excel selon mes besoin (besoin de l'entreprise).
de plus j'apprend pour ma propre "science".
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
30 déc. 2013 à 18:37
Bon...
La "science" (tu veux dire "connaissances"...) s'acquiert en raison d'une volonté personnelle. Celle de devenir un développeur.
Commence alors par au moins les bases les plus rudimentaires
- ce qu'est une variable, comment on la déclare, comment on la type
- ce qu'est une procédure sous-routine (sub) et comment on l'appelle en exécution
- ce qu'est une procédure fonction (function) et comment on l'appelle en exécution
et au passage s'intéresser aux vocations distinctes de ces deux procédures.
Au moins ces bases, s'il te plait.
0
shadowskill067
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

2 janv. 2014 à 15:04
bonjour à tous,

petite information supplémentaire seulement pour les intéressés.

pour l'instant ma base de donné est légère et assez simple. je vais donc rester si cette logique qui fonctionne bien...

Private Sub OK_REGULATOR_DATA_Click()

'i est la variante qui corespond à la ligne, les numéros de colonnes sont fixes
i = 2

'ecrit les données dans la prochaine ligne vide
While Feuil2.Cells(i, 1).Value <> ""
i = i + 1
Wend

If REGULATOR_DATA.TextBox1.Value = "" Then 'Customer Name
Feuil2.Cells(i, 1).Value = ""
Feuil2.Cells(i, 11).Value = ""
message
Else
If REGULATOR_DATA.TextBox2.Value = "" Then 'Project Name
Feuil2.Cells(i, 2).Value = ""
Feuil2.Cells(i, 11).Value = ""
message
Else
If REGULATOR_DATA.TextBox3.Value = "" Then 'P/N Project
Feuil2.Cells(i, 3).Value = ""
Feuil2.Cells(i, 11).Value = ""
message
Else
If REGULATOR_DATA.TextBox4.Value = "" Then 'S/N Project
Feuil2.Cells(i, 4).Value = ""
Feuil2.Cells(i, 11).Value = ""
message
Else
If REGULATOR_DATA.ComboBox9.Value = "" Then 'Product Name
Feuil2.Cells(i, 5).Value = ""
Feuil2.Cells(i, 11).Value = ""
message
Else
If REGULATOR_DATA.TextBox8.Value = "" Then 'P/N Product
Feuil2.Cells(i, 6).Value = ""
Feuil2.Cells(i, 11).Value = ""
message
Else
If REGULATOR_DATA.TextBox5.Value = "" Then 'S/N Product
Feuil2.Cells(i, 7).Value = ""
Feuil2.Cells(i, 11).Value = ""
message
Else
If REGULATOR_DATA.ComboBox6.Value = "" Then 'Bestcom Version
Feuil2.Cells(i, 8).Value = ""
Feuil2.Cells(i, 11).Value = ""
message
Else
If REGULATOR_DATA.ComboBox7.Value = "" Then 'Firmware Version
Feuil2.Cells(i, 9).Value = ""
Feuil2.Cells(i, 11).Value = ""
message
Else
If REGULATOR_DATA.ComboBox8.Value = "" Then 'Performed By
Feuil2.Cells(i, 10).Value = ""
Feuil2.Cells(i, 11).Value = ""
message
Else

ActiveSheet.Unprotect
Feuil2.Cells(i, 1).Value = REGULATOR_DATA.TextBox1.Value 'Customer Name
Feuil2.Cells(i, 2).Value = REGULATOR_DATA.TextBox2.Value 'Project Name
Feuil2.Cells(i, 3).Value = REGULATOR_DATA.TextBox3.Value 'P/N Project
Feuil2.Cells(i, 4).Value = REGULATOR_DATA.TextBox4.Value 'S/N Project
Feuil2.Cells(i, 5).Value = REGULATOR_DATA.ComboBox9.Value 'Product Name
Feuil2.Cells(i, 6).Value = REGULATOR_DATA.TextBox8.Value 'P/N Product
Feuil2.Cells(i, 7).Value = REGULATOR_DATA.TextBox5.Value 'S/N Product
Feuil2.Cells(i, 8).Value = REGULATOR_DATA.ComboBox6.Value 'Bestcom Version
Feuil2.Cells(i, 9).Value = REGULATOR_DATA.ComboBox7.Value 'Firmware Version
Feuil2.Cells(i, 10).Value = REGULATOR_DATA.ComboBox8.Value 'Performed By
Feuil2.Cells(i, 11).FormulaR1C1 = DateValue(Date) 'Date
Unload Me
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End If
End If
End If
End If
End If
End If
End If
End If
End If
End If

End Sub
0