Vba excel : modifier un caractère dans une formule

cs_emlyd2207 Messages postés 12 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 24 novembre 2011 - 9 sept. 2011 à 12:12
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 12 sept. 2011 à 18:33
bonjour,
je viens de créer la macro ci-dessous mais la fonction Replace tombe en erreur et je ne vois pas pourquoi.
Merci pour votre aide.

Sub chgmt_colonne()

Dim Vcolonne As String
Dim Vformule As String

Sheets("7399").Activate

Vformule = Range("C5").Formula

Vcolonne = Mid(Vformule, 19, 2)

Range("G5").Value = Vcolonne

Vformule = Replace(Vformule, Vcolonne, "!C")

Range("C5").Formula = Vformule

End Sub


Emlyd

35 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 sept. 2011 à 12:28
Bonjour,

1. Quelle est le message d'erreur renvoyé ?
2. Que contient Vformule et Vcolonne ? (utilises le débugage, ou fait "debug.print Vformule & " " & Vcolonne" avant la ligne Replace pour voir dans la fenêtre d'exécution leurs valeurs)

Amicalement,
Us.
0
cs_emlyd2207 Messages postés 12 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 24 novembre 2011
9 sept. 2011 à 13:01
le message est : erreur de compilation sub ou function non definie

Sinon, Vformule et Vcolonne marchent :

Vformule = +'Spoilage après'!K22+'Spoilage après'!K24
Dans cette formule, mon objectif est que la macro change la colonne de référence. Je pensais donc faire un replace pour changer tous les !K par !c pour prendre la colonne C de la feuille Spoilage Après au lieu de la colonne K.

Vcolonne = !K

J'ai vérifié que Vcolonne marche puisque Range("G5").Value = Vcolonne inscrit bien !K dans la cellule. C'est la fonction replace qui pose apparemment problème.

Emlyd
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 sept. 2011 à 13:15
Re,

Vformule = +'Spoilage après'!K22+'Spoilage après'!K24
Je ne comprend pas ce que tu veux dire. J'ai pas de boule de cristal sur moi...

Tu dis :
Dans cette formule, mon objectif est que la macro change la colonne de référence. Je pensais donc faire un replace pour changer tous les !K par !c pour prendre la colonne C de la feuille Spoilage Après au lieu de la colonne K.


donc, comme les colonnes semblent toujours les mêmes, utilises directement Replace. Ainsi :

Sub chgmt_colonne()
Range("C5").Formula = Replace(Range("C5").Formula, "!K", "!C")
End Sub


Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 sept. 2011 à 13:18
Euh, par contre le message d'erreur :
"le message est : erreur de compilation sub ou function non definie "

ne semble pas correspondre à un problème sur ton code... Sur quelle ligne s'arrête VBA ? Sur Replace ?

Amicalement,
Us.
0

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

Posez votre question
cs_emlyd2207 Messages postés 12 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 24 novembre 2011
9 sept. 2011 à 13:35
le message d'erreur s'arrete sur Replace (c'est surligné en bleu) et aussi au niveau du titre de la macro qui lui est surligné en jaune avec une flèche jaune devant Sub chgmt_colonne()

Concernant la fonction Replace, j'ai essayé le code que tu m'as proposé mais ça bug. De plus, même si cela marchait, ça ne répond pas tout à fait à ce que je veux, car en fait, la cellule C5 doit pouvoir prendre plusieurs références de colonnes différentes. Donc, la macro doit marcher quelle que soit la référence de la colonne au moment où je lance la macro. C'est pour cela que je pensais avoir besoin d'une variable qui dans un premier temps recherche la colonne référencée dans la formule, la mémorise et ensuite remplace cette variable par la colonne que je veux effectivement aller chercher. Je sais, c'est pas super clair, mais le bilan de tous cela est que dès que je mets la fonction replace dans la macro, ça bug...

Emlyd
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 sept. 2011 à 13:53
Re,

Je peux simuler ton erreur seulement si je fais une faute dans "Replace". Par exemple, j'écris "Replae".
En clair, ton excel ne semble pas connaître Replace ? Curieux...

Quelle est ta version d'excel ?

Peux-tu faire ce simple test : mets ce code dans le module :

Sub essai()
MsgBox Replace("Un exemple", "ex", "EX")
End Sub


Mets le curseur à l'intérieur de la SUB. PAr exemple, devant Msgbox
Lance avec F5

Et normalement cela fonctionner... C'est juste pour savoir si à vide au moins ça marche...

Amicalement,
Us.
0
NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
9 sept. 2011 à 14:07
Bonjour,

Parfois VBA délire un peu, ça m'est déjà arrivé (sur une autre erreur).
Recréer un fichier Excel "neuf" ou retirer toutes les macros, puis les remettre, peut aussi parfois résoudre les problèmes.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_emlyd2207 Messages postés 12 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 24 novembre 2011
9 sept. 2011 à 14:09
à vide ça ne marche pas.
Maintenant, c'est le moment où on rigole : je travaille sur Excel...97 !
Toute ma société travaille sur Office97 et n'a pas de licence pour des versions + récentes. Je pense donc que c'est Replace qui n'est pas reconnu. Peux-tu me conseiller d'autres fonctions à utiliser ?
Merci

Emlyd
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 sept. 2011 à 14:11
Mais si il y a Excel 97 , alors c'est logique !

Replace n'était pas inclus dans cette version. Il y a quelques sur CS qui permet de la refaire à l'identique pour cette version.

C'est la raison de mon test...

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 sept. 2011 à 14:11
Ah, j'avais pas vu ton post... bah, je viens d'y répondre...

Amicalement,
Us.
0
cs_emlyd2207 Messages postés 12 Date d'inscription mercredi 21 décembre 2005 Statut Membre Dernière intervention 24 novembre 2011
9 sept. 2011 à 14:16
tu écris :
"Il y a quelques sur CS qui permet de la refaire à l'identique pour cette version. "
Je ne comprends pas : "quelques sur CS", c'est quoi CS ?

Emlyd
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
9 sept. 2011 à 14:16
Bonjoyur,

Bien évidemment (Office 97 !) .
Bon ===>> tu trouveras sur ce site (ici même) de quoi la remplacer


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
9 sept. 2011 à 14:19
Et ENCORE MIEUX, toujours ici incluant l'argument Compare

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 sept. 2011 à 14:21
Euh, oui.... j'ai sauté un mot là

Je reprends...

"Il y a quelques CODES sur CS qui permet de la refaire à l'identique pour cette version. "
CS = Code Source, donc ce site


J'ai fais une petite recherche, parmi plusieurs codes, probablement celui de Renfield (dans les commentaires) devrait être assez bien, et devrait suffire pour te sortir d'affaire :
["Il y a quelques sur CS qui permet de la refaire à l'identique pour cette version. " "Il y a quelques sur CS qui permet de la refaire à l'identique pour cette version. " ]

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 sept. 2011 à 14:22
ucfoutu, attends un peu...

La fusée celui-là !

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 sept. 2011 à 14:26
Bah, décidément...

Le lien : http://www.vbfrance.com/codes/MINI-FONCTION-REPLACE-POUR-VB5_24559.aspx

A+
Amicalement,
Us.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
10 sept. 2011 à 12:40
Ouais...
Mais voilà ce que j'utilise, lorsque je développe sous VB5 (et qui fonctionnera sous VBA 97) :
Public Function Replace(texte As String, a_remplacer As String, remplacer_par As String, Optional startpos, Optional combien, Optional Compare As VbCompareMethod) As String
  Dim pos As Integer, nb As Integer
  If IsMissing(startpos) Then startpos = 1
  If IsMissing(combien) Then combien = 0
  Do While InStr(startpos, texte, a_remplacer, Compare)
     nb = nb + 1
     If combien > 0 And nb > combien Then MsgBox "ouille": Exit Do
     pos = InStr(startpos, texte, a_remplacer, Compare)
     texte = Mid(texte, 1, pos - 1) & remplacer_par & Mid(texte, pos + Len(a_remplacer))
     startpos = pos + Len(a_remplacer) + 1
  Loop
  Replace = texte
End Function

Fait tout ce que fait Replace depuis 2000
A mettre dans un module standard.
Reste que si tu distribues ton projet sans savoir sur quelle machine, avec quelle version d'office, etc ..., il t'appartiendra de mettre dans ton code des expressions conditionnelles.




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
10 sept. 2011 à 12:42
Ah oui : ===>> enlève Msgbox "ouille", hein !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
10 sept. 2011 à 12:57
Bonjour,

Reste que si tu distribues ton projet sans savoir sur quelle machine, avec quelle version d'office, etc ..., il t'appartiendra de mettre dans ton code des expressions conditionnelles.


Il me semble que si tu as une fonction personnalisée du même nom qu'une présente, c'est la fonction personnalisée qui sera prise en compte... donc pas de condition à mettre. Sauf si je dis une connerie, à vérifiée de toute façon...

Au pire, nomme la fonction ReplacePerso, et cela évitera d'alourdir le code VBA pour vérifier la version d'Excel.

Amicalement,
Us.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 231
10 sept. 2011 à 13:03
Salut, us_30,
tu ne dis pas de "connerie", mais VBA a ceci d'étrange qu'il arrive qu'il garde en mémoire la dernière fonction utilisée, quel que soit le projet ensuite ouvert n, ce qui peut alors devenir fort gênant.
Forcer à utiliser la fonction "ersatz" quelle que soit la version est par ailleurs assez pénalisant (moins rapide que la fonction native, lorsqu'elle existe), surtout si la chaîne à traiter est longue.
Je dis bien sous VBA


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0