Private Sub CheckBox_OnOff_Click()
code origine
Private Sub CheckBox_OnOff_Click()
Dim setData As String
If CheckBox_OnOff.value = True Then
Label_OnOff.Caption = « On » ’ ************* code doublon avec la ligne plus loin
setData = « true »
Label_OnOff.backColor = &HF000&
Label_OnOff.ForeColor = 0
Else
Label_OnOff.Caption = « Off » ’ ************* code doublon avec la ligne plus loin
setData = « false »
Label_OnOff.backColor = &H404040
Label_OnOff.ForeColor = &HFFFFFF
End If
If CheckBox_OnOff Then setData = « true » Else setData = « false » ’ ************* code doublon avec les lignes plus haut
If Not setValidFlag Then Exit Sub
setData = "{""on"":" & setData & "}"
JsonSendRequest_PutVariable apiName, localVariableObject.key, setData
End Sub
code modifié à l’ancienne (sans ChatGPT quoi : )
>Private Sub CheckBox_OnOff_Click()
> Dim setData As String
> With Label_OnOff
> .Caption = Iif(CheckBox_OnOff.value = True, "On", "Off")
> .backColor = Iif(CheckBox_OnOff.value = True, &HF000, &H404040)
> .ForeColor = Iif(CheckBox_OnOff.value = True, 0, &HFFFFFF)
> End With
> setData = Iif(CheckBox_OnOff.value = True, "true", "false")
> ' on peut aussi mettre :
' setData = (CheckBox_OnOff.value = True)
>
> If Not setValidFlag Then Exit Sub
>
> setData = "{""on"":" & setData & "}"
> ' on peut aussi mettre (en supprimant la ligne d'affectation plus haut) :
setData = "{""on"":" & (CheckBox_OnOff.value = True) & "}"
>
> JsonSendRequest_PutVariable apiName, localVariableObject.key, setData
>
> End Sub
Set Mode fainéant=ON; ChatGPT activation = true : ON OFF
je donne à bouffer cette sub de ta UserForm_Variable en demandant :
remplace dans ce code les conditions if par des conditions iif :
Private Sub TextBox_VariableName_Change()
If Len(TextBox_VariableName.text) > 39 Then
TextBox_VariableName.ForeColor = &HFF& 'rouge
Else
TextBox_VariableName.ForeColor = &H80000012
End If
If Not setValidFlag Then Exit Sub
If Len(TextBox_VariableName.text) > 31 Then
CommandButton_Send.Enabled = False
Else
CommandButton_Send.Enabled = True
End If
End Sub
La réponse rapide et efficace, juste s’assurer que le code est bon !
Voici comment remplacer les conditions If par des conditions IIf dans votre code :
Private Sub TextBox_VariableName_Change()
’ Utilisation de IIf pour changer la couleur de texte en fonction de la longueur du texte
TextBox_VariableName.ForeColor = IIf(Len(TextBox_VariableName.Text) > 39, &HFF&, &H80000012)' Si setValidFlag n'est pas défini, sortir de la procédure If Not setValidFlag Then Exit Sub ' Utilisation de IIf pour activer ou désactiver le bouton en fonction de la longueur du texte CommandButton_Send.Enabled = IIf(Len(TextBox_VariableName.Text) > 31, False, True)
End Sub
Explications :
IIf
est une fonction qui permet d’évaluer une condition sur une seule ligne. Elle renvoie une valeur si la condition est vraie, et une autre si elle est fausse.- Dans ce code, nous l’utilisons pour la couleur du texte et pour activer ou désactiver le bouton.
La réponse avec DeepSeek Coder v-2.5 (moins connu mais très efficace, il indique que c’est du VBA alors que c’est le même code en VB6 !)
Pour remplacer les conditions
if
par des conditionsiif
dans votre code VBA, vous pouvez utiliser la fonctionIIf
qui est une fonction ternaire en VBA. Voici comment vous pouvez réécrire votre code :vba
Copy code
Private Sub TextBox_VariableName_Change() TextBox_VariableName.ForeColor = IIf(Len(TextBox_VariableName.text) > 39, &HFF&, &H80000012) If Not setValidFlag Then Exit Sub CommandButton_Send.Enabled = IIf(Len(TextBox_VariableName.text) > 31, False, True) End Sub
Explication :
- Première condition :
IIf(Len(TextBox_VariableName.text) > 39, &HFF&, &H80000012)
: Si la longueur du texte dansTextBox_VariableName
est supérieure à 39, la couleur du texte sera rouge (&HFF&
), sinon elle sera&H80000012
.- Deuxième condition :
IIf(Len(TextBox_VariableName.text) > 31, False, True)
: Si la longueur du texte dansTextBox_VariableName
est supérieure à 31, le boutonCommandButton_Send
sera désactivé (False
), sinon il sera activé (True
).Remarque :
- La fonction
IIf
est une fonction ternaire en VBA, similaire à? :
en d’autres langages de programmation. Elle prend trois arguments : la condition, la valeur si la condition est vraie, et la valeur si la condition est fausse.- Bien que
IIf
soit pratique pour des conditions simples, il est important de noter que les deux branches de l’expression sont évaluées, même si seule une est utilisée. Cela peut avoir des implications en termes de performance ou de comportement si les branches contiennent des opérations coûteuses ou des effets de bord.
Dans UserForm_FileSelector
Private Sub CommandButton_Delete_Click()
Dim action As Integer, i As Integer
action = MsgBox(« Delete " & TextBox_FileName.value & vbCrLf & UBound(selectedValue) & " " & fileExtension & " file(s) ? », vbOKCancel, « Delete file(s) »)
If action = 1 Then
For i = 1 To UBound(selectedValue)
Kill SelectedFile(i)
Next i
LoadListBox
End If
End Sub
autre exemple d’optimisation
Private Sub CommandButton_Delete_Click()
Dim action As Integer, i As Integer
if MsgBox(« Delete " & TextBox_FileName.value & vbCrLf & UBound(selectedValue) & " " & fileExtension & " file(s) ? », vbOKCancel, « Delete file(s) ») =vbOk Then
For i = 1 To UBound(selectedValue)
Kill SelectedFile(i)
Next i
LoadListBox
End If
End Sub
On peut supprimer l’utilisation de la variable action en codant directement
Private Sub CommandButton_Delete_Click()
Dim ii As Integer
If MsgBox(« Delete " & TextBox_FileName.value & vbCrLf & UBound(selectedValue) & " " & fileExtension & " file(s) ? », vbOKCancel, « Delete file(s) ») = vbOK Then
For ii = 1 To UBound(selectedValue)
Kill SelectedFile(ii)
Next
Call LoadListBox
End If
End Sub
Attention dans cette partie de code, une erreur survenant sur kill (fichier ouvert) n’est pas gérée
Call LoadListBox plutot que LoadListBox (on sait qu’on à affaire à un appel de procédure ou fonction mais c’est un avis perso)
Private Sub ToggleButton_DownDate_Click()
If stopSortFlag Then Exit Sub
stopSortFlag = True
ToggleButton_DownName = False
ToggleButton_UpName = False
LoadListBox
stopSortFlag = False
End Sub
Private Sub ToggleButton_DownName_Click()
If stopSortFlag Then Exit Sub
stopSortFlag = True
ToggleButton_DownDate = False
ToggleButton_UpName = False
LoadListBox
stopSortFlag = False
End Sub
Private Sub ToggleButton_UpName_Click()
If stopSortFlag Then Exit Sub
stopSortFlag = True
ToggleButton_DownDate = False
ToggleButton_DownName = False
LoadListBox
stopSortFlag = False
End Sub
Les 3 codes étant identiques les passer dans une fonction SetToggleButton
Private Sub SetToggleButton()
If stopSortFlag Then Exit Sub
stopSortFlag = True
ToggleButton_DownDate = False
ToggleButton_DownName = False
LoadListBox
stopSortFlag = False
End Sub
Private Sub ToggleButton_DownDate_Click()
Call SetToggleButton
End Sub
Private Sub ToggleButton_DownName_Click()
Call SetToggleButton
End Sub
Private Sub ToggleButton_UpName_Click()
Call SetToggleButton
End Sub
Un autre bug relevé sur un clic droit à cet endroit
Mais je pense que c’est plus lié au type de donnée de la cellule
Le savoir n’a de valeur que quand il est partagé…
@fgtoul pour le coup possible de déplacer mon message sur le post dédié (le temps que je l’écrives le post a été créé : ) . Merci