FORMULE VBA EXCEL

Résolu
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 - 27 sept. 2007 à 00:23
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 28 sept. 2007 à 02:53
Bonjour à tous,


Je voudrais savoir comment je pourrais faire pour que si par exemple dans <st1:personname productid="la colonne C" w:st="on">la colonne C</st1:personname> de ma feuille excel, la valeur est
entre 1001 et 1100, que dans <st1:personname productid="la colonne D" w:st="on">la
colonne D</st1:personname> de la même ligne, il me marque Fruits, et que si la
valeur de <st1:personname productid="la colonne C" w:st="on">la colonne C</st1:personname>
est entre 2001 et 2100, que dans <st1:personname productid="la colonne D" w:st="on">la colonne D de la même ligne</st1:personname>, il me marque Viandes, etc.


Je dirais que j'ai environ 6 sortes de valeur différentes, mais sur le même
principe.


Les données partent de <st1:personname productid="la cellule C" w:st="on">la cellule
C</st1:personname>5 en descendant, jamais pareille, mais il part toujours de
C5.



Merci beaucoup pour vôtre aide. 

10 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
27 sept. 2007 à 12:15
Sinon, pour ton erreur, c'est normal :

cell(C.Value, 4).Value = "viandes"
La bonne syntaxte, c'est Cells ... et C.value, ce n'est pas un numéro de ligne, mais le contenu de ta cellule, soit 1001, 2100, etc ...

Voici comment je ferai en VBA :

    Dim c As Range
   
    For Each c In ActiveSheet.Range("B6:C13")
        Select Case c.Value
            Case 2001 To 2100
                Cells(c.Row, 4).Value = "Viandes"
            Case 1001 To 1100
                Cells(c.Row, 4).Value = "Fruits"
            Case Else
                Cells(c.Row, 4).Value = ""
        End Select
    Next c

Molenn
3
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
27 sept. 2007 à 01:20
J'oubliais, tout ça ce fait quand je clic sur un bouton VBA excel.
0
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
27 sept. 2007 à 10:24
salut avec un :
for each C in activesheet.range ("C1:C999")
if C.value >= 2001 and C.value <=2100 then
cell(c.value,4).value = "viandes"
end if
if C.value >= 1001 and C.value <=1100 then
cell(c.value,4).value = "fruits"
end if
etc.....

Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
0
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
27 sept. 2007 à 10:24
j'oubli toujours le NEXT C à la fin de tes conditions ^^

Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
0

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

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
27 sept. 2007 à 11:28
Comme tu n'as que 6 possibilités, tu peux écrire une formule directement en D avec plusieurs SI. Soit tu passes par VBA pour l'écrire, soit tu l'écris directement ...

ex:
SI(ET(C5>1001;C5<=1100);"Fruits";SI(ET(C5>=2001;C5<=2100);"Viande";""))

MPi²
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
27 sept. 2007 à 11:51
Merci pour vos réponses,

Dans ce code:

For Each C In ActiveSheet.Range("C1:C999")
If C.Value >= 2001 And C.Value <= 2100 Then
cell(C.Value, 4).Value = "viandes"
Next C
End If
If C.Value >= 1001 And C.Value <= 1100 Then
cell(C.Value, 4).Value = "fruits"
Next C
End If

Il me met un erreur à : cell (C.Value, 4).Value = "viandes"

et je comprend pas pourquoi.

PS: MPI, je dois passer par VBA en ne mettant pas de formule dans les cellules de la colonne D pour éviter d'allourdidire le fichier.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
27 sept. 2007 à 12:01
On peut même le faire quasiment comme un Select Case en formule Excel : une seule formule et une table de correspondance.
Je m'explique, dans une feuille quelconque, tu crées ta table de correspondance de la façon suivante :


A1: 0            B1: Vide
A2: 1001      B2: Fruit
A3 : 1100     B3: Fruit
A4: 1101      B4: Vide
A5: 2001      B5: Viande
A6: 2100      B6: Viande
A7: 2101      B7: Vide
etc ...
Tu comprends le principe ? Tu marques dans ta table les deux bornes de chaque champ.
Tu nommes cette zone de nom : Menu Insertion\Nom\Définir : "Liste" par exemple


Ensuite, dans ta feuille, dans ta colonne D, tu vas mettre, pour la ligne 5 :
D5: = RECHERCHEV(C5;Liste;2;VRAI)
Plus qu'à copier cette formule sur toutes les lignes.


Avantage : Rien à changer, pas de code VBA à modifier quand tu veux rajouter une catégorie, juste deux lignes à insérer dans ta zone de nom (si tu ajoutes à la fin, penser à redéfinir la zone de nom). facile à maintenir, n'importe qui connaissant Excel peut le faire, pas besoin de connaitre le VBA. Mise à jour en temps réel, si tu modifies un paramètre, pas besoin de relancer une macro.


Molenn
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
27 sept. 2007 à 12:37
Merci beaucoup
0
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
27 sept. 2007 à 12:39
Bienvu molenn et autant pour moi ^^ j'étais pas sur mon poste et du coup j'ai fait cela de tête XD (mode boulet=on )

C'est vrai que le case et plus sympa que mon if  ;)

pour finir je préfére de loin la version VBA car elle évite les surprises de modif de cellule par une tiers personne (obligé d'écrire la formule en ligne1 et de "dérouler" à chaque ouverture du workbook)
Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
28 sept. 2007 à 02:53
Salut Avyrex,
Comme je le dis souvent (mais pas dans ces mots...), il est simple d'écrire une formule dans une colonne avec une ligne de code, et il est aussi simple de faire un copier/coller en valeur par la suite...

MPi²
0
Rejoignez-nous