Manager les caracteres speciaux

Bonjour,

J'ai un caractere dans une cellule Excel, que je recupere dans la variable "char1".

J'ai un texte dans une autre cellule que je recupere dans la variable "text".

J'ai besoin de recuperer la position de la premiere occurence du caractere dans le texte.

Pour cela rien de plus simple:

pos1 = InStr(text, char1)

Mais cela ne marche pas pour les caracteres speciaux tels que:

  • les quotes,
  • les chiffres (de 0 a 9)
  • le caractere '&' (d'ailleurs au passage je ne sais pas comment il s'appelle en francais ce charactere...)
  • ...

Pouvez-vous m'indiquer la marche a suivre pour ces caracteres?

Merci

Salut Phila,

une piste à adapter à ta situation.

'
sData = Chr(Asc(Target))
MsgBox InStr(Cells(1, 1), sData)
'

A+

curulis57 a écrit :

Salut Phila,

une piste à adapter à ta situation.

'
sData = Chr(Asc(Target))
MsgBox InStr(Cells(1, 1), sData)
'

A+

Merci pour ton retour, je l'ai adapte, mais ca ne fonctionne toujours pas pour ces carcateres speciaux

    char1 = Chr(Asc(Cells(1,1)))
pos1 = InStr(text, char1)

Bonjour,

Il vaut mieux éviter de nommer des variables selon des noms d'objets, de propriétés ou de fonctions VBA

Ainsi "mot" ou "chaine" remplacerai avantageusement "text".

les caractères numériques se traitent comme les caractères alpha (avec des "")

pos = Instr("Galopin01","1") 'renvoie 9

pour détecter le caractère esperluette ("&") c'est pareil...

pos = Instr("Galo&in01","&") 'renvoie 5

pour les caractères vraiment spéciaux comme " ou ' on utilise la table des caractère ASCII

" = Chr(34)

si la cellule A1 contient dsqfqsdf"dsfsd

cette macro renvoie 9

Sub test()
mot = [A1]
MsgBox InStr(mot, Chr(34))
End Sub

A+

Oui, forcément!

sData = Chr(Asc(Target))

sData = le caractère que tu recherches et Target = la cellule où tu écris le caractère recherché.

iPos = InStr(Cells(1, 1), sData)

où Cells(1, 1) est ta cellule-cible (je ne sais pas où elle se trouve, moi, hein!) dans laquelle tu dois recherche la position (iPos) de ton caractère.

Ça va aller!

A+

Bonjour,

Une piste :

Sub Test()

Dim text As String

'Texte dans la cellule A1 :

'Ceci est un "test" de positionnement de caractère ! Rechercher une esperluette & et une apostrophe' puis un premier chiffre 9 et un second 0

text = Range("A1").Value

'position du 1er guillemet

MsgBox InStr(text, """") '13

'position de l'esperluette

MsgBox InStr(text, "&") '80

'position de l'apostrophe

MsgBox InStr(text, "'") '99

'position du chiffre 9

MsgBox InStr(text, 9) '125

'position du chiffre 0

MsgBox InStr(text, 0) '140

End Sub


Oups oubli balise CODE !

Sub Test()

Dim text As String

'Texte dans la cellule A1 :
'Ceci est un "test" de positionnement de caractère ! Rechercher une esperluette & et une apostrophe' puis un premier chiffre 9 et un second 0

text = Range("A1").Value

'position du 1er guillemet
MsgBox InStr(text, """") '13
'position de l'esperluette
MsgBox InStr(text, "&") '80
'position de l'apostrophe
MsgBox InStr(text, "'") '99
'position du chiffre 9
MsgBox InStr(text, 9) '125
'position du chiffre 0
MsgBox InStr(text, 0) '140

End Sub

Merci pour ces retours.!

Au fait au vu des reponses, je crois que je n'ai pas ete assez clair.

Mettons que dans la cellule (1,1) j'ai mon caractere a rechercher

Mettons que dans cellule (1,2) j'ai mon texte.

Je veux indiquer sur la Cells(1,3) la position du caracatere dans le texte, donc je fais ca:

char1 = Cells(1,1)
mot = Cells(1,2)
Char(1,3) = Instr(char1, mot)

Ceci fonctionne excepte pour les caracteres speciaux que j'ai evoque.

Mais je ne sais pas a priori ce qui se trouve dans la cellule (1,1), ca peut etre une esperluette (merci pour le terme ) ou un autre caractere special, ou un caractere normal, donc je ne peux pas faire quelque chose comme ca:

InStr(text, "&")

J'ai essaye ca:

char1 = Asc(Cells(1,1))
mot = Cells(1,2)
Char(1,3) = Instr(chr(char1), mot)

Mais ca ne marche pas non plus pour les caracteres speciaux

Salut Phila,

Bonjour l'équipe,

char1 = Asc(Cells(1,1))
mot = Cells(1,2)
Char(1,3) = Instr(chr(char1), mot)

tu n'étais pas loin...

char1 = Asc(Cells(1,1))
mot = Cells(1,2)
Cells(1,3) = Instr(mot, chr(char1))

A+

curulis57 a écrit :

Salut Phila,

Bonjour l'équipe,

char1 = Asc(Cells(1,1))
mot = Cells(1,2)
Char(1,3) = Instr(chr(char1), mot)

tu n'étais pas loin...

char1 = Asc(Cells(1,1))
mot = Cells(1,2)
Cells(1,3) = Instr(mot, chr(char1))

A+

Pardon effectivement j'ai pas fait un copie colle de mon programme, et j'ai fait des erreurs de recopie.

Ce que j'ai fait est bien ceci:

char1 = Asc(Cells(1,1))
mot = Cells(1,2)
Cells(1,3) = Instr(mot, chr(char1))

Mais ca ne marche pas plus

Ça ne marche pas n'est pas une réponse admise : Qui avait-il dans les 2 cellules ? Que se passe-t-il ?

Tu as le droit de rejouer :

sh1

Rira bien celui qui rira le dernier!

Private Sub Worksheet_Change(ByVal Target As Range)
'
Application.EnableEvents = False
'
If Not Intersect(Target, Range("A1")) Is Nothing Then
    char1 = Asc(Cells(1, 1))
    mot = Cells(1, 2)
    Cells(1, 3) = InStr(mot, Chr(char1))
End If
'
Application.EnableEvents = True
'
End Sub

A+

galopin01 a écrit :

Ça ne marche pas n'est pas une réponse admise : Qui avait-il dans les 2 cellules ? Que se passe-t-il ?

Tu as le droit de rejouer :

Lol,

c'est ce que j'expliquais sur mon message precedent:

Mettons que dans la cellule (1,1) j'ai mon caractere a rechercher

Mettons que dans cellule (1,2) j'ai mon texte.

Ben chez moi ça marche !

Je ne comprend pas où est le problème ???

Voici un classeur avec une fonction perso et la fonction Cherche() d'Excel. L'apostrophe doit être doublée dans la cellule sinon, pour le reste ça fonctionne très bien !

Un autre petit classeur joint pour s'éclaircir les idées ?

16phila.xlsm (16.79 Ko)

Salut l'équipe,

perso, j'ai assez joué!

Bon amusement!

A+

Je re-poste mon classeur avec le texte de galopin01, il y a juste une erreur avec la fonction Cherche d'Excel sur le caractère étoile (*) et on voit bien, que InStr() retourne bien la bonne position sans l'utilisation d'artifice comme Chr() ou autre !

Theze a écrit :

sans l'utilisation d'artifice comme Chr() ou autre Asc() !

Nous sommes bien d'accord : Je les ai juste laissé parce qu'ils étaient vendus avec le Copier/Collé...

Cependant dans certains (autres cas) macros l'usage de Chr() peut s'avérer décisifs pour le maniements de string.

A+

Hello galopin01,

Cependant dans certains (autres cas) macros l'usage de Chr() peut s'avérer décisifs pour le maniements de string

Tout à fait d'accord avec toi mais dans ce cas, je voulais juste dire que ça fonctionne très bien sans utiliser d'autres fonctions et c'est pour cette raison que je ne comprend pas ou est le problème de Phila ?

Rechercher des sujets similaires à "manager caracteres speciaux"