Bug mystérieux sur InStr
Bonjour à tous, j'ai un bug mystérieux sur mon userform, que j'ai essayé d'isoler au maximum dans le fichier joint.
J'ai une textbox qui affiche automatique la date du jour et le nom du praticien lorqu'on la remplit. Par exemple saisir "test".
On valide la saisie (bouton Ecrire), cela écrit le texte sur une cellule excel ("\\\\\\\\\\ [AL] Le mardi 18/10/2022 : //////////
test".
Puis si l'on efface le textbox et lit le contenu de la cellule (bouton Lire), le contenu s'affiche effectivement dans le textbox (à condition que le contenu contienne bien la date du jour, inclue dans EcritureDate).
Private Sub BtnLire_Click()
DerSeance = f.Cells(1, 1)
If InStr(DerSeance, EcritureDate) <> 0 Then
TextBox1.Value = DerSeance
End If
End SubPar contre, si entre l'écriture de la cellule et la lecture de cette dernière, on vient effectuer une légère modification (par exemple remplacer "test" pas "te") ou même simplement sélectionner la cellule sans faire aucune modification, alors la lecture ne se fait plus alors que la condition qui pose problème (le instr du BtnLire_click) est sensée rester identique...
Quelqu'un a-t-il une idée de l'origine du problème svp ?
Merci d'avance
A noter que j'ai essayé avec like :
If DerSeance Like "*" & EcritureDate & "*" Then
SeanceActuelle.Value = DerSeance
End IfMais le problème reste exactement le même... si je modifie le texte de la cellule mais tout en gardant intact la ligne de la date (donc EcritureDate) ça ne marche plus !
A noter que j'ai essayé avec like :
If DerSeance Like "*" & EcritureDate & "*" Then
SeanceActuelle.Value = DerSeance
End IfMais le problème reste exactement le même... si je modifie le texte de la cellule mais tout en gardant intact la ligne de la date (donc EcritureDate) ça ne marche plus !
Bonjour Arnaud,
Le soucis vient du "VbNewLine" qui d'ailleurs est une constante devenue obsolète et à remplacer par VbCrLf
Si vous supprimez ces retours à la ligne, il n'y a plus de problème, donc il faut travailler sur une chaine de caractères sans
Option Explicit
Dim StopEventBis
Dim EcritureDate, EcritureDatePrat, f As Worksheet, DerSeance
Private Sub userform_initialize()
Dim dttoday As Date
dttoday = Date
EcritureDate = Format(dttoday, "dddd") & " " & dttoday & " : //////////" & vbCrLf
EcritureDatePrat = vbCrLf & "\\\\\\\\\\ [AL] Le "
Set f = Sheets("Feuil1")
End Sub
Private Sub Textbox1_Change() 'rajouter la date du jour si on rentre du texte dans le textbox Séance Actuelle
If StopEventBis = True Then
StopEventBis = False
Exit Sub
Else
If TextBox1.Value <> "" And TextBox1.Value <> "\" And InStr(TextBox1.Value, "\\") = 0 Then 'petite précaution pour qu'on rajoute la date si on coche le /!\
StopEventBis = True
TextBox1.Value = EcritureDatePrat & EcritureDate & TextBox1.Value
End If
If TextBox1.Value = EcritureDatePrat & EcritureDate Then
TextBox1.Value = ""
End If
End If
End Sub
Private Sub BtnEcrire_Click()
f.Cells(1, 1) = TextBox1.Value
End Sub
Private Sub BtnEffacer_Click()
TextBox1.Value = ""
End Sub
Private Sub BtnLire_Click()
Dim sTmp As String
sTmp = Replace(EcritureDate, vbCrLf, "")
DerSeance = f.Cells(1, 1)
If InStr(DerSeance, sTmp) <> 0 Then
TextBox1.Value = DerSeance
End If
End SubA+
Bonjour BrunoM45,
Es-tu sûr que vbnewline pose problème ? Car juste en remplaçant vbnewline par vbCrLf le problème demeure, par contre en gardant vbnewline mais en utilisant ta procédure qui consiste à supprimer la mise à la ligne dans la valeur à recherche, alors plus de problème !
Private Sub BtnLire_Click()
Dim sTmp As String
sTmp = Replace(EcritureDate, vbNewLine, "")
DerSeance = f.Cells(1, 1)
If InStr(DerSeance, sTmp) <> 0 Then
TextBox1.Value = DerSeance
End If
End SubMerci pour l'astuce du coup, je mets en résolu mais recommandes-tu de te passer de vbnewline quand même ?
Merci, A+