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 = True

Bonjour 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 à retardement...

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 if

Il 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...

Merci de votre aide.

J'ai anonymisé l'ensemble

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

Rechercher des sujets similaires à "instruction entre"