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.

9classeur1.xlsm (21.92 Ko)

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 Sub

Par 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 If

Mais 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 If

Mais 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 Sub

A+

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 Sub

Merci pour l'astuce du coup, je mets en résolu mais recommandes-tu de te passer de vbnewline quand même ?
Merci, A+

Rechercher des sujets similaires à "bug mysterieux instr"