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