Affichage d'une erreur si présence de caractères spéciaux

Bonjour,

J'ai parcouru les différents sujets du forum concernant les caractère spéciaux, mais je n'arrive pas correctement à afficher une erreur si un caractère spécial est présent. (Ce sujet là https://forum.excel-pratique.com/viewtopic.php?f=2&t=41551&p=232664&hilit=caractere+speciaux#p232664 correspond beaucoup à mon problème, mais j'ai du mal à exploiter la solution).

J'ai dans ma colonne D une liste de N° de série que je récupère automatiquement via une macro, cette liste étant récupérée dans un fichier txt. Mon problème est le suivant :

Il peut parfois y avoir un problème avec les numéros où des caractères spéciaux apparaissent.

sans titre

Auriez-vous une piste sur comment afficher une seule box (même avec des caractères spéciaux sur plusieurs ligne comme sur l'image) d'erreur si un caractère spécial (ou plus) est présent dans ma colonne D ? (sachant qu'il y a environs 30 lignes contenant des valeurs)

J'ai essayé tout d'abord d'afficher un message d'erreur pour chaque ligne :

If Worksheets("Vérification").Range("D33").Value Like "*=*" Or Worksheets("Vérification").Range("D33").Value Like "*ÿ*" Or Worksheets("Vérification").Range("D33").Value Like "*€*" Or Worksheets("Vérification").Range("D33").Value Like "**" Or 
MsgBox ("Attention une sonde rencontre un problème !")
End If

Mais ce n'est pas très pratique si je veux faire des changements (j'ai environ 30 lignes avec des valeurs), et j'obtiens un message d'erreur après une 10ène de ligne balayées.

J'ai donc essayé de tout mettre sur une ligne avec les caractères m'interessant à savoir : = / ÿ / mais encore une fois je n'ai pas réussi à le faire fonctionner :

 For Each cell In Range("D3:D62")
        If cell.Value Like "*=*" Or "*ÿ*" Or "*€*" Or "**" Then
        If InStr(UCase(Range("D3:D62").Value), "=", "ÿ", "€") > 0 Then

MsgBox ("Attention une sonde rencontre un problème !")
End If
Next

Dites-moi si je n'ai pas était clair, je suis à votre disposition pour plus de détails !

Cordialement,

Devery

Bonjour,

Je te propose une solution:

Sub test()
interdits = Array("=", "ÿ", "€")
For i = LBound(interdits, 1) To UBound(interdits, 1)
    If Not Range("d3", "d62").Find(interdits(i), lookat:=xlPart) Is Nothing Then
        MsgBox ("La colonne D possède des caractères interdits.")
        Exit For
    End If
Next i
End Sub

ça cherche si une de tes cellule contient un des caractères contenu dans le tableau "interdits", si il en trouve un, ça t'affiche le message

bonjour,

si tu reçois ces caractères c'est que probablement tu n'utilises pas le bon code de caractères pour lire le fichier. A ta place j'essaierais de solutionner ce problème.

pour ce qui est de la syntaxe correcte pour la code que tu as mis voir la solution proposée par Ausecour (que je salue !)

Bonjour h2so4

En effet, il faudrait trouver la raison pour laquelle ça lui renvoie ça, je connais surtout le problème de conversion d'un fichier codé en UTF-8 en fichier excel, qui génère plein de caractères spéciaux, mais les caractères qui sont là ne me sont pas familiers...

Bonjour every, Ausecour, h2so4,

une autre possibilité pour identifier la (les) sonde à problème,

Sub test2()
interdits = Array("=", "ÿ", "€")
For Each cell In Range("D3:D6")
 msg = "Attention la sonde  " & Cells(cell.Row, "C") & "  rencontre un problème !"
 For i = LBound(interdits) To UBound(interdits)
  If Not cell.Find(interdits(i), lookat:=xlPart) Is Nothing Then MsgBox msg
 Next
Next
End Sub

Merci pour vos réponses !

J'ai essayé ta macro, mais rien ne se passe. J'ai essayé de créer une nouvelle macro et de placer uniquement ce programme dedans pensant que ma macro pouvait interférer dessus, mais sans succès rien ne se passe, pas même un message d'erreur, bizarre !

Concernant les caractères, ils proviennent de fichiers txt d'une autre personne je ne peux donc pas les changer.

EDIT: Je vais essayer ta solution i20100.

Bonjour i20100

Pas mal non plus la solution, elle affiche un message à chaque fois qu'une cellule contient un des caractères interdits, je pensais que la personne ne voulait qu'un message, mais je crois que j'ai mal compris la demande, du coup ta solution s'approcherait plus de ce qui est souhaité

EDIT:

Pour Devery, bizarre qu'elle ne t'affiche rien... j'avais fait le test de mon côté en mettant un caractère non souhaité, et ça m'affichait bien un popup...

Ton programme s'effectuait sur la mauvaise page de mon classeur, je l'avais placé au mauvais endroit désolé du message plus haut, fausse alerte !

Par contre ausecour, ton programme affiche un message pour chaque ligne avec un mauvais nom dessus.

Si j'ai bien compris ton programme il faudrait que je modifie le For Each pour n'obtenir qu'un seul message, non ?

EDIT: Vraiment désolé pour toutes les confusions au cours de la dernière minute !

Je pensais avoir lancé le programme de ausecour mais c'était celui de i20100.

Désolé encore pour cela j'ai voulu faire trop vite car je fais autre chose en parallèle !

Merci énormément à vous pour votre aide et vos solutions !

Je vous souhaite une bonne fin de journée !

Cordialement,

Devery

Bonjour le fil,

Une autre proposition:.....sur la même base qu'Isabelle( ) et AuSecours( )

Sub essai()

Dim i  As Integer
Dim Msg As String

C = Array("=", "ÿ", "€", "%")

 For i = 3 To 62
  For j = LBound(C, 1) To UBound(C, 1)
   If Range("D" & i) Like "*" & C(j) & "*" Then
      Msg = Msg & "La sonde " & Range("C" & i).Value & " rencontre un problème" & Chr(10)
   End If
  Next j
 Next i
   MsgBox Msg
End Sub
16classeur1.xlsm (20.46 Ko)

Cordialement,

Ton programme s'effectuait sur la mauvaise page de mon classeur, je l'avais placé au mauvais endroit désolé du message plus haut, fausse alerte !

Par contre ausecour, ton programme affiche un message pour chaque ligne avec un mauvais nom dessus.

Si j'ai bien compris ton programme il faudrait que je modifie le For Each pour n'obtenir qu'un seul message, non ?

Ah super! par contre ce n'est pas moi qui aie proposé la solution avec le for each, mais i20100, si tu souhaites sortir dès que tu affiches une fois le message, il faut un poil modifier son programme:

Sub test2()
interdits = Array("=", "ÿ", "€")
For Each cell In Range("D3:D6")
 msg = "Attention la sonde  " & Cells(cell.Row, "C") & "  rencontre un problème !"
 For i = LBound(interdits) To UBound(interdits)
  If Not cell.Find(interdits(i), lookat:=xlPart) Is Nothing Then 
      MsgBox msg
      Exit Sub 'sort du programme
  End If
 Next
Next
End Sub

Encore merci à vous pour votre aide !

Je vais également voir pour ta solution xorsankukai merci à toi aussi !

Devery

Bonjour le fil,

Une autre proposition:.....sur la même base qu'Isabelle( ) et AuSecours( )

Sub essai()

Dim i  As Integer, dl As Integer
Dim Msg As String

 dl = Range("C" & Rows.Count).End(xlUp).Row

C = Array("*=*", "*ÿ*", "*€*")

 For i = 3 To 62
  For j = LBound(C, 1) To UBound(C, 1)
   If Range("D" & i) Like C(j) Then
      Msg = Msg & "La sonde " & Range("C" & i).Value & " rencontre un problème" & Chr(10)
   End If
  Next j
 Next i
   MsgBox Msg
End Sub

Classeur1.xlsm

Cordialement,

Salut à toi xorsankukai

Je me permets un petit commentaire sur le programme comme on est aussi là pour s'améliorer

Tu calcules dl mais ne l'utilises pas dans ton programme, à la place tu as mis For i = 3 to 62, et enfin, pour l'initialisation de ton tableau, mets plutôt les étoiles sur la ligne: If Range("D" & i) Like C(j) Then, parce que tu vas t'amuser à mettre les deux étoiles à chaque élément que tu voudras rajouter dans ton tableau

C'est tout ce que j'avais à dire, le code est propre sinon

Re,

Tu calcules dl mais ne l'utilises pas dans ton programme

Oups un oubli, tu noteras que je me suis servi de ton code pour améliorer le mien,

Je peine encore avec le Ubound/Lbound,

Merci pour ton conseil avisé, j'en prends note,

Amitiés,

Re

Je n'avais pas remarqué que tu avais amélioré ton code en utilisant le mien

Lbound et Ubound c'est vrai que c'est difficile à utiliser au début, mais après ça devient incontournable quand tu travailles avec des tableaux

De rien pour le conseil

Rechercher des sujets similaires à "affichage erreur presence caracteres speciaux"