Macro VBA avec InStr

Résolu
Pinzut77 Messages postés 21 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 17 juillet 2006 - 5 juil. 2006 à 18:01
Pinzut77 Messages postés 21 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 17 juillet 2006 - 6 juil. 2006 à 13:33
Bonjour,

Voila le code que j'ai mis ne veut pas me donner la position du caractere espace ... si je le met en dur direct dans la fonction cela fonctionne mais quand je vais chercher ce texte dans une cellule et la plus rien.
Si quelqu'un à une idée merci d'avance


Sub space()
    Dim iPos As Integer
    Dim copier As Strin
    Dim nom As String
  
   
    For compteur = 5 To 1239 Step 2
    nom = Range("C" & compteur)
    iPos = InStr(nom, " ")                      
   MsgBox iPos
   Next compteur
   
 End sub

la box me renvoi tjs zéro alors que le contenu de la cellule est bien présente
merci

21 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 juil. 2006 à 13:31
Re,

Alors pour les espaces Superflu il y a les fonction RTrim LTrim Et Trim

Voici l'exemple de la MSDN pour les 3 (bien que dans ton cas Trim Suffise)

Dim MyString, TrimString 
MyString =  "  <-Trim->  "    ' Initialise la chaîne.
TrimString =  LTrim (MyString)    ' TrimString  = "<-Trim->  ".TrimString   RTrim (MyString)    ' TrimString  <-Trim->".TrimString   LTrim (<gras>RTrim(MyString))    ' TrimString </gras> "<-Trim->".
' L'utilisation de la fonction Trim seule produit le même résultat.TrimString   Trim (MyString)    ' TrimString  "<-Trim->".

 

<small> Coloration syntaxique automatique [AFCK]</small>
       

Pour les espaces entre les mots je ne vois pas de maniere simple de le faire.

Voila et n'oublie LES   Réponse Acceptée


@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
3
Pinzut77 Messages postés 21 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 17 juillet 2006
6 juil. 2006 à 13:33
J'ai contourné le problème donc c'est pas grave ! Merci beaucoup à toi Juien et aux autres ^^
3
asecher Messages postés 262 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 27 avril 2007 1
6 juil. 2006 à 00:17
Fais-toi un msgbox de nom avant la recherche du iPos, car je ne suis pas s^r que Range te renvoie le contenue de la cellule....

Cordialement,

Alain 31
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
6 juil. 2006 à 04:13
Salut,

Je confirme ce que dit Alain :
nom = Range("C" & compteur) c'est pas bon
nom = Range("C" & compteur).Value c'est mieux !

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
galopin01 Messages postés 133 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 octobre 2011 1
6 juil. 2006 à 06:16
bonjour,
mais non, Value étant la propriété "par défaut" de Range, cette Sub marche très bien !
Je vois plutôt un problème de référence à "LaBonneFeuille"
nom = Worksheet("blabla").Range("C" & compteur) 
A+
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 juil. 2006 à 09:19
Salut,

C'est ta maniere d'utiliser Instr qui est mauvaise:

Instr s'utilise comme suit
iPos  Instr( [Start], [String1], [String2], [Compare As VbCompareMethod vbBinaryCompare])

Essaie alors
iPos = InStr(1, nom, " ")     

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
Pinzut77 Messages postés 21 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 17 juillet 2006
6 juil. 2006 à 09:39
Sub testspace()
   Dim nom As String
   Dim iPos As Integer
  
   For compteur = 5 To 11 Step 2
   nom = Range("C" & compteur)
   MsgBox nom
   iPos = InStr(1, nom, " ")
   MsgBox iPos
   Next compteur
End Sub

Voila le code de test... j'ai bien mes chaînes dans les messages box mais toujours rien dans le iPos
Galopino j'ai essayé de rajouter worksheet comme tu l'as mis mais il me dit que ma fonction est incorrecte.
Dur de débuter en VB ;-(
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 juil. 2006 à 09:44
Salut,

Cela m'etonne quand meme. la fonction Instr ne peux pas ne pas marcher

Lorsque tu fais Msgbox Nom est ce que Nom possède bien un Espace...

Sinon je peut te proposer de m'envoyer ton fichier excel à Espylon9@Gmail.com

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 juil. 2006 à 09:46
ATTENTION C est EPSYLON9 et pas ESPYLON9

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
Pinzut77 Messages postés 21 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 17 juillet 2006
6 juil. 2006 à 09:52
Je pense avoir mis le doigt sur le problème... Si je reprend le texte de ma case et que je refais les espace (backspace + space) ma macro fonctionne très bien... Mais bon j'ai 1238 cases (sur une colonne) à traiter je vais peut etre pas m'amuser à refaire tout leur espace...
Le contenu de ces cellules ont été faite à partir de copier / coller me semble t'il ... Quelqu'un aurait'il une solution ?
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 juil. 2006 à 09:59
J vois pas le souci car par exemple pour Mme Odier ca affiche bien 4 donc Instr fonctionne

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 juil. 2006 à 10:03
Re;

OUps  j avais pas encore lu ton MP....

Mais c'est vrai en plus ca ne marche pas alors la j'y crois pas....

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
Pinzut77 Messages postés 21 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 17 juillet 2006
6 juil. 2006 à 10:04
Oui sa affiche bien 4 car j'ai refais les espaces à la main ... les espaces que l'on voit ne sont pas considérés comme des espaces apparemment donc il faut tous les refaire et là sa fonctionne
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 juil. 2006 à 10:15
Re,

Non j'ai trouve.

En fait lorsque l'on fait le Instr(1, nom, " ") ceci est équivalant à  Instr(1, nom, Chr(32))

(32 code ascii de l'espace)
Donc j'ai teste sur les valeurs ou iPos = 0 et en fait c'est que l'espace dans ces chaines de caractères possède le code ascii 160...

Je ne sais pas pourquoi.

Donc si tu remplace Instr(1, nom, " ") Par Instr(1, nom, Chr(160))  ca marche normalement pour les chaine que tu n'as pas traiter a la main.

Donc essaie de doubler tes test

MsgBox nom 
iPos =  InStr (1, nom, Chr(32)) 
MsgBox iPos 
If iPos  = 0 Then 
      iPos = InStr(1, nom, Chr(160)) 
      MsgBox iPos 
end if 
 

<small> Coloration syntaxique automatique [AFCK]</small>
       

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
galopin01 Messages postés 133 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 octobre 2011 1
6 juil. 2006 à 10:17
bonjour,
Pour moi ça marche parfaitement, la fonction marche avec ou sans "1" dans Instr
Je pense que ce que tu prends comme espace est en fait un caractère "invisible" : 160 (ou un autre...)
On trouve souvent ça dans les importations d'automate ou de fichier .csv

Essaie d'identifier la valeur Asc du caractère que tu prends pour un espace avec ce test : Tu verras qu'il n'y a pas de 32

Sub test()
nom = Range("C5")
For k = 1 To Len(nom)
MsgBox Asc(Mid(Range("C5"), k, 1))
Next
End Sub

Tu modifieras ensuite ta macro avec le chr trouvé :
   iPos = InStr(nom, Asc(160)) 'par exemple...
A+
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 juil. 2006 à 10:18
Salut,

J ai regarder sur ICI
en fait ce ne sont pas des Spaces mais des non-breaking space  (sais pas ce que c'est)
@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
Pinzut77 Messages postés 21 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 17 juillet 2006
6 juil. 2006 à 10:18
Je t'adore !! c'est impeccable ! Merci pour vos réponses super rapide !
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 juil. 2006 à 10:20
Pas de quoi,

Si tout marche et que tu estime que ton problème est résolu n'oublie d'appuyer sur réponse acceptée sue le ou les post qui ont pu t'aider.

Si tu l'a fait pendant l'écriture de ce post Desole

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>

/FONT>
0
Pinzut77 Messages postés 21 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 17 juillet 2006
6 juil. 2006 à 11:52
Encore un tout petit probleme... Avec tout ces espaces sa me fait une tonne de cas à gérer (nombre d'espace, type d'espace et nombre d'espace total...). Est il possible de remplacer les espaces par un seul et unique espace ? Une fonction excel fait peut etre ça ? La fonctioner chercher/remplacer marche t'elle avec un code ascii ? merci pour votre aide
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 juil. 2006 à 11:59
Salut

Nom = Replace(Nom, Chr(160), " ") ceci remplace les non-breaking space   par des space chr(32).

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
0
Rejoignez-nous