Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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:
Re : CHOOSE et plus de 29 cas

Re,
Oui kjin : kenavo breton, 29 finistère .... = erreur 29 😀

Je mets mon fichier avec l' erreur

Merci
 
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.
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…