CHOOSE et plus de 29 cas

kenavo

XLDnaute Junior
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
 

Paritec

XLDnaute Barbatruc
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 :eek:
 

kenavo

XLDnaute Junior
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

  • recherche nom1.xls
    27.5 KB · Affichages: 57
Dernière édition:

kenavo

XLDnaute Junior
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
 
G

Guest

Guest
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:

Pierrot93

XLDnaute Barbatruc
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:)
 

kjin

XLDnaute Barbatruc
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:

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote