[AIDE] TextBox condition si vide [Résolu]

NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - 9 mai 2015 à 14:51 - Dernière réponse : vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention
- 12 mai 2015 à 00:49
Bonjour,

Le Code suivant renseigne la saisie de 8 TextBox (TB_L1 a TB_L8) deux ComboBox (CB_R3 et CB_STAT) à des emplacements défini d'une chaine stocké dans un fichier texte.

Private Sub Command1_Click()
Open "C:\MonFichier.txt" For Output As #1
Dim chaine As String
chaine = "!R!"
chaine = chaine & " FRPO L1," & TB_L1.Text
chaine = chaine & "; FRPO L2," & TB_L2.Text
chaine = chaine & "; FRPO L3," & TB_L3.Text
chaine = chaine & "; FRPO L4," & TB_L4.Text
chaine = chaine & "; FRPO L5," & TB_L5.Text
chaine = chaine & "; FRPO L6," & TB_L6.Text
chaine = chaine & "; FRPO L7," & TB_L7.Text
chaine = chaine & "; FRPO L8," & TB_L8.Text
chaine = chaine & "; FRPO R3," & CB_R3.ItemData(CB_R3.ListIndex)
chaine = chaine & "; STAT" & CB_STAT.ItemData(CB_STAT.ListIndex) & "; EXIT;"
Print #1, chaine
Close #1
End Sub


Le but est d'exclure de la chaine la ou les valeurs qui ne sont pas saisies.
A savoir que les TextBox doivent êtres « liés » fonctionné ensembles.
Soit :
TB_L1.Text et TB_L2.Text
TB_L3.Text et TB_L4.Text
TB_L5.Text et TB_L6.Text
TB_L7.Text et TB_L8.Text

J'ai seulement codé l'action sur les TextBox TB_L1 et TB_L2 pour avoir votre avis.
Si TB_L1.Text et TB_L2.Text sont vide :
Je « désactive » ces deux TextBox
Je change leurs couleurs
Je change la couleur d'un Label (LB_INFO_R3)
J'ignore les « chaine » correspondantes.

Je fais la même opération sur le ComboBox (CB_R3)

Private Sub Command1_Click()
Open "C:\MonFichier.txt" For Output As #1
Dim chaine As String
chaine = "!R!"
If TB_L1.Text & TB_L2.Text = "" Then
TB_L1.BackColor = &H8000000F
TB_L1.Enabled = False
TB_L2.BackColor = &H8000000F
TB_L2.Enabled = False
Else
chaine = chaine & " FRPO L1," & TB_L1.Text
chaine = chaine & "; FRPO L2," & TB_L2.Text
End If
chaine = chaine & "; FRPO L3," & TB_L3.Text
chaine = chaine & "; FRPO L4," & TB_L4.Text
chaine = chaine & "; FRPO L5," & TB_L5.Text
chaine = chaine & "; FRPO L6," & TB_L6.Text
chaine = chaine & "; FRPO L7," & TB_L7.Text
chaine = chaine & "; FRPO L8," & TB_L8.Text

If TB_L1.Text & TB_L2.Text = "" Then
CB_R3.Enabled = False
LB_INFO_R3.ForeColor = &H80000010
Else
chaine = chaine & "; FRPO R3," & CB_R3.ItemData(CB_R3.ListIndex)
End If
chaine = chaine & "; STAT" & CB_STAT.ItemData(CB_STAT.ListIndex) & "; EXIT;"
Print #1, chaine
Close #1
End Sub


Au Form_Load()
Je déclare un nouveau ComboBox (CB_MODEL) sur lequel je renseigne des valeur par défaut.

Private Sub Form_Load()

CB_MODEL.AddItem "1"
CB_MODEL.ListIndex = 0
If CB_MODEL.ListIndex = 0 Then
TB_L1.Text = "00"
TB_L2.Text = "50"
TB_L3.Text = "00"
TB_L4.Text = "50"
End If

CB_MODEL.AddItem "2"
If TB_L1.Text & TB_L2.Text = "" Then
TB_L1.BackColor = &H8000000F
TB_L1.Enabled = False
TB_L2.BackColor = &H8000000F
TB_L2.Enabled = False
LB_INFO_L1_L2.ForeColor = &H80000010
End If

CB_R3.AddItem "inactif"
CB_R3.ItemData(CB_R3.NewIndex) = 0
CB_R3.AddItem "actif"
CB_R3.ItemData(CB_R3.NewIndex) = 1
CB_R3.ListIndex = 0
If TB_L1.Text & TB_L2.Text = "" Then
CB_R3.Enabled = False
LB_INFO_R3.ForeColor = &H80000010
End If

CB_STAT.AddItem "oui"
CB_STAT.ItemData(CB_STAT.NewIndex) = 1
CB_STAT.AddItem "non"
CB_STAT.ItemData(CB_STAT.NewIndex) = 0
CB_STAT.ListIndex = 0
'Kill "C:\MonFichier.txt"
'Close #1
End Sub


Je déclare les informations dans le CB_MODEL_Click() pour actualiser l'utilisation de ce Combo.

Private Sub CB_MODEL_Click()

If CB_MODEL.ListIndex = 0 Then
TB_L1.Text = "00"
TB_L2.Text = "50"
TB_L3.Text = "00"
TB_L4.Text = "50"
End If

If CB_MODEL.ListIndex = 1 Then
TB_L1.Text = "01"
TB_L2.Text = "15"
TB_L3.Text = "01"
TB_L4.Text = "95"
End If
End Sub


Jusqu'ici tous va bien, la ou je bute c'est au niveau de l'association des groupes de TextBox.
TB_L1.Text et TB_L2.Text
TB_L3.Text et TB_L4.Text
TB_L5.Text et TB_L6.Text
TB_L7.Text et TB_L8.Text
Je ne sais pas comment traiter le fait que par exemple TB_L1.Text et vide, mais pas TB_L2.Text ou vis vers et faire la même action que si les deux sont vides.

Merci pour votre aide.
Afficher la suite 

Votre réponse

26 réponses

Whismeril 11563 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 27 mai 2018 Dernière intervention - Modifié par Whismeril le 9/05/2015 à 15:05
0
Merci
Bonjour,

à mon avis, tu devrais séparer tes traitements.

Tu crées une sub qui met le background de la couleur que tu veux quand le texte d'une texbox passée en paramètre est vide, et de la couleur par défaut dans les autres cas.
Dans chaque événement change, tu appelles cette sub en mettant le textbox en cours en paramètre.

Pour Enabled False, si tu en as vraiment besoin, il ne faut pas le faire là, car une fois avoir effacer le contenu pour y écrire un truc tout neuf c'est bloqué...

Donc tu peux éventuellement faire une boucle au début de ta sub command-click.

A ce moment, il ne te reste plus qu'à traiter tes couples, avec des OU au lieu de ET.

Modérer m'amène à intervenir dans de nombreux posts, mais les seuls langages que je connaisses sont le C# et un peu de VB. Pour vos codes pensez à la coloration.
Réponse trouvée ->Question Résolue
Commenter la réponse de Whismeril
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 9 mai 2015 à 15:57
0
Merci

Private Sub Command1_Click()
Open "C:\MonFichier.txt" For Output As #1
Dim chaine As String
chaine = "!R!"
If TB_L1.Text & TB_L2.Text = "" Then
TB_L1.BackColor = &H8000000F
TB_L1.Enabled = False
TB_L2.BackColor = &H8000000F
TB_L2.Enabled = False
Else
chaine = chaine & " FRPO L1," & TB_L1.Text
chaine = chaine & "; FRPO L2," & TB_L2.Text
End If
chaine = chaine & "; FRPO L3," & TB_L3.Text
chaine = chaine & "; FRPO L4," & TB_L4.Text
chaine = chaine & "; FRPO L5," & TB_L5.Text
chaine = chaine & "; FRPO L6," & TB_L6.Text
chaine = chaine & "; FRPO L7," & TB_L7.Text
chaine = chaine & "; FRPO L8," & TB_L8.Text

If TB_L1.Text & TB_L2.Text = "" Then
CB_R3.Enabled = False
LB_INFO_R3.ForeColor = &H80000010
Else
chaine = chaine & "; FRPO R3," & CB_R3.ItemData(CB_R3.ListIndex)
End If
chaine = chaine & "; STAT" & CB_STAT.ItemData(CB_STAT.ListIndex) & "; EXIT;"
Print #1, chaine
Close #1
End Sub


Reprenons le code

1)
If TB_L1.Text & TB_L2.Text = "" Then


La ce code est faux : le bon code est en dessous

If TB_L1.Text = "" Or TB_L2.Text = "" Then
TB_L1.BackColor = &H8000000F
TB_L1.Enabled = False
TB_L2.BackColor = &H8000000F
TB_L2.Enabled = False
Else
' les 2 Textbox sont remplies dans ce cas
chaine = chaine & " FRPO L1," & TB_L1.Text
chaine = chaine & "; FRPO L2," & TB_L2.Text
End If


Ce cas se répète aussi pour le traitement de la combobox
Le Or entre les 2 valeurs de Textbox te permettent de valider la chaine uniquement si les 2 Textbox couplées sont remplies

2)
Si je comprends bien tu as 4 traitement successifs à faire : chaque traitement utilise 2 Textbox et une valeur dans une Combobox

utilise un sous-programme avec en paramètre les 2 Textbox et construis ta chaine au fur et à mesure
Commenter la réponse de vb95
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 9 mai 2015 à 18:24
0
Merci
Bonjour,
C'est à ce genre de choses que s'avère utile un groupe de contrôles indexés.
Je ne vais pas te priver du plaisir de faire to-même ton truc. Je vais me contenter ici de te mettre sur la voie, avec un petit exemple;
6 textboxes TL_B indexées de 1 à 6
un bouton de commande ==>> ce code
Private Sub Command1_Click()
For i = 1 To 6 Step 2
If TB_L(i) = "" Or TB_L(i + 1) = "" Then
TB_L(i) = "": TB_L(i + 1) = ""
Else
chaine = chaine & " FRPO L" & i & "," & TB_L(i).Text & " FRPO L" & i + 1 & "," & TB_L(i + 1).Text
End If
Next
MsgBox chaine
End Sub

regarde ce que cela fait. Analyse, comprends et extrapole.
Commenter la réponse de ucfoutu
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 9 mai 2015 à 18:35
0
Merci
Bonjout ucfoutu
C'est là que l'on vois que programmer c'est 80% d'analyse et 20% de code
Bonsoir à toi
jordane45 21207 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 27 mai 2018 Dernière intervention - 9 mai 2015 à 22:28
En vrai c'est 80% d'analyse... 20% d'écriture de code ... et 10% de débogage ...
c'est pour ça que les développeurs font des heures sup' ^^
Commenter la réponse de vb95
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 9 mai 2015 à 18:36
0
Merci
bonjour bien sur !
avec un oeil non valide les fautes de frappe ( décollement de la rétine opérée récemment)
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 9 mai 2015 à 19:24
Faut faire avec, VB95, ... faut faire avec (pas le choix)
Moi, c'est la cornée, qui me joue des tours. Cet après-midi, j'ai confondu un maigre avec une louvine :!!!!
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 9 mai 2015 à 21:00
Ne t'inquiètes pas ucfoutu
Il y en a qui sont bien plus à plaindre que moi
Toujours avec la canne à pèche notre ucfoutu !
Bonne soirée à toi
Whismeril 11563 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 27 mai 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 9 mai 2015 à 22:08
Bonsoir,
Cet après-midi, j'ai confondu un maigre avec une louvine :!!!!
au moins tu as sorti quelque chose!
Commenter la réponse de vb95
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - Modifié par NeriXs le 10/05/2015 à 00:57
0
Merci
Bonsoir,
Jusqu'ici ça va :

Private Sub Command1_Click()

Open "C:\MonFichier.txt" For Output As #1
Dim chaine As String
'Dim i As Integer ???
chaine = "!R!"
For i = 1 To 8 Step 2 'Je me suis fait avoir avec Text(0) - C'est bien Text(1) a Text(8)
If TB_L(i) = "" Or TB_L(i + 1) = "" Then
TB_L(i) = "": TB_L(i + 1) = ""
Else
chaine = chaine & " FRPO L" & i & "," & TB_L(i).Text & ";" & " FRPO L" & i + 1 & "," & TB_L(i + 1).Text
End If
Next
chaine = chaine & "; FRPO R3," & CB_R3.ItemData(CB_R3.ListIndex) & "; STAT" & CB_STAT.ItemData(CB_STAT.ListIndex) & "; EXIT;"
Print #1, chaine
Close #1

End Sub


Et:

Private Sub Form_Load()

CB_R3.AddItem "inactif"
CB_R3.ItemData(CB_R3.NewIndex) = 0
CB_R3.AddItem "actif"
CB_R3.ItemData(CB_R3.NewIndex) = 1
CB_R3.ListIndex = 0


CB_STAT.AddItem "oui"
CB_STAT.ItemData(CB_STAT.NewIndex) = 1
CB_STAT.AddItem "non"
CB_STAT.ItemData(CB_STAT.NewIndex) = 0
CB_STAT.ListIndex = 0

End Sub


Mais, après pour indiquer une valeur par défaut a chaque Textbox ?
Je ne parle même pas du « Enabled » et du « ForeColor » ...

Un petit coup de patte SVP ?
Commenter la réponse de NeriXs
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 10 mai 2015 à 03:12
0
Merci
Regarde ce que donne ceci

Private Sub Command1_Click()

Open "C:\MonFichier.txt" For Output As #1
' les 8 valeurs par défaut
Dim valdefaut(1 to 8) as String
valdefaut(1)= "50"
valdefaut(2)= "75"
valdefaut(3)= "47"
valdefaut(4)= "66"
valdefaut(5)= "82"
valdefaut(6)= "36"
valdefaut(7)= "77"
valdefaut(8)= "92"
Dim chaine As String
chaine = "!R!"
For i = 1 To 8 Step 2
If TB_L(i).Text = "" Or TB_L(i + 1).Text = "" Then
' les valeurs par défaut
TB_L(i).Text = "": TB_L(i + 1).Text = ""
' TB_L(i).Backcolor = ce que tu veux: TB_L(i+1).Backcolor = ce que tu veux
chaine = chaine & " FRPO L" & i & "," & valdefaut(i) & ";" & " FRPO L" & i + 1 & "," & valdefaut(i+1)
Else
' les valeurs réellement saisies
chaine = chaine & " FRPO L" & i & "," & TB_L(i).Text & ";" & " FRPO L" & i + 1 & "," & TB_L(i + 1).Text
' TB_L(i).Backcolor = ce que tu veux: TB_L(i+1).Backcolor = ce que tu veux
End If
Next
chaine = chaine & "; FRPO R3," & CB_R3.ItemData(CB_R3.ListIndex) & "; STAT" & CB_STAT.ItemData(CB_STAT.ListIndex) & "; EXIT;"
Print #1, chaine
Close #1

End Sub


Rien ne t'empèche ensuite de mettre les couleurs pour les Textbox comme je te l'ai indiqué avec les BackColor
Commenter la réponse de vb95
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 10 mai 2015 à 03:16
0
Merci
Aussi NeriXs
Prends l'habitude de toujours écrire
TextBox.Text = "xxx" 

et non
Textbox = "xxx"


tu me remercieras plus tard ( surtout si un jour tu passes à VB net)
Commenter la réponse de vb95
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - 10 mai 2015 à 11:18
0
Merci
Merci j'ai saisi en grande partie le fonctionnement.

Private Sub Command1_Click()

' les 8 valeurs par défaut
Dim valdefaut(1 To 8) As String
valdefaut(1) = "50"
valdefaut(2) = "75"
valdefaut(3) = "47"
valdefaut(4) = "66"
valdefaut(5) = "82"
valdefaut(6) = "36"
valdefaut(7) = "77"
valdefaut(8) = "92"
Open "C:\MonFichier.txt" For Output As #1
Dim chaine As String
chaine = "!R!"
For i = 1 To 8 Step 2
If TB_L(i).Text = "" Or TB_L(i + 1).Text = "" Then
' les valeurs par défaut
TB_L(i).Text = "": TB_L(i + 1).Text = ""
TB_L(i).BackColor = &H8000000D: TB_L(i + 1).BackColor = &H8000000D
chaine = chaine & " FRPO L" & i & "," & valdefaut(i) & ";" & " FRPO L" & i + 1 & "," & valdefaut(i + 1)
Else
' les valeurs réellement saisies
chaine = chaine & " FRPO L" & i & "," & TB_L(i).Text & ";" & " FRPO L" & i + 1 & "," & TB_L(i + 1).Text
TB_L(i).BackColor = &H8000000C: TB_L(i + 1).BackColor = &H8000000C
End If
Next
chaine = chaine & "; FRPO R3," & CB_R3.ItemData(CB_R3.ListIndex) & "; STAT" & CB_STAT.ItemData(CB_STAT.ListIndex) & "; EXIT;"
Print #1, chaine
Close #1

End Sub


J'ai ajouté un ComboBox « CB_MODEL »

Private Sub Form_Load()

CB_MODEL.AddItem "Model 1"
CB_MODEL.ListIndex = 0
If CB_MODEL.ListIndex = 0 Then
'valdefaut(i)
End If
CB_MODEL.AddItem "Model 2"

End Sub


Private Sub CB_MODEL_Click()

If CB_MODEL.ListIndex = 0 Then
'valdefaut(i)
End If

If CB_MODEL.ListIndex = 1 Then
'valdefaut(i)
End If

End Sub


J'ai tenté d'utiliser un Tag pour modifier mes « valdefaut » depuis mon ComboBox sur ce principe :

Private Sub CB_MODEL _Click()
Me.Controls(Me.Tag).Text = "33"
End Sub


Private Sub Form_Load()
Me.Tag = "Text1"
End Sub


Je passe a coté de quelque chose !
Commenter la réponse de NeriXs
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 10 mai 2015 à 11:57
0
Merci
C'est quoi, çà :
Private Sub Form_Load()

CB_MODEL.AddItem "Model 1"
CB_MODEL.ListIndex = 0
If CB_MODEL.ListIndex = 0 Then
'valdefaut(i)
End If
CB_MODEL.AddItem "Model 2"

End Sub

1) Il est clair que si listindex est fixé à 0 (ta ligne 2) , ta condition en ligne 3 est étonnante (tu viens de le mettre à 0 !!!)
2) valdefaut a été déclaré à portée limitée (dans ta procédure de clic sur Command1). Je vois mal comment tu peux t'y référer depuis une autre procédure !
3) C'est quoi ce i dans valdefaut(i) ?
4) ta procédure au load ne fait finalement pour l'instant que ceci :
Private Sub Form_Load()
CB_MODEL.AddItem "Model 1"
CB_MODEL.AddItem "Model 2"
CB_MODEL.ListIndex = 0
End Sub
</code>
Commenter la réponse de ucfoutu
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 10 mai 2015 à 12:15
0
Merci
Salut NeriXs
Je ne veux pas être méchant mais cela devient l'usine à gaz

Private Sub Command1_Click()

' les 8 valeurs par défaut
Dim valdefaut(1 To 8) As String
valdefaut(1) = "50"
valdefaut(2) = "75"
valdefaut(3) = "47"
valdefaut(4) = "66"
valdefaut(5) = "82"
valdefaut(6) = "36"
valdefaut(7) = "77"
valdefaut(8) = "92"
Open "C:\MonFichier.txt" For Output As #1
Dim chaine As String
chaine = "!R!"
For i = 1 To 8 Step 2
If TB_L(i).Text = "" Or TB_L(i + 1).Text = "" Then
' les valeurs par défaut
TB_L(i).Text = "": TB_L(i + 1).Text = ""
TB_L(i).BackColor = &H8000000D: TB_L(i + 1).BackColor = &H8000000D
chaine = chaine & " FRPO L" & i & "," & valdefaut(i) & ";" & " FRPO L" & i + 1 & "," & valdefaut(i + 1)
Else
' les valeurs réellement saisies
chaine = chaine & " FRPO L" & i & "," & TB_L(i).Text & ";" & " FRPO L" & i + 1 & "," & TB_L(i + 1).Text
TB_L(i).BackColor = &H8000000C: TB_L(i + 1).BackColor = &H8000000C
End If
Next
chaine = chaine & "; FRPO R3," & CB_R3.ItemData(CB_R3.ListIndex) & "; STAT" & CB_STAT.ItemData(CB_STAT.ListIndex) & "; EXIT;"
Print #1, chaine
Close #1

End Sub


Sur la base de ce code ci-dessus on a 8 valeurs par défaut et 8 TextBox . si les couples de TextBox sont bien remplies on utilise les TextBox sinon on utilise les valeurs par défaut ! Ok !
Maintenant si les valeurs par défaut sont susceptibles de changer ce ne sont plus des valeurs par défaut !
Que faire alors ? C'est toi qui programmes : analyse d'abord le problème de A à Z et ensuite tu y verras plus clair au niveau codage!
Une piste possible : 8 autres Textbox nommées Textdefaut(1 à 8) que tu peux remplir comme valeurs par défaut : si les Textdefaut 1 et 2 sont remplies tu utilises leurs valeurs sinon tu utilisent les valeurs Valdefaut 1 et 2 . A répeter pour 3 et 4, 5 et 6 puis 7 et 8
Mais c'est plutôt usine à gaz

De plus que vient faire là-dedans CB_MODEL ? Quant à la propriété Tag d'un contrôle c'est pas ainsi qu'elle s'utilise pour ce que tu voulais faire
Commenter la réponse de vb95
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - Modifié par NeriXs le 10/05/2015 à 14:32
0
Merci
ucfoutu

Exemple sans passer par des groupes de contrôles :


Private Sub Form_Load()

CB_MODEL.AddItem "Model 1"
CB_MODEL.ListIndex = 0 `ListIndex par défaut
If CB_MODEL.ListIndex = 0 Then `Si ListIndex 0
TB_L1.Text = "00"
TB_L2.Text = "50"
TB_L3.Text = "00"
TB_L4.Text = "50"
End If
CB_MODEL.AddItem "Model 2"

End Sub


Private Sub CB_MODEL_Click()

If CB_MODEL.ListIndex = 0 Then
TB_L1.Text = "00"
TB_L2.Text = "50"
TB_L3.Text = "00"
TB_L4.Text = "50"
End If

If CB_MODEL.ListIndex = 1 Then
TB_L1.Text = "01"
TB_L2.Text = "15"
TB_L3.Text = "01"
TB_L4.Text = "95"
End If

End Sub


VB95

Pour les explications :
Ce code doit me permettre de régler les marges physiques de mes imprimantes.
Toutes de la même marque mais de modèles différents.
D'où le ComboBox « CB_MODEL »
En gros.

Model 1 :

Réglage par défaut du constructeur.
FRPO L1,00
FRPO L2,50
FRPO L3,01
FRPO L4,15
FRPO L5,00
FRPO L6,25
FRPO L7,01
FRPO L8,00
FRPO R3,0
STAT1

Envoyé sous form:
!R! FRPO L1,00; FRPO L2,50; FRPO L3,01; FRPO L4,15; FRPO L5,00; FRPO L6,25; FRPO L7,01; FRPO L8,00; FRPO R3,0; STAT1

Model 2 :

Réglage par défaut du constructeur.
FRPO L1,01
FRPO L2,25
FRPO L3,00
FRPO L4,15
STAT1

Envoyé sous form:
!R! FRPO L1,00; FRPO L2,50; FRPO L3,01; FRPO L4,15; STAT1

J'ai bien des valeurs par défaut pour chaque modèle.
Je dois changer certaine de ces valeurs pour adapter l'impression au support.

Mon idée était de passer par un élément extérieur pour utiliser les valeurs par défaut dans différentes Sub d'où le TAG mais, je m'aventure en terrain obscure semble t-il !

Le but de l'activation ou non des TextBox "Enabled" du changement de couleur et des conditions vide ou pas et d'éviter les erreur et surtout n'envoyer ce qui a été modifier.
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 10 mai 2015 à 15:59
Salut NeriXs
Cela s'éclaircit un peu
tu as donc 2 modèles d'imprimante : on est d'accord la dessus !
Pour chaque modèle tu as une chaine par défaut .
Pour le modèle 1 tu as 8 valeurs couplées 2 à 2 + la valeur R3 et le STAT1
Pour le modèle 2 tu as 4 valeurs couplées 2 à 2 + le STAT 1

Maintenant tu veux utiliser selon le modèle choisi soit les valeurs par défaut soit celles que tu veux spécifier dans les TextBox

De plus tu veux utiliser la chaine dans des Sub différentes dans ton programme

De toute façon lors de l'initialisation pour l'imprimante il est préférable de lui envoyer toute la chaine complète ( surtout n'envoyer ce qui a été modifier : cela ne mange pas de pain !)

La première chose à faire est de pouvoir sélectionner le modèle d'imprimante et de renseigner ensuite les différentes valeurs par défaut qui lui conviennent!
Ensuite être capable d'envoyer ces valeurs par défaut par le Print # 1

Ensuite seulement libre à toi ensuite de modifier les Textbox pour affiner les réglages selon tes désirs et envoyer cette chaine par Print #1

Prévoir un bouton de commande pour revenir aux valeurs par défaut de l'imprimante sélectionnée

Dommage que je n'ai pas VB 6 car en 1 heure à peine je te l'aurais fait ! mais ce n'est pas le but du site !
Commenter la réponse de NeriXs
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - Modifié par NeriXs le 10/05/2015 à 22:02
0
Merci
Salut vb95,

J'ai en tous 6 modèles différents d'imprimantes.
Les variables sont sensiblement les mêmes que dans mes 2 exemples, seul les valeurs de marges par défaut et à envoyer changent.

Je n'ai pas bien compris comment depuis mon ComboBox de choix du modèle "CB_MODEL" je peux gérer les valeurs par défaut "valdefaut(i)" intégré aux chaînes de mon Sub Command1_Click.

Je ne suis pas à l'aise du tous avec cette conception d'éléments exploitables depuis plusieurs Sub :(
Commenter la réponse de NeriXs
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 10 mai 2015 à 22:56
0
Merci
Salut NeriXs

Model 1 :

Réglage par défaut du constructeur.
FRPO L1,00
FRPO L2,50
FRPO L3,01
FRPO L4,15
FRPO L5,00
FRPO L6,25
FRPO L7,01
FRPO L8,00
FRPO R3,0
STAT1

Envoyé sous form:
!R! FRPO L1,00; FRPO L2,50; FRPO L3,01; FRPO L4,15; FRPO L5,00; FRPO L6,25; FRPO L7,01; FRPO L8,00; FRPO R3,0; STAT1

Model 2 :

Réglage par défaut du constructeur.
FRPO L1,01
FRPO L2,25
FRPO L3,00
FRPO L4,15
STAT1

Envoyé sous form:
!R! FRPO L1,00; FRPO L2,50; FRPO L3,01; FRPO L4,15; STAT1

Je vais voir pour un exemple précis avec ces 2 modèles uniquement : leurs valeurs par défaut sont-elles correctes ainsi que leur nombre ( 8 L + 1 R pour Model1 et 4 L et 1 R pour Model2 en sachant que les L sont couplées 2 à 2)

Je vais repartir de rien : peut-être pour demain en fin de journée ou mardi pour l'exemple . Je vais te commenter le code au maximum afin que tu n'aies pas de difficultés pour les 4 autres imprimantes
Il te restera sur la même base de faire les 4 autres modèles d'imprimantes
Bonne soirée à toi
Je file au dodo : demain RDV important
Commenter la réponse de vb95
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - 11 mai 2015 à 00:14
0
Merci
Salut vb95,
Oui, les valeurs par défaut sont correctes ainsi que leur nombre ( 8 L + 1 R pour Model1 et 4 L et 1 R pour Model2.
Les L sont Bien couplées 2 à 2)
L1 et L2
L3 et L4
L5 et L6
L7 et L8

R3 et nom pas R
Actif = 1
Inactif = 0
0 par défaut.

Stat (Impression d'une page de statistique)
Oui = 1
Non = 0
1 par défaut

Si ça peut aider, voilà comment j'avais imaginé l'interface graphique :

Commenter la réponse de NeriXs
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 11/05/2015 à 09:31
0
Merci
Re moi :
Je pense comme VB95 que tu es en train de faire une petite usine à gaz et qu'il vaudra mieux revoir la conception.
Tu as aujourd'hui 6 imprimantes. Tu pourrais demain avoir à en rajouter (on ne sait jamais)
Il serait mille fois plus simple, pour si peu, de mettre, dans un sous-répertoire de ton appli, un fichier texte pour chacune de ces imprimantes. Ce qui te permettra beaucoup plus d'agilité (tant pour ajouter, supprimer, que pour identifier, etc ...). Et surtout de cesser de travailler "par paires" !
Je vais te mettre sur la voie, pas à pas.
Commence par ce petit exercice dans un projet tout neuf.
Deux boutons de commande ===>>
Private Sub Command1_Click()
Open "c:\abcd.txt" For Output As #1
Write #1, 1.2, 2, 3
Write #1, 5.4, 3, 2.5
Close #1
End Sub

Private Sub Command2_Click()
Open "c:\abcd.txt" For Input As #1
Do While Not EOF(1)
Input #1, a, b, c
MsgBox a & vbCrLf & b & vbCrLf & c
Loop
End Sub

lance clique sur Command1, puis clique sur command2
Tu vois ? Tu devrais maintenant commencer à deviner le reste
Commence par ce petit premier pas.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 11 mai 2015 à 16:23
0
Merci
Salut NeriXs
un petit cadeau pour toi : http://codes-sources.commentcamarche.net/source/101022-envoi-parametres-a-une-imprimante

il te reste les 4 dernières imprimantes à paramétrer ( les Model 3 à 6) . Suis bien l'exemple sur le modèle 1 et 2 pour ce faire .
Lis bien le mode d'emploi pour utiliser le programme
En cas d'erreur tu es averti par des Msgbox

J'espère que cela te va
Commenter la réponse de vb95
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - Modifié par NeriXs le 11/05/2015 à 21:21
0
Merci
Merci vb95 c'est exactement le résulta voulu.
J'ai juste apporté une ou deux petites modifications car la chaine final n'était pas totalement conforme.

Pour le model 1

La chaine produit par l'appli VB6:
!R! FRPO L1,00; FRPO L2,50 FRPO L3,01; FRPO L4,15 FRPO L5,00; FRPO L6,25 FRPO L7,01; FRPO L8,00; FRPO R3,0; STAT1; EXIT;

Manque le
;
en L2, L4 et L6

La chaine conforme est :
!R! FRPO L1,00; FRPO L2,50
;
FRPO L3,01; FRPO L4,15
;
FRPO L5,00; FRPO L6,25
;
FRPO L7,01; FRPO L8,00; FRPO R3,0; STAT1; EXIT;

Pour le model 2

La chaine produit par l'appli VB6:
!R! FRPO L1,01; FRPO L2,25 FRPO L3,02; FRPO L4,15; STAT1; EXIT;

Manque le
;
en L2

La chaine conforme est :
!R! FRPO L1,01; FRPO L2,25
;
FRPO L3,02; FRPO L4,15; STAT0; EXIT;

J'ai juste modifié les lignes suivantes :

Ajout du
;
a la fin de cette ligne:

chn = chn & " FRPO L" & CStr(i) & "," & TB_L(i).Text & ";" & " FRPO L" & CStr(i + 1) & "," & TB_L(i + 1).Text & ";"


Supprimé le
;
avant "FRPO R3" et ajout à la fin.

chn = chn & " FRPO R3," & TB_R3.Text & ";"


Supprimé le
;
avant "STAT" et ajout à la fin.

chn = chn & " STAT" & TB_Stat.Text & ";"


Supprimé le
;
avant "EXIT".

chn = chn & " EXIT;"


Et c'est tous bon.
Commenter la réponse de NeriXs
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 11 mai 2015 à 22:06
0
Merci
Salut NeriXs
bien content que cela te plaise
Pas de problème pour initialiser les Model 3 à 6 je suppose ?

J'ai passé 1h 30 à chercher comment construire le projet et ce fut codé en 30 minutes
Au passage tu peux me noter si tu veux si tu sais comment faire ( sinon c'est pas grave rassures-toi)

Je remets donc cette constatation : C'est là que l'on vois que programmer c'est 80% d'analyse et 20% de code

Si tout est bon mets le sujet comme résolu
Ce fut un plaisir de recoder en VB 6 que j'ai abandonné depuis 6 ou 7 ans : je suis passé à VB net

Allez bonne soirée à toi et A+

Alain alias VB95 (95 pour le Val d'Oise lol)
Commenter la réponse de vb95
NeriXs 101 Messages postés lundi 4 mai 2015Date d'inscription 11 janvier 2018 Dernière intervention - 11 mai 2015 à 22:47
0
Merci
Salut Alain,
Pas de problème pour initialiser les autres Modèles.
Pour la note dis-moi comment faire et je m'exécute :)
Au passage pourrais-tu revenir sur mon poste précédent :
http://codes-sources.commentcamarche.net/forum/affich-10048855-aide-put-ftp-textbox-value
A propos du "client FTP" il y surement plus léger pour un simple put ftp ?
Quoi que, le protocole à gérer !!!

Salut ucfoutu,
Je fini avec le code de vb95 est m'attaque a ton petit défi :)
Je n'ai pas encore regardé, mais, ça peut être sympa d'avoir une autre approche.
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 12 mai 2015 à 00:49
Salut NeriXs
Pour les notes je n'en sais rien mais pas grave !
Pour le code d'ucfoutu il fait avec des fichiers ce que moi je fais avec des paramètres d'initialisation . Plusieurs méthodes d'approche peuvent
résoudre un même problème
Pour le client FTP je vais jeter un oeil mais je ne te garantis rien : j'y connais rien en réseau !
Pense à mettre Résolu pour ce problème
Bonsoir
Commenter la réponse de NeriXs

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.