inge68
Messages postés42Date d'inscriptionlundi 25 février 2008StatutMembreDernière intervention24 février 2011
-
19 mars 2008 à 16:38
inge68
Messages postés42Date d'inscriptionlundi 25 février 2008StatutMembreDernière intervention24 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
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
inge68
Messages postés42Date d'inscriptionlundi 25 février 2008StatutMembreDernière intervention24 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)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
inge68
Messages postés42Date d'inscriptionlundi 25 février 2008StatutMembreDernière intervention24 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
inge68
Messages postés42Date d'inscriptionlundi 25 février 2008StatutMembreDernière intervention24 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
inge68
Messages postés42Date d'inscriptionlundi 25 février 2008StatutMembreDernière intervention24 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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