Instruction entre If et If
Bonjour
J'ai un premier block de If pour calculer la valeur d'une cellule, puis un second pour une autre ; Quelle instruction mettre entre les deux ?
If Target.Column = 20 Or Target.Column = 28 Or Target.Column = 33 Or Target.Column = 50 Then
'on desactive le détection des evenements
Application.EnableEvents = False
'on recupère la ligne qui a été changé et on applique les formules
I = Target.Row
If Range("T" & I) = "V._LECUYER" Then Range("V" & I) = "ase-vernon27@eure.fr" Else
If Range("T" & I) = "D._CHAHARANE" Then Range("V" & I) = "ase-bernay27@eure.fr" Else
If Range("T" & I) = "S._LACOSTE" Then Range("V" & I) = "ase-louviers@eure.fr" Else
If Range("T" & I) = "J._CADIN" Then Range("V" & I) = "ase-evreux27@eure.fr" Else
If Range("T" & I) = "A._FRERET" Then Range("V" & I) = "ase-vernon227@eure.fr" Else
If Range("T" & I) = "S._LACOSTE" Then Range("V" & I) = "ase-pont-audemer27@eure.fr"
ICI*********
If Range("AX" & I) = "Apprentissage" Then Range("AI" & I) = "Non financé par le DAMA" Else
If Range("AB" & I) = "Oui" And ((Range("AX" & I) = "Autre" Or Range("AX" & I) = "College" Or Range("AX" & I) = "Lycee" Or Range("AX" & I) = "Lycee_professionnel")) And Range("AG" & I) = "Mois" Then Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H55").Value Else
If Range("AB" & I) = "Oui" And (Range("AX" & I) = "Autre" Or Range("AX" & I) = "College" Or Range("AX" & I) = "Lycee" Or Range("AX" & I) = "Lycee_professionnel") And Range("AG" & I) = "Trimestre" Then Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H67").Value Else
If Range("AB" & I) = "Oui" And (Range("AX" & I) = "Autre" Or Range("AX" & I) = "College" Or Range("AX" & I) = "Lycee" Or Range("AX" & I) = "Lycee_professionnel") And Range("AG" & I) = "Annuel" Then Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H70").Value Else
If Range("AB" & I) = "Oui" And Range("AX" & I) = "" And Range("AG" & I) = "Mois" Then Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H56").Value Else
If Range("AB" & I) = "Oui" And Range("AX" & I) = "" And Range("AG" & I) = "Trimestre" Then Range("AI" & I) = "Impossible" Else
If Range("AB" & I) = "Oui" And Range("AX" & I) = "" And Range("AG" & I) = "Annuel" Then Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H70").Value Else
If Range("AB" & I) = "Non" And (Range("AX" & I) = "Autre" Or Range("AX" & I) = "College" Or Range("AX" & I) = "Lycee" Or Range("AX" & I) = "Lycee_professionnel") And Range("AG" & I) = "Mois" Then Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H57").Value Else
If Range("AB" & I) = "Non" And (Range("AX" & I) = "Autre" Or Range("AX" & I) = "College" Or Range("AX" & I) = "Lycee" Or Range("AX" & I) = "Lycee_professionnel") And Range("AG" & I) = "Trimestre" Then Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H69").Value Else
If Range("AB" & I) = "Non" And (Range("AX" & I) = "Autre" Or Range("AX" & I) = "College" Or Range("AX" & I) = "Lycee" Or Range("AX" & I) = "Lycee_professionnel") And Range("AG" & I) = "Annuel" Then Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H70").Value Else
If Range("AB" & I) = "Non" And Range("AX" & I) = "" And Range("AG" & I) = "Mois" Then Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H54").Value Else
If Range("AB" & I) = "Non" And Range("AX" & I) = "" And Range("AG" & I) = "Trimestre" Then Range("AI" & I) = "Impossible" Else
If Range("AB" & I) = "Non" And Range("AX" & I) = "" And Range("AG" & I) = "Annuel" Then Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H70").Value Else
'on resactive le détection des evenements
Application.EnableEvents = TrueBonjour Theyoshi,
Quand on bloque, quelle est la première chose à faire ? Googliser !
En te renseignant un petit peu sur la boucle If, tu aurais très rapidement trouvé qu'il faut rajouter un End If à la fin...
Tu devrais faire attention la prochaine fois, à anonymiser tes macros/fichiers, là on a accès à pleins d'infos dont des adresses emails...
Bonne soirée,
Baboutz
Merci de ton aide
Effectivement, erreur de mail..
J'ai bien sur tenter le End If, mais dans ce cas, une erreur Enf If sans Block If
Tu as mis un deuxième End If à la fin de ta deuxième boucle If ?
Salut Theyoshi, Baboutz,
De plus, je pense que quelque chose ne va pas : un code construit uniquement sur un enchainement de If peut être une
Déjà, il s'agit d'une macro worksheet change, portant sur les colonnes T, AB, AG et AX si je ne me trompe pas ? Les instructions au sein du code sont-elles toutes liées ou est-il possible d'affecter la première partie quand il y a un changement sur T, puis la seconde partie en cas de changement sur AX, ... ?
Il y a la possibilité d'utiliser des Select case pour les cas distincts.
Enfin, je pense qu'il faut réfléchir à l'imbrication de tout ça. J'ai l'impression que la condition maitresse est en colonne AX et que les conditions décisives sont en AB et AG. Il faut réadapter en simplifiant les cas au strict minimum...
Exemple :
If Range("AX" & I) = "Autre" Or Range("AX" & I) = "College" Or Range("AX" & I) = "Lycee" Or Range("AX" & I) = "Lycee_professionnel" Then
if Range("AB" & I) = "Oui" Then 'si AB = oui
select case Range("AG" & I).value
case is "Mois": Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H55").Value
case is "Trimestre": Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H67").Value
case is "Annuel": Range("AI" & I) = ThisWorkbook.Worksheets("Paramètres").Range("H70").Value
end select
else 'si AB = non
select case Range("AG" & I).value
case is "Mois": Range("AI" & I) = ...
case is "Trimestre": Range("AI" & I) = ...
case is "Annuel": Range("AI" & I) = ...
end select
end if
Elseif range("AX" & I) = "" then
if Range("AB" & I) = "Oui" Then 'si AB = oui
select case Range("AG" & I).value
case is "Mois": Range("AI" & I) = ...
case is "Trimestre": Range("AI" & I) = ...
case is "Annuel": Range("AI" & I) = ...
end select
else 'si AB = non
select case Range("AG" & I).value
case is "Mois": Range("AI" & I) = ...
case is "Trimestre": Range("AI" & I) = ...
case is "Annuel": Range("AI" & I) = ...
end select
end if
end ifIl faut adapter les valeurs à renvoyer mais c'est pour avoir une idée de la structure qui faudrait...
Cdlt,
Oui puisque la première boucle est rajoutée depuis peu
Salut 3GB,
En effet tu ass raison mais je t'avoue que j'avais un peu la flemme de dépatouiller dans cette jungle
@Theyoshi : Applique les conseils de 3GB sur ta deuxième boucle If puis joint un fichier anonymisé pour qu'on puisse t'aider plus efficacement
@Baboutz : oui, je te comprends. Condensé comme il est, ce n'est pas le code le plus alléchant qui soit...
Theyoshi,
Je ne sais pas vraiment ce que tu attends de moi.
Ce que je peux dire, c'est que je resterais pour ma part sur des formules et ne passerais pas par VBA pour faire ce que tu cherches à faire.
Tu as déjà tout un tas de listes sur la feuille Paramètres. Il faut juste aller au bout de ces listes et d'une part affecter à chaque professeur une adresse mail et l'appeler par un RECHERCHEV (ou INDEX EQUIV) en colonne T.
Rq : Il y a 2 fois S.LACOSTE alors que M.BROSSET n'apparait pas dans le code...
Ensuite, pour la colonne AI, il est possible d'avoir une formule avec un SOMMEPROD. Seulement, il faut parachever le tableau "Abonnements" de Paramètres, de manière à avoir tous les prix selon les cas. La seule contrainte est de remplacer les mots "Impossible" par une valeur numérique, 0 en l'occurrence. Et éventuellement, choisir une mise en forme personnalisée qui affiche "Impossible" dans ce tableau pour la valeur 0.
Bonjour,
Ce que je peux dire, c'est que je resterais pour ma part sur des formules et ne passerais pas par VBA pour faire ce que tu cherches à faire.
tu m’ôtes les mots de la bouche, c'est que je m'apprêtais à dire...
De plus, fait comme ça, un simple changement de personne et il faut aller dans le code, une hérésie
eric