FORMULE VBA EXCEL

Résolu
Signaler
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
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

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
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
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
J'oubliais, tout ça ce fait quand je clic sur un bouton VBA excel.
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
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.....
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
j'oubli toujours le NEXT C à la fin de tes conditions ^^

Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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²
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
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.
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
7
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
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Merci beaucoup
Messages postés
1172
Date d'inscription
jeudi 24 mai 2007
Statut
Membre
Dernière intervention
28 septembre 2013
1
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.....
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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²