Macro VBA avec InStr [Résolu]

Pinzut77 21 Messages postés mercredi 5 juillet 2006Date d'inscription 17 juillet 2006 Dernière intervention - 5 juil. 2006 à 18:01 - Dernière réponse : Pinzut77 21 Messages postés mercredi 5 juillet 2006Date d'inscription 17 juillet 2006 Dernière intervention
- 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
Afficher la suite 

21 réponses

Répondre au sujet
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 juil. 2006 à 13:31
+3
Utile
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>
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jrivet
Pinzut77 21 Messages postés mercredi 5 juillet 2006Date d'inscription 17 juillet 2006 Dernière intervention - 6 juil. 2006 à 13:33
+3
Utile
J'ai contourné le problème donc c'est pas grave ! Merci beaucoup à toi Juien et aux autres ^^
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Pinzut77
asecher 262 Messages postés lundi 20 octobre 2003Date d'inscription 27 avril 2007 Dernière intervention - 6 juil. 2006 à 00:17
0
Utile
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
Commenter la réponse de asecher
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 6 juil. 2006 à 04:13
0
Utile
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 !
Commenter la réponse de mortalino
galopin01 133 Messages postés lundi 4 octobre 2004Date d'inscription 14 octobre 2011 Dernière intervention - 6 juil. 2006 à 06:16
0
Utile
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+
Commenter la réponse de galopin01
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 juil. 2006 à 09:19
0
Utile
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>
Commenter la réponse de jrivet
Pinzut77 21 Messages postés mercredi 5 juillet 2006Date d'inscription 17 juillet 2006 Dernière intervention - 6 juil. 2006 à 09:39
0
Utile
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 ;-(
Commenter la réponse de Pinzut77
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 juil. 2006 à 09:44
0
Utile
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>
Commenter la réponse de jrivet
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 juil. 2006 à 09:46
0
Utile
ATTENTION C est EPSYLON9 et pas ESPYLON9

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée, Règlement/FONT>
Commenter la réponse de jrivet
Pinzut77 21 Messages postés mercredi 5 juillet 2006Date d'inscription 17 juillet 2006 Dernière intervention - 6 juil. 2006 à 09:52
0
Utile
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 ?
Commenter la réponse de Pinzut77
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 juil. 2006 à 09:59
0
Utile
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>
Commenter la réponse de jrivet
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 juil. 2006 à 10:03
0
Utile
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>
Commenter la réponse de jrivet
Pinzut77 21 Messages postés mercredi 5 juillet 2006Date d'inscription 17 juillet 2006 Dernière intervention - 6 juil. 2006 à 10:04
0
Utile
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
Commenter la réponse de Pinzut77
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 juil. 2006 à 10:15
0
Utile
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>
Commenter la réponse de jrivet
galopin01 133 Messages postés lundi 4 octobre 2004Date d'inscription 14 octobre 2011 Dernière intervention - 6 juil. 2006 à 10:17
0
Utile
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+
Commenter la réponse de galopin01
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 juil. 2006 à 10:18
0
Utile
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>
Commenter la réponse de jrivet
Pinzut77 21 Messages postés mercredi 5 juillet 2006Date d'inscription 17 juillet 2006 Dernière intervention - 6 juil. 2006 à 10:18
0
Utile
Je t'adore !! c'est impeccable ! Merci pour vos réponses super rapide !
Commenter la réponse de Pinzut77
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 juil. 2006 à 10:20
0
Utile
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>
Commenter la réponse de jrivet
Pinzut77 21 Messages postés mercredi 5 juillet 2006Date d'inscription 17 juillet 2006 Dernière intervention - 6 juil. 2006 à 11:52
0
Utile
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
Commenter la réponse de Pinzut77
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 juil. 2006 à 11:59
0
Utile
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>
Commenter la réponse de jrivet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

macro VBA avec InStr - page 2