Liste deroulante multi-conditionnelle

Pineurne

XLDnaute Junior
Heyy,

Bon j'ai cherché un peu partout dans le forum et lu pas mal de truc, mais je suis toujours coincé. J'ai aussi pas mal utilisé l'enregistreur de macros, mais rien n'y fait.
Je pensais que la structure de mon code n'était pas trop mauvaise, mais apparement non car il est assez long à s'exécuter.
En fait, je souhaite qu'une cellule devienne une liste déroulante en fonction des résultats présents dans d'autres cellules. Mon code est le suivant:

Code:
    'TricA Evergreen serie ES-A
    If (Range("D3").Value = 1 And Range("C15").Value = "Portrait") Or (Range("D3").Value = 1 And Range("C15").Value = "Paysage" And Range("C17").Value = "Pattes de fixation (toit)") Then
        temp2 = 1
    End If
    
  'TricA Sanyo NKHE
    If (Range("D3").Value = 2 And Range("C15").Value = "Portrait") Or (Range("D3").Value = 2 And Range("C15").Value = "Paysage" And Range("C17").Value = "Pattes de fixation (toit)") Then
        temp2 = 2
    End If

For i = 22 To 28 Step 2
    
    Select Case temp2
       Case 1
       Range("C" & i).Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=tricaevesa"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
        
        Case 2
        Range("C" & i).Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=tricasannkhe"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With

        Case 4
        Range("C" & i).Value = "-"
       
        End Select
        
Next i

Alors voila si je suis dans les cas 1 ou 2, le code s'exécute et marche mais assez long et j'ai l'impression qu'il la tâche un grand nombre de fois... Le pire est quand je tombe dans le cas 4, je crois qu'il fait une boucle infinie et je ne comprends pas pourquoi...

Merci d'avance (si vous comprenez rien dites moi :D)
 
G

Guest

Guest
Re : Liste deroulante multi-conditionnelle

Bonjour,

Sans plus d'exemple précis, j'écrirais sans doute quelque chose comme ceci:

Code:
Dim formule As String
Dim oldCalculation As XlCalculation
 
'Enregistrer le mode de calcul actuel
oldCalculation = Application.Calculation
 
'Mettre le mode de calcul à manuel
'(les calculs seront arrêtés pendant l'exécution de la macros-> gain de temps)
Application.Calculation = xlCalculationManual
 
'TricA Evergreen serie ES-A
    If (Range("D3").Value = 1 And Range("C15").Value = "Portrait") Or (Range("D3").Value = 1 And Range("C15").Value = "Paysage" And Range("C17").Value = "Pattes de fixation (toit)") Then
        temp2 = 1
        formuleValidation = "=tricaevesa"
    End If
 
    'TricA Sanyo NKHE
    If (Range("D3").Value = 2 And Range("C15").Value = "Portrait") Or (Range("D3").Value = 2 And Range("C15").Value = "Paysage" And Range("C17").Value = "Pattes de fixation (toit)") Then
        temp2 = 2
        formuleValidation = "=tricasannkhe"
    End If
       For i = 22 To 28 Step 2
        If temp2 <> 4 Then
             [COLOR=yellowgreen]'sans sélectionner les cellules on gagne du temps d'exécution[/COLOR]
            With Range("C" & i).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                     xlBetween, Formula1:=formule
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With
       Else
            [COLOR=yellowgreen]'Rajouterl'apostrophe simple pour qu'excel[/COLOR]
[COLOR=yellowgreen]         ' interprète  le signe moins (-) autrmenent qu' un début de calcul[/COLOR]
            Range("C" & i).Value = "[SIZE=3][COLOR=red]'[/COLOR][/SIZE]-"
     End If
    Next i
 
'Rétablir le mode de recalcul
Application.Calculation = oldCalculation

A+
 
Dernière modification par un modérateur:

Discussions similaires

Réponses
16
Affichages
2 K

Statistiques des forums

Discussions
312 565
Messages
2 089 729
Membres
104 266
dernier inscrit
christian Auletta