écriture automatique bloquer par message... [Résolu]

Signaler
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014
-
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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
Messages postés
33009
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 juin 2021
351
Bonjour,

Je pense que K doit commencer à 0 par à 1

 For k = 0 To 9
Messages postés
33009
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 juin 2021
351
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




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

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é...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
Comment cela, "elle est bloquée à k as integer" ?
Avec quel message d'erreur ?
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

le message d'erreur est:
erreur de compilation:
type défini par l'utilisateur non défini
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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
Messages postés
33009
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 juin 2021
351
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 ? )
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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).
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

j'ai le même message d'erreur.

erreur de compilation:
type défini par l'utilisateur non défini
Messages postés
33009
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 juin 2021
351
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)...

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

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.
Messages postés
33009
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 juin 2021
351
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 ?
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

Jordan45,

la ligne ne doit pas être écrite.


-- je m'excuse du temps de réponse donné --
Messages postés
33009
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 juin 2021
351
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.
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

message d'erreur : fonction sub non définie

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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)
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

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".
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
237
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.
Messages postés
28
Date d'inscription
mercredi 21 novembre 2012
Statut
Membre
Dernière intervention
13 janvier 2014

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