CHOOSE et plus de 29 cas

  • Initiateur de la discussion Initiateur de la discussion kenavo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

K

kenavo

Guest
Bonsoir,

Avec cette macro, je suis limité a 29 cas :

Code:
Sub EntrerValeurs()
Dim F As String
F = "=IF(RC3="""","""",CHOOSE(MATCH(RC3,{""BTP"";""BMCO"";""PMX"";""BPOP"";""MTTP"";""FRDF"";""FFT"";""ESF"";""""},0),11 650 252,07 050 252,36 000 252,53 332 252,24 152 252, 56 500 S52,79 100 252,86 100 252))"
With Sheets("Sheet1").Range("O2:O" & Sheets("Sheet1").Range("A65536").End(xlUp).Row)
  .FormulaR1C1 = F
  .Value = .Value 'supprime les formules
End With
End Sub

Comment faire pour ajouter d'autres conditions, j'ai testé en ajoutant une variable mais les valeurs de F sont "écrasées" :

Code:
Sub EntrerValeurs()
Dim F, G As String
F = "=IF(RC3="""","""",CHOOSE(MATCH(RC3,{""BTP"";""BMCO"";""PMX"";""BPOP"";""MTTP"";""FRDF"";""FFT"";""ESF"";""""},0),11 650 252,07 050 252,36 000 252,53 332 252,24 152 252, 56 500 S52,79 100 252,86 100 252))"
G = "=IF(RC3="""","""",CHOOSE(MATCH(RC3,{""BP"";""BCO"";""MX"";""POP"";""MTP"";""FRF"";""FOT"";""EGF"";""""},0),11 650 352,07 050 352,36 000 352,53 332 352,24 152 352, 58 500 S52,79 100 352,86 100 852))"

With Sheets("Sheet1").Range("O2:O" & Sheets("Sheet1").Range("A65536").End(xlUp).Row)
  .FormulaR1C1 = F
 .FormulaR1C1 = G
  .Value = .Value 'supprime les formules
End With
End Sub


Bonne soirée
 
Re : CHOOSE et plus de 29 cas

Bonjour Kenavo Victor,
et si tu nous mettais un petit fichier avec ce que tu as et de ce que tu souhaites obtenir , on pourrait t'aider et peut-être faire une macro différente qui ne te limiterait plus
a te relire avec les explications dans le fichier
a+
Papou 😱
 
Re : CHOOSE et plus de 29 cas

Bonjour,

Voici le fichier ( c'est un fichier bidon) dans ce fichier je n'ai pas autant de cas que dans le vrai
Je vais regarder du cote de select case

En colonne C j'ai une liste d'au moins 35 "noms" a chacun je veux affecter une valeur , la macro marche si j'ai moins de 29 cas ( nom)
En colonne O je veux trouver les codes

Bonne journée
 

Pièces jointes

Dernière modification par un modérateur:
Re : CHOOSE et plus de 29 cas

Bonjour,

Est ce que je pars sur la bonne voie...
1 - je definis une liste dynamique : les données qui se trouve en colonne C ( là ou j'ai ts mes "noms") :
Range("C1:C1").Select
ActiveWorkbook.Names.Add Name:="Entite", RefersToR1C1:= _
"=OFFSET(Sheet1!R2C3,,,COUNTA(Sheet1!C3)-1)"

2- c'est à partir de là que je peux utiliser Select Case?
Select case
Case Toto
code = 5
Case Titi
code= 10....

mais je ne sais pas comment affecter le code dans le colonne G 🙁

Bonne journée
 
Re : CHOOSE et plus de 29 cas

Bonjour,

Avec index et equiv:

Code:
    Dim F As String, plage As Range
    F = "=INDEX({10;11;15;60},MATCH(RC3,{""Toto"";""max"";""martin"";""titi""},0))"

Mais tu aurais intérêt à mettre tes valeurs dans une plage de feuille cachée, sinon cela va vite devenir illisible.

A+

[Edition] Hello Pierrot🙂
 
Dernière modification par un modérateur:
Re : CHOOSE et plus de 29 cas

Bonjour,

regarde si ceci peut t'aider :
Code:
Option Explicit
Sub test()
Dim t1() As Variant, t2() As Variant, c As Range
t1 = Array("toto", "titi", "tata")
t2 = Array(10, 20, 30)
For Each c In Range("C2::C20")
    If Application.Match(c, t1, 0) > 0 Then c.Offset(0, 4).Value _
        = t2(Application.Match(c, t1, 0) - 1)
Next c
End Sub
bonne journée
@+

Edition : bonjour Hasco🙂
 
Re : CHOOSE et plus de 29 cas

Merci,
non je ne peux pas mettre les valeurs dans une feuille cachées car ma macro sert à plusieurs fichiers
Je vais me souvenir qu' avec index et equiv , nous ne sommes pas limité
 
Re : CHOOSE et plus de 29 cas

Bonjour,
Comprends pas pourquoi coder en dur les valeurs mais bon
Code:
Option Base 1
Function MYVAL(MYCEL As Range)
T1 = Array("BTP", "BMCO", "PMX", "BPOP", "MTTP", "FRDF", "FFT", "ESF", "BP", "BCO", _
            "MX", "POP", "MTP", "FRF", "FOT", "EGF")
T2 = Array("11 650 252", "07 050 252", "36 000 252", "53 332 252", "24 152 252", _
            "56 500 S52", "79 100 252", "86 100 252", "11 650 352", "07 050 352", "36 000 352", _
            "53 332 352", "24 152 352", "58 500 S52", "79 100 352", "86 100 852")
x = Application.Match(MYCEL, T1, 0)
If Not IsError(x) Then MYVAL = T2(x)
End Function

Sub d()
Dim rng As Range, c As Range
Set rng = Range("O2:O" & Range("C65000").End(xlUp).Row)
For Each c In rng
    If c.Offset(0, -12) <> "" Then c = MYVAL(c.Offset(0, -12))
Next
End Sub

Edit: Ouh, bah y a du monde...🙂

A+
kjin
 
Dernière édition:
Re : CHOOSE et plus de 29 cas

Merci,

Je regarde les propositions de Kjin et pierrot et je vous tiens au courrant

Kjin : sur mon fichier ça bloque a la ligne 29 sur
"If Not IsError(x) Then MYVAL = T2(x)"
 
Dernière modification par un modérateur:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour