Problème d'optimisation

Bonjour,

j'ai une macro Excel qui vérifie une valeur dans une certaine cellule, et en fonction du résultat, d'autres cellules seront remplies.

Le problème est qu'il y a une quarantaine de cas différents, ça donne quelque chose de pas propre, long, et pas pratique si on veut rajouter des cas à l'avenir. Voici un bout du code :

If C13.Value = Sheets("BDD").Range("B5").Value Then
    C12.Value = Sheets("BDD").Range("A5").Value
    C17.Value = Sheets("BDD").Range("C5").Value
    C19.Value = Sheets("BDD").Range("D5").Value
    F19.Value = Sheets("BDD").Range("E5").Value
    E35.Value = Sheets("BDD").Range("J5").Value
    C99.Value = Sheets("BDD").Range("X5").Value
    G99.Value = Sheets("BDD").Range("Y5").Value
End If

If C13.Value = Sheets("BDD").Range("B6").Value Then
    C12.Value = Sheets("BDD").Range("A6").Value
    C17.Value = Sheets("BDD").Range("C6").Value
    C19.Value = Sheets("BDD").Range("D6").Value
    F19.Value = Sheets("BDD").Range("E6").Value
    E35.Value = Sheets("BDD").Range("J6").Value
    C99.Value = Sheets("BDD").Range("X6").Value
    G99.Value = Sheets("BDD").Range("Y6").Value
End If

If C13.Value = Sheets("BDD").Range("B7").Value Then
    C12.Value = Sheets("BDD").Range("A7").Value
    C17.Value = Sheets("BDD").Range("C7").Value
    C19.Value = Sheets("BDD").Range("D7").Value
    F19.Value = Sheets("BDD").Range("E7").Value
    E35.Value = Sheets("BDD").Range("J7").Value
    C99.Value = Sheets("BDD").Range("X7").Value
    G99.Value = Sheets("BDD").Range("Y7").Value
End If

If C13.Value = Sheets("BDD").Range("B8").Value Then
    C12.Value = Sheets("BDD").Range("A8").Value
    C17.Value = Sheets("BDD").Range("C8").Value
    C19.Value = Sheets("BDD").Range("D8").Value
    F19.Value = Sheets("BDD").Range("E8").Value
    E35.Value = Sheets("BDD").Range("J8").Value
    C99.Value = Sheets("BDD").Range("X8").Value
    G99.Value = Sheets("BDD").Range("Y8").Value
End If

If C13.Value = Sheets("BDD").Range("B9").Value Then
    C12.Value = Sheets("BDD").Range("A9").Value
    C17.Value = Sheets("BDD").Range("C9").Value
    C19.Value = Sheets("BDD").Range("D9").Value
    F19.Value = Sheets("BDD").Range("E9").Value
    E35.Value = Sheets("BDD").Range("J9").Value
    C99.Value = Sheets("BDD").Range("X9").Value
    G99.Value = Sheets("BDD").Range("Y9").Value
End If

If C13.Value = Sheets("BDD").Range("B10").Value Then
    C12.Value = Sheets("BDD").Range("A10").Value
    C17.Value = Sheets("BDD").Range("C10").Value
    C19.Value = Sheets("BDD").Range("D10").Value
    F19.Value = Sheets("BDD").Range("E10").Value
    E35.Value = Sheets("BDD").Range("J10").Value
    C99.Value = Sheets("BDD").Range("X10").Value
    G99.Value = Sheets("BDD").Range("Y10").Value
End If

If C13.Value = Sheets("BDD").Range("B11").Value Then
    C12.Value = Sheets("BDD").Range("A11").Value
    C17.Value = Sheets("BDD").Range("C11").Value
    C19.Value = Sheets("BDD").Range("D11").Value
    F19.Value = Sheets("BDD").Range("E11").Value
    E35.Value = Sheets("BDD").Range("J11").Value
    C99.Value = Sheets("BDD").Range("X11").Value
    G99.Value = Sheets("BDD").Range("Y11").Value
End If

If C13.Value = Sheets("BDD").Range("B12").Value Then
    C12.Value = Sheets("BDD").Range("A12").Value
    C17.Value = Sheets("BDD").Range("C12").Value
    C19.Value = Sheets("BDD").Range("D12").Value
    F19.Value = Sheets("BDD").Range("E12").Value
    E35.Value = Sheets("BDD").Range("J12").Value
    C99.Value = Sheets("BDD").Range("X12").Value
    G99.Value = Sheets("BDD").Range("Y12").Value
End If

If C13.Value = Sheets("BDD").Range("B13").Value Then
    C12.Value = Sheets("BDD").Range("A13").Value
    C17.Value = Sheets("BDD").Range("C13").Value
    C19.Value = Sheets("BDD").Range("D13").Value
    F19.Value = Sheets("BDD").Range("E13").Value
    E35.Value = Sheets("BDD").Range("J13").Value
    C99.Value = Sheets("BDD").Range("X13").Value
    G99.Value = Sheets("BDD").Range("Y13").Value
End If

If C13.Value = Sheets("BDD").Range("B14").Value Then
    C12.Value = Sheets("BDD").Range("A14").Value
    C17.Value = Sheets("BDD").Range("C14").Value
    C19.Value = Sheets("BDD").Range("D14").Value
    F19.Value = Sheets("BDD").Range("E14").Value
    E35.Value = Sheets("BDD").Range("J14").Value
    C99.Value = Sheets("BDD").Range("X14").Value
    G99.Value = Sheets("BDD").Range("Y14").Value
End If

If C13.Value = Sheets("BDD").Range("B15").Value Then
    C12.Value = Sheets("BDD").Range("A15").Value
    C17.Value = Sheets("BDD").Range("C15").Value
    C19.Value = Sheets("BDD").Range("D15").Value
    F19.Value = Sheets("BDD").Range("E15").Value
    E35.Value = Sheets("BDD").Range("J15").Value
    C99.Value = Sheets("BDD").Range("X15").Value
    G99.Value = Sheets("BDD").Range("Y15").Value
End If

If C13.Value = Sheets("BDD").Range("B16").Value Then
    C12.Value = Sheets("BDD").Range("A16").Value
    C17.Value = Sheets("BDD").Range("C16").Value
    C19.Value = Sheets("BDD").Range("D16").Value
    F19.Value = Sheets("BDD").Range("E16").Value
    E35.Value = Sheets("BDD").Range("J16").Value
    C99.Value = Sheets("BDD").Range("X16").Value
    G99.Value = Sheets("BDD").Range("Y16").Value
End If

If C13.Value = Sheets("BDD").Range("B17").Value Then
    C12.Value = Sheets("BDD").Range("A17").Value
    C17.Value = Sheets("BDD").Range("C17").Value
    C19.Value = Sheets("BDD").Range("D17").Value
    F19.Value = Sheets("BDD").Range("E17").Value
    E35.Value = Sheets("BDD").Range("J17").Value
    C99.Value = Sheets("BDD").Range("X17").Value
    G99.Value = Sheets("BDD").Range("Y17").Value
    End If
    

Quelqu'un aurait une solution pour alléger tout ça SVP?

Il y aurait apparemment la fonction =RECHERCHE qui pourrait être utile mais je demande votre aide ici.

Il faudrait comme je l'ai mentionné que l'on puisse facilement rajouter des cas à l'avenir sans rendre le tout encore plus brouillon.

Merci !

Bonsoir,

juste en passant, une boucle qui va de 5 à 17 :

For i = 5 to 17
    If C13.Value = Sheets("BDD").Range("B" & i).Value Then
        C12.Value = Sheets("BDD").Range("A" & i).Value
        C17.Value = Sheets("BDD").Range("C" & i).Value
        C19.Value = Sheets("BDD").Range("D" & i).Value
        F19.Value = Sheets("BDD").Range("E" & i).Value
        E35.Value = Sheets("BDD").Range("J" & i).Value
        C99.Value = Sheets("BDD").Range("X" & i).Value
        G99.Value = Sheets("BDD").Range("Y" & i).Value
        Exit For
    End If
Next i

Exit for car si a cellule testée est égale à une des valeurs de la BDD en colonne B alors je pense qu'elle n'est pas égale à une autre...

Et pour être plus propre un With Sheets("BDD") en plus et c'est le top !

@ bientôt

LouReeD

Bonjour LouReeD,

Merci pour la réponse rapide.

J'ai mis ceci dans la macro :

Sub test()

With Sheets("BDD")

For i = 4 To 46
    If Range("C13").Value = Range("B" & i).Value Then
        Range("C12").Value = Range("A" & i).Value
        Range("C17").Value = Range("C" & i).Value
        Range("C19").Value = Range("D" & i).Value
        Range("F19").Value = Range("E" & i).Value
        Range("E35").Value = Range("J" & i).Value
        Range("C99").Value = Range("X" & i).Value
        Range("G99").Value = Range("Y" & i).Value
        Exit For
    End If

Next i

End With

End Sub

Rien ne se passe. J'ai bien mis ça dans "Feuil1" où j'appelle la macro à chaque changement de sélection.

J'ai oublié de dire que la cellule C13 est dans une autre feuille, je pense que c'est ça qui pose problème...

Comment je peux gérer ce problème SVP?

Merci pour l'aide !

Bonsoir,

pour les "Range" faisant partie du "With" il faut mettre un "." devant.

Pour les référence des cellules à gauche du signe "=", il n'y a pas besoin de référence à la feuille si c'est la bonne feuille qui est active lors du lancement du code. Si ce n'est pas le cas alors il faut mettre la référence de la feuille en question.

Ce qui peut donner ceci :

Sub test()
With Sheets("BDD")
For i = 4 To 46
    If Sheets("Feuille où se trouve C13").Range("C13").Value = .Range("B" & i).Value Then
        Sheets("Feuille où on inscrit les données").Range("C12").Value = .Range("A" & i).Value
        Sheets("Feuille où on inscrit les données").Range("C17").Value = .Range("C" & i).Value
        Sheets("Feuille où on inscrit les données").Range("C19").Value = .Range("D" & i).Value
        Sheets("Feuille où on inscrit les données").Range("F19").Value = .Range("E" & i).Value
        Sheets("Feuille où on inscrit les données").Range("E35").Value = .Range("J" & i).Value
        Sheets("Feuille où on inscrit les données").Range("C99").Value = .Range("X" & i).Value
        Sheets("Feuille où on inscrit les données").Range("G99").Value = .Range("Y" & i).Value
        Exit For
    End If
Next i
End With
End Sub

@ bientôt

LouReeD

Bonjour,

Tout fonctionne très bien!

Merci beaucoup pour votre aide encore une fois.

Bonsoir,

n'hésitez pas à repasser alors !

@ bientôt

LouReeD

Rechercher des sujets similaires à "probleme optimisation"