IpxBrowser : discussion sur le code VBA

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 : :slightly_smiling_face:)

>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 : :rofl: ON :exploding_head: 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 ! :wink:

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 conditions iif dans votre code VBA, vous pouvez utiliser la fonction IIf 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 dans TextBox_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 dans TextBox_VariableName est supérieure à 31, le bouton CommandButton_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é… :wink:

@fgtoul pour le coup possible de déplacer mon message sur le post dédié (le temps que je l’écrives :writing_hand: le post a été créé :slight_smile: : ) . Merci :pray: