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

Résolu
McFly -  
tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   -
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
Configuration: Windows XP
Firefox 3.5.6

4 réponses

  1. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
    1. McFly
       
      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
  2. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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
  3. McFly
     
    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
  4. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    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