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. Contributeur
    Bonsoir,

    Pourquoi aucune formule ?
    eric
    1
    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
      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
        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 !! ^^
          0
          1. en fait les cases J20,21,24,25 sont amenés à être effacé, voila pourquoi
            0
            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"
              0
              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.
                0
                1. Contributeur
                  Tu traines mike, mais tu lis mieux que moi. J'ai inclus J23... ;-)
                  eric
                  0
              2. merci à vous deux ^^ continuez à faire la course lol

                bon cependant ca marche po, j'ai testé les deux :((
                0
                1. Contributeur
                  si si, ça marche
                  0
              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
                0
                1. alors oui ca marche, seulement g oublié quelque chose, E15 est le résultat d'une formule
                  0
                2. il y a quelque chose à rajouter dans la formule pour le fait que e15 dépend d'une formule?
                  0
                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
                  0
                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
                  0
              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
                0
                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 ^^
                  0
                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
                  0
                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
                  0
                4. lol, nan c moi je l'ai remplacer, c bon !! ^^ un grand merci Maitre ^^ bonne fin de soirée
                  0
              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
                0
                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
                  0
                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
                  0
                3. Contributeur
                  dépose un fichier exemple sur cijoint.fr et colle ici le lien fourni
                  0
                4. voila http://www.cijoint.fr/cjlink.php?file=cj201110/cij4WrPZrZ.xls
                  0
                5. g depose ma formule pour les case g11:L15
                  0
              6. 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
                0
                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
                  0
              7. 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....
                0
                1. Contributeur
                  Bonjour,

                  Démarre une nouvelle question, je m'absente plusieurs jours...
                  N'oublie pas de mettre celle-ci en résolu.
                  eric
                  0
                2. ok ca marche merci
                  0
              8. Bonjour;
                voici la formule:
                =SI(E15=1;ET(J21;J22;J24;J25)="x";" ")
                -4
                1. Contributeur
                  tu as le droit de tout lire avant de répondre...
                  eric
                  0