[excel]Replacer caractere

Résolu
DarkIndra Messages postés 21 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 9 juillet 2007 - 5 juil. 2007 à 14:30
DarkIndra Messages postés 21 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 9 juillet 2007 - 9 juil. 2007 à 08:24
Bonjour, il ne me semble pas avoir vu de post concernant mon soucis,
le voici, j'ai fait une macro pour trier un tableau, et elle fait bien son boulot, il me reste à la modifier pour que par exemple de :
<colgroup><col style=\"WIDTH: 82pt; mso-width-source: userset; mso-width-alt: 3986\" width=\"109\" /></colgroup>----
Jean Baptiste
On obtienne :
<colgroup><col style=\"WIDTH: 82pt; mso-width-source: userset; mso-width-alt: 3986\" width=\"109\" /></colgroup>----
Jean-Baptiste

en gros, a chaque fois, dans chaque cellule occupée, il faudrait que si il y a un nom ou prénom "composé" rajouter un tiret entre les 2 noms, j'ai testé ceci, mais ca ne fonctionne pas :(

        Message = ActiveCell.Value
        MTexte = Replace(Message, " ", "-")
        ActiveCell.Value = (MTexte)

Merci d'avoir lu, et merci de m'apporter eventuellement une réponse

21 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 juil. 2007 à 15:09
Pardon (mais tu vas le mériter...)
Si au moins tu avais ouvert ton aide en ligne, hein...
Tu aurais depuis longtemps prévi le cas d'absence d'espace !

allez (faut tout dire et tout faire... faisons)...
Private Sub Command1_Click()
  toto = "aaaabb"
  pos = InStr(toto, " ")
  If pos > 0 Then
    Mid(toto, pos, 1) = "-"
  End If
  MsgBox toto
End Sub


 
3
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
5 juil. 2007 à 14:43
Salut,

C'est bizarre que cela ne fonctionne pas, je viens de faire le teste sous VB6 et cela fonctionne...(je parle du replace)

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
5 juil. 2007 à 14:45
Bonjour,
Pour l'avoir testé, il n'y a pas de problème ... le code s'exécute correctement
Gaffe quand même à "Message" peut être un mot réservé !!!
As tu un message d'erreur ... Dis en un peu plus
JML
 Partageons notre savoir et nos acquis
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 juil. 2007 à 14:51
C'est quand même fort (moi, je ne connais rien à VBA)...

Je sais cependant :
1) que la fonction Replace n'est disponible dans VBA que depuis Office 2000
2) qu'il existe sur ce forum de quoi s'y substituer
Ici :
http://www.vbfrance.com/codes/FONCTION-REPLACE-POUR-OFFICE-97_41145.aspx
3) pour faire cette Minuscule chose, je ne me servirais même pas de ce substitut, me contenantant tout bêtement de Instr et de Mid !!!
5voir dans l'aide en ligne).
0

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

Posez votre question
DarkIndra Messages postés 21 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 9 juillet 2007
5 juil. 2007 à 14:51
je n'ais aucun message d'erreur, peut etre que je l'a met au mauvais endroit
voici la macro plus complete

Dim Code
Dim Cpt
Dim Message As String, MTexte As String
Cpt = 0
While Not Cpt = 5
    Range("A1").Activate
    For compteur = 1 To 2000
        If ActiveCell.Value = "BADGE" Then
            Rows(compteur).Delete
        End If
        If IsEmpty(ActiveCell) Then
            Rows(compteur).Delete
        End If
        Message = ActiveCell.Value
        MTexte = Replace(Message, "a", "W")
        ActiveCell.Value = (MTexte)
        Selection.Offset(1, 0).Activate
    Next
    Range("A1").Activate
    Cpt = Cpt + 1
Wend
Columns(5).Delete
Columns(5).Delete
Columns(5).Delete

Donc en faite je l'exécute 5fois car en une fois elle ne fait pas bien le truc, me demander pas pourquoi ^^ je ne comprend pas moi meme mais au bout de 5 fois, elle me supprime toutes mes lignes qui ne vont pas. Je pense que le code n'est pas trop dur a comprendre, si vous avez des questions n'hésitez pas
0
DarkIndra Messages postés 21 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 9 juillet 2007
5 juil. 2007 à 14:54
pour te répondre  jmfmarques je ne peux pas me servir de mid car je ne peux pas savoir précisement l'endroit où il y a le blanc dans un nom ;)
0
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
5 juil. 2007 à 14:56
Salut,

Il doit bien y avoir dans VBA une fonction du style : Find, pour rechercher ton blanc ?

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 juil. 2007 à 14:57
Ah oui ?
Et de ton aide en ligne, non plus, hein ? Tu ne veux pas te servir !
Tu veux tout simplement te servir de code tout fait, hein ?
Amen ..

Voilà :

Private Sub Command1_Click()
  toto = "jean machin"
  pos = InStr(toto, " ")
  Mid(toto, pos, 1) = "-"
  MsgBox toto
End Sub
0
DarkIndra Messages postés 21 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 9 juillet 2007
5 juil. 2007 à 15:00
Pourquoi tu m'agresses? je ne t'ais rien reproché
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 juil. 2007 à 15:02
Il est clair (le reste n'était pas ta question) que j'ai répondu à la seule question posée à l'ouverture de ta discussion, à savoir :

Message = ActiveCell.Value
 MTexte = Replace(Message, " ", "-")
 ActiveCell.Value = (MTexte)

Je ne veux même pas lire ce qui vient après !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 juil. 2007 à 15:03
Je ne t'agresse pas , mais te reproche de n'avoir pas ouvert immédiatement ton aide en ligne sur Instr et Mid, comme je te le disais ...
0
DarkIndra Messages postés 21 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 9 juillet 2007
5 juil. 2007 à 15:04
       Tmp = ActiveCell.Value
        pos = InStr(Tmp, " ")
        Mid(Tmp, pos, 1) = "-"
        ActiveCell.Value = (Tmp)

J'ai une erreur 5 argument  ou appel de procedure incorrect , il ne faut pas faire comme cela?
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 juil. 2007 à 15:19
Et pour te forcer un peu la main à ouvrir ton aide en ligne


Voilà une autre façon (je pourrais en inventer quelques autres encore, ma foi...)


Private Sub Command1_Click()
  toto = "aaa abb"
  pos = IIf(InStr(toto, " "), InStr(toto, " "), 1)
  toto = IIf(pos <= 1, toto, Mid(toto, 1, pos - 1) & "-" & Mid(toto, pos + 1))
  MsgBox toto
End Sub

Apprendre, c'est d'abord étudier...


 
0
DarkIndra Messages postés 21 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 9 juillet 2007
5 juil. 2007 à 15:21
Bon euh je ne sais pas ce qu'est l'aide en ligne en faite, je me sert tres tres rarement d'excel, pour ainsi dire jamais, mais la je dois faire une macro pour mon projet, j'ai fait ceci
        Tmp = ActiveCell.Value
        pos = InStr(Tmp, " ")
        If pos > 0 Then
           Mid(Tmp, pos, 1) = "-"
        End If
        ActiveCell.Value = (Tmp)

ca ne plante pas, mais je n'ais pas mes "-" entre les noms, prénoms qui sont "composés" :(

si tu me dis où je peux acceder a l'aide en ligne, je regarderais dessus
0
DarkIndra Messages postés 21 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 9 juillet 2007
5 juil. 2007 à 15:26
j'ai déclaré Tmp As String, est ce que ActiveCell.value est la bonne "méthode" pour récupérer la chaine de caractere "jean roger" (par exemple) ?
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
5 juil. 2007 à 15:27
Option Explicite
Sub ReplaceSpaceByDraw
Dim Mess
On Error Resume Next     ' permet de continuer l'exécution du programme en cas d'erreur
   Mess = ActiveCell.Value
   Mess = Replace(Mess, " ", "-")
' A ce niveau tu peux tester la valeur de Err qui normalement doit être à 0 ou 5

   Err.clear
   ActiveCell.Value = Mess
End Sub

JML
 Partageons notre savoir et nos acquis
0
DarkIndra Messages postés 21 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 9 juillet 2007
5 juil. 2007 à 15:34
bonjour JM247L quand je fais avec le replace ou avec l'autre méthode, il ne me modifie pas ma cellule, mais il ne plante pas
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 juil. 2007 à 15:38
Fais donc (réflexe simple) un msgbox du contenu de la cellule avant traitement qui "ne marcehe pas"
et viens nous dire le résultat affiché ... (en nous confirmant que c'est bien le contenu attendu, bien sur...)
0
DarkIndra Messages postés 21 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 9 juillet 2007
5 juil. 2007 à 15:45
Merci, ralala, excusez moi je suis très fatigué, je boss sur une interface graphique en C en meme temps, je l'ais quasiment fini d'ailleur. Et cette petite erreur toute bête ne m'est pas venu a l'idée, merci jmf de m'avoir fait afficher la cellule. Ta première méthode fonctionne jmf, je vous explique ce que je n'avais pas pensé. ActiveCell vite en faite toute une colonne de code  du style 4400 donc forcément jamais mes noms et prénoms  j'ai juste fait un offset(0,1) pour nom et (0,2) pour prénom et cela fonctionne à merveille. Merci à vous de m'avoir aidé, et merci jmf pour m'avoir fait voir cette erreur petite mais si génante
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
7 juil. 2007 à 19:07
Pour éviter de repasser 5 fois (et ce pourrait être plus...), commence ta boucle par la fin et remonte. Comme ça lorsque tu supprimes une ligne, tu ne rateras pas la suivante (ou précédente, selon)

MPi
0
Rejoignez-nous