Creer une formule

Résolu
inge68
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011
- 19 mars 2008 à 16:38
inge68
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011
- 25 mars 2008 à 08:41
Bonjour, debutant en VBA, Je voudrais creer une formule qui contient une autre formule et une boucle for.

ce que je veux faire est en gros :

(i est le numero de ligne sur un tableau excel)
(Message est un texte (CHAR))
(BX est la cellule de ligne X et de Colone A)

For i de 1 a 160
   if cellule(A, i)="message" then X=i+1
   exit boucle for
   else
   i=i+1
   end if
next

Cnum(Remplacer(BX;1;7;"")

exemple: 

               A                        B
1         
2
3         Message
4             ...                   valeur 50 
5                               

il doit m'envoyer : 50

Merci d'avance pour votre precieuse aide

13 réponses

bigfish_le vrai
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
12
19 mars 2008 à 17:09
Salut,

Dim i As Long, X As Long
For i = 1 to 160
   If Cells(i, 1).Value = "message" then
        X = i + 1
       MsgBox Range("B" & X).Value 'j'utilise la fonction range ici uniquement pour te montrer une autre methode mais cells(X,2).Value marche aussi
       Exit For
   End If
Next i

A+
3
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
19 mars 2008 à 22:30
Ou encore comme ceci ?

MsgBox Columns(1).Find("message").Offset(1, 1)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
21 mars 2008 à 10:15
Tu ne peux pas utiliser une procédure qui écrit dans une cellule qui contient une formule pour modifier ce que la procédure écrit... C'est soit l'une , soit l'autre.

Dans le cas de ton code, tu n'as pas besoin d'inscrire quoique ce soit dans les cellules de la colonne C. Il faudrait que tu modifies cette ligne, par contre
<strike>cells(Y,3).value = cells(X,2).value</strike>
cells(Y,3).value = Replace(cells(X,2).value, "valeur ", "")

Ça va éliminer le mot "valeur " , incluant l'espace qui suit.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
21 mars 2008 à 21:24
Voici le code du test que j'ai essayé et ça fonctionne bien (voir le résultat à la suite)

Sub MaSub()
    Dim i As Long, X As Long, Y As Long
    Y = 1
    For i = 1 To 160
       If Cells(i, 1).Value = "debut message" Then
            X = i + 1
            'tant que la cellule est differente de "fin message"
            Do While Cells(X, 1).Value <> "fin message"
                'mettre la valeur de la cellule (X,2) dans la cellule (Y,3)
                Cells(Y, 3).Value = Replace(Cells(X, 2).Value, "\par A", "")
                X = X + 1
                Y = Y + 1
            Loop
            Exit For
       End If
    Next i
End Sub

       A                  B                              C

<col style=\"width: 72pt;\" width=\"96\" /><col style=\"width: 60pt;\" span=\"2\" width=\"80\" />----
, , 35, ----
, , 36, ----
, , 37, ----
, , 38, ----
debut message, , 39, ----
, \par A35, 40, ----
, \par A36, , ----
, \par A37, , ----
, \par A38, , ----
, \par A39, , ----
, \par A40, , ----
fin message

Tu dois t'assurer de la casse et ortographe au niveau des mots "debut message" et "fin message".

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3

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

Posez votre question
inge68
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011

21 mars 2008 à 09:04
Merci bcp, ca marche nikel.

Mais maintenant que j'arrive à lire la cellule(X,2) comment je pourrais l'affecter à une fonction existante sur excel comme {Remplacer(BX;1;7;"")} qui remplace un certain nombre de caracteres( ici 7) par d'autres caracteres (ici " ") et puis mettre la valeur dans une autre cellule donnée (C1 puis C2 ... ).

exemple: cells(X,2).value=(valeur 50)

Remplacer(BX;1;7;"")  ==>  50     (BX est la cellule de ligne X et de colonne B)

Merci encore pour vos réponse
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
21 mars 2008 à 09:50
Il faudrait que tu sois un peu plus précis.
Si je comprends bien, tu as une cellule qui contient "valeur 50" et tu veux retrouver "50" comme résultat. Mais quelles sont toutes les possibilités ?

Est-ce que "valeur" est toujours inscrit ? Est-ce que ça peut être un autre mot ?
Est-ce que le nombre est toujours de 2 chiffres ?
Est-ce que tu veux créer une fonction personnalisée ou utiliser le code dans une macro ?

Tu peux commencer par regarder ton aide sur les mots suivants:
Instr, Mid, Right, Left
Éventuellement Split, Replace

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
inge68
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011

21 mars 2008 à 09:59
Sur VBA :

Dim i As Long, X As Long, Y As Long
Y=1
For i = 1 to 160
   If Cells(i, 1).Value = "debut message" then 
               X = i + 1
               Do While cells(X,1).value < > "fin message"  'tant que la cellule est differente de "fin message"
                cells(Y,3).value = cells(X,2).value 'mettre la valeur de la cellule (X,2) dans la cellule (Y,3)
               X=X+1
               Y=Y+1
               Loop
               Exit For
   End If
Next i

et puis sur excel :

Remplacer(C1;1;7;"")  et puis Remplacer(C2;1;7;"") ainsi de suite

exemple:

               A                        B                       C
1                                                                 50  
2                                                                 800
3    Debut Message                                     500
4             ...                   valeur 50                10
5             ...                   valeur 800
6             ...                   valeur 500
7             ...                   valeur 10
8      Fin Message     

j'ai essaié ce programme mais ca marche pas encore j'ai une erreur que j'arrive pas à trouver, aidez moi! Merci
0
inge68
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011

21 mars 2008 à 10:13
pour precision en fait valeur c'est juste un exemple pour vous expliquez ce que je veux mais sur mon vrai programme un truc genre "\par A25" sachant que le nombre 25 peux aller jusqu'a 3 chiffres mais la syntaxe reste toujours la meme(\par A30 , \par A35 ,  \par A235 , . . . . ) et les nombres sont aléatoires.

j'aurais bien aimé mettre tout ca dans une fonction personnalisée c'est plus pratique qu'avec une macro, c'est juste que je suis vraiment debutant en programmation sur excel et que je ne sais pas comment procedé pour le faire.
pour l'instant j'essaie de le faire avec une macro, voir l'exemple au dessus.

j'espere que j'etais clair MPi² et merci pour l'aide
0
inge68
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011

21 mars 2008 à 11:25
Tres bonne idée, sauf que quand je lance le programme il detecte une erreur sur la ligne cells(Y,3).value = Replace(cells(X,2).value, "valeur ", "") c'est un peu bizar, pourtant ca doit marcher
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
21 mars 2008 à 11:40
Suite à tes dernières explications, il faudrait que tu changes "valeur " par "\par A" étant donné que c'est cette valeur que tu veux éliminer.

S'il y a une erreur, tu devrais donner son numéro et sa description pour faciliter la recherche de solutions.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
inge68
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011

21 mars 2008 à 11:52
j'y ai pensé c'est pas ca le probleme, l'erreur qui m'affiche est :

erreur d'execution '1004'
erreur definit par l'application ou par l'obljet
et puis il me souligne la ligne en jaune

j'ai essaié plein de truc mais rien
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
21 mars 2008 à 21:27
Normalement, la macro dure une fraction de seconde.

J'ai refait le test en créant une erreur d'ortographe et ça prend plusieurs secondes et ça se termine avec une erreur 1004... à toi donc de vérifier tout ça...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
inge68
Messages postés
42
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
24 février 2011

25 mars 2008 à 08:41
Ca marche tres bien, t'avais raison c'etait une faute d'orthographe, je te remercie bcp.
a+
0