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. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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. 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. 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. en fait les cases J20,21,24,25 sont amenés à être effacé, voila pourquoi
          0
          1. Contributeur
            Bonsoir,

            Pourquoi aucune formule ?
            eric
            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