Soucis création d'une macro VBA (débutant)

Résolu/Fermé
McFly - 23 déc. 2009 à 16:13
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 - 24 déc. 2009 à 09:52
Bonjour,

J'essaye de faire une macro qui remplace le contenu des cellules dans une plage de cellules données.
J'ai essayé ça:

Sub caisse_fusion()

Dim dercell
Dim cell, masel As range

Sheets("Nombre de contrat par caisse se").Activate

dercell = InputBox("numéro de la dernière cellule")

Set masel = range("A2", "A" & dercell)

For Each cell In masel

If cell.Value = 2 Then
cell.Value = "80-02-60"
Else
End
End If
Next cell

End Sub

Et ça marche (OH joie !!)

Mon soucis arrive quand je rajoute un else if cell.value = 3 (par exemple, ça aurait pu être 4 ou 50)

Là, bizarrement, vba me dit: erreur de compilation: Next sans For

et du coup, je comprends pas moi... parce que en fait c'est normal qu'il y ait pas de For ...

Sauriez vous m'aider ?

D'avance merci,

McFly
A voir également:

4 réponses

tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
23 déc. 2009 à 16:21
Bonjour
For Each cell In masel

If cell.Value = 2 Then
cell.Value = "80-02-60"
Else
End
End If
Next cell

=> il me smeble que tu as un end en trop !
For Each cell In masel

If cell.Value = 2 Then
cell.Value = "80-02-60"
Elseif cell.Value = 3 then 
ce que tu veux
End If
Next cell

NB : tu peux aussi utiliser select case pour tester les valeurs.....
0
Merci Tompols,

j'avais enlevé le end et ça ne fonctionait toujours pas... en fait c'est le

else
if

qui posait problème, je l'ai remplacé par ton elseif et ça fonctionne (je n'ai pas remis le end)

par contre, je n'ai pas très bien compris ce qu'est le case ?

en gros, en ce qui me concerne:

J'ai une extraction de base de donnée qui me sort un tableau avec des caisses 1,2,3 etc.

cependant, je souhaite que certaines aient le même numéro par exemple, la 1, la 2 et la 3 se sont groupées, je souhaite donc leur donner le nom "1-2-3"

Je suis donc parti dans l'idée de tester chaque cellule pour vérifier sa valeur et, si elle correspond à 1, 2 ou 3, je la remplace par "1-2-3"

tu veux dire qu'en utilisant case, ça serait plus rapide ?
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
23 déc. 2009 à 16:56
Re,
Bon jsuis pas sur niveau perf, mais en, tout cas "select case" parait plus "fait pour" ce que tu veux faire...regarde dans l'aide vba mais ça ferait un truc comme ça :
For Each c In masel
Select Case c.Value
Case 1, 2, 3
c.Value = "1-2-3"
End Select
Next c

un ptit lien en passant : https://www.ozgrid.com/VBA/select-case.htm
A+
0
Woot!!!


Merci beaucoup.
Même si ça n'est pas plus rapide, ça sera au moins plus clair dans la rédaction du code.

Je vais tester merci encore.

McFly
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
24 déc. 2009 à 09:52
Re,
Même si ça n'est pas plus rapide, ça sera au moins plus clair dans la rédaction du code. => toutafé :)
Je mets en "résolu"
bonne journée
0