Formule excel

Résolu
Bonjour,

Je suis à la recherche d'une formule qui m'indiquerai un "X" dans les cases J20,J21,J24,J25 si E15=1.

D'avance merci, bonne soirée

14 réponses

Résumé de la discussion

Un problème porte sur l’affichage de X dans les cellules J20, J21, J24 et J25 lorsque E15 vaut 1, dans un classeur Excel où E15 peut être une valeur saisie ou le résultat d’une formule. Une solution retenue propose d’utiliser le code VBA Worksheet_Change pour surveiller E15 et, lorsque sa valeur est égale à 1, écrire X dans les plages J20:J21 et J24:J25. D'autres contributions indiquent que les formules seules ne suffisent pas et rappellent que si E15 résulte d'une formule, il faut gérer les événements VBA avec Application.EnableEvents pour éviter les boucles et les effets indésirables.

Bobot (l’IA à votre service)
  1. oops petite précision, je ne souhaite aucune formules dans les cases J20,21,24,25 , cela rend plus difficile ^^ en tout cas pour moi !! ^^
    1. en fait les cases J20,21,24,25 sont amenés à être effacé, voila pourquoi
      1. Salut,

        La magie en informatique n'existe pas, il n'y a que deux possibilités pour y arriver par formule et par code VBA mais si déjà les formules te posent problème ne parlons pas de VBA et le problème est sans issue
        1. je conais un peu VBA, mais dans ce cas, la feuille peut etre scrutée en continue pour que dès que e15 = 1, J21,22,24 et 25 passe à "X"
          1. Contributeur
            ok, à mettre dans le code de la feuille :
            Private Sub Worksheet_Change(ByVal Target As Range) 
                If Intersect(Target, [E15]) Is Nothing Then Exit Sub 
                If [E15] = 1 Then [J21:J22,J24:J25] = "X" 
            End Sub 
            

            eric

            edit: correction de la plage
            1. Re,

              clic droit sur l'onglet de ta feuille/Visualiser le code
              colle ce code
              Private Sub Worksheet_Change(ByVal Target As Range)
              If Not Intersect(Target, [E15]) Is Nothing Then
              If [E15] = 1 Then
              [J21:J22] = "x"
              [J24:J25] = "x"
              End If
              End If
              End Sub

              ou plus court

              Private Sub Worksheet_Change(ByVal Target As Range)
              If Not Intersect(Target, [E15]) Is Nothing Then
              If [E15] = 1 Then [J21:J22,J24:J25] = "x"
              End If
              End Sub

              A+
              Mike-31

              Une période d'échec est un moment rêvé pour semer les graines du savoir.
              1. Contributeur
                Tu traines mike, mais tu lis mieux que moi. J'ai inclus J23... ;-)
                eric
            2. merci à vous deux ^^ continuez à faire la course lol

              bon cependant ca marche po, j'ai testé les deux :((
              1. Contributeur
                si si, ça marche
            3. Salut Eric,

              Je jongle sur plusieurs discussions et il se fait tard je commence à ne plus avoir les yeux en face les trous

              Bonne soirée je vais me mettre à 180°

              Dans le code on pourrait ajouter l'annulation des x si la valeur en E15 est différente

              Private Sub Worksheet_Change(ByVal Target As Range)
              If Not Intersect(Target, [E15]) Is Nothing Then
              If [E15] = 1 Then [J21:J22,J24:J25] = "x"
              If [E15] <> 1 Then [J21:J22,J24:J25] = ""
              End If
              End Sub
              1. alors oui ca marche, seulement g oublié quelque chose, E15 est le résultat d'une formule
              2. il y a quelque chose à rajouter dans la formule pour le fait que e15 dépend d'une formule?
              3. Contributeur
                Ben oui, ce n'est pas un évènement interceptable.
                Il faut se baser sur la (les) cellule(s) que tu saisis et qui crée une modification en E15
                eric
              4. OK merci c'est bon ça marche, par contre pour insérer un X dans une cellule ou l'on rentre n'importe quelle valeur, c'est a dire en fait dès lors que l'on inscrit quelque chose dans la case A1,A2 A6 et A8, cela se transforme par un X, c possible sous vba
            4. Contributeur
              Private Sub Worksheet_Change(ByVal Target As Range)
                  If Not Intersect(Target, Union([A1], [A2], [A6], [A8])) Is Nothing Then
                      Application.EnableEvents = False
                      Target = "x"
                      Application.EnableEvents = True
                  End If
              End Sub

              Un seul Sub Worksheet_Change par feuille, il faut tout mettre dans le même et tester les cellules concernées pour chaque petit bout de programme.
              eric
              1. cool, lorsque je rentre une valeur dans la case, cela me le remplace bien par un X mais par contre je ne peux plus le supprimer ^^
              2. Contributeur
                Ben t'as voulu des x, tu en as ! ;-)
                Private Sub Worksheet_Change(ByVal Target As Range)
                    If Not Intersect(Target, Union([A1], [A2], [A6], [A8])) Is Nothing Then
                        Application.EnableEvents = False
                        If Target <> "" Then Target = "x"
                        Application.EnableEvents = True
                    End If
                End Sub

                eric
              3. lol oui j'en ai c sur, oops g ajouter ta nouvelle formule et c bon je peux effacer, mais g plus mes X :S
              4. lol, nan c moi je l'ai remplacer, c bon !! ^^ un grand merci Maitre ^^ bonne fin de soirée
            5. une petite question, pour le remplacement des valeur par X, ca marche par contre lorsque j'efface le contenu de mes cellules concernées, la formule suivante plante...

              Private Sub Worksheet_Change(ByVal Target As Range)
              If Not Intersect(Target, Union([A1], [A2], [A6], [A8])) Is Nothing Then
              Application.EnableEvents = False
              If Target <> "" Then Target = "x"
              Application.EnableEvents = True
              End If
              End Sub
              1. Contributeur
                Ce n'est pas une formule mais une macro en vba...
                Chez moi ça marche bien et ça plante ne veut rien dire.
                eric
              2. OUI une macro!!, donc g "Erreur d'exécution "13" incompatibilité de type dans une fenêtre et lorsque je clic sur débogage "If Target <> "" Then" est surligner en jaune
              3. Contributeur
                dépose un fichier exemple sur cijoint.fr et colle ici le lien fourni
              4. voila http://www.cijoint.fr/cjlink.php?file=cj201110/cij4WrPZrZ.xls
              5. g depose ma formule pour les case g11:L15
            6. Bonjour;
              voici la formule:
              =SI(E15=1;ET(J21;J22;J24;J25)="x";" ")
              1. Contributeur
                tu as le droit de tout lire avant de répondre...
                eric
            7. Contributeur
              C'est parce que tu fusionnes les cellules, ça devrait être prohibé, on arrive (presque) toujours à s'en passer.
              C'est la plaie dans les macros, et même hors macro un simple copié-collé et te voilà emm...dé.
              A réserver que pour les titres, et encore...

              En attendant pour te dépanner :
              If Target.Range("A1") <> "" Then Target = "x"
              ça devrait le faire, mais évite vraiment la fusion pour tes tableaux.

              Et plutôt que de lister toutes les cellules, regroupe-les par plage :
              If Not Intersect(Target, Union([G11:K15], ...

              eric
              1. Impeccable chef ça marche!! cependant pour la présentation d'un tableau la fusion est pratique, maintenant il est vrai que ça pose de problème par moment ^^

                Un grand merci en tout cas
            8. re moi ^^ g un soucis,

              je souhaite pareil une macro qui me surveille si en case A32 g "Pas de réglage",
              d34,d35 i34,i35 et m34,35 pas à X

              g tester plusiur chose par rapoprt a la macro de dessus mais sans succès....
              1. Contributeur
                Bonjour,

                Démarre une nouvelle question, je m'absente plusieurs jours...
                N'oublie pas de mettre celle-ci en résolu.
                eric
              2. ok ca marche merci