Formule excel

Résolu
Ttomax Messages postés 64 Statut Membre -  
Ttomax Messages postés 64 Statut Membre -
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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    Pourquoi aucune formule ?
    eric
    1
  2. Mike-31 Messages postés 18205 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  4. Ttomax Messages postés 64 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Ttomax Messages postés 64 Statut Membre 1
     
    en fait les cases J20,21,24,25 sont amenés à être effacé, voila pourquoi
    0
  7. Ttomax Messages postés 64 Statut Membre 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
  8. Mike-31 Messages postés 18205 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Tu traines mike, mais tu lis mieux que moi. J'ai inclus J23... ;-)
      eric
      0
  9. Ttomax Messages postés 64 Statut Membre 1
     
    merci à vous deux ^^ continuez à faire la course lol

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

      Démarre une nouvelle question, je m'absente plusieurs jours...
      N'oublie pas de mettre celle-ci en résolu.
      eric
      0
    2. Ttomax Messages postés 64 Statut Membre 1
       
      ok ca marche merci
      0
  15. smartway14 Messages postés 857 Date d'inscription   Statut Membre Dernière intervention   186
     
    Bonjour;
    voici la formule:
    =SI(E15=1;ET(J21;J22;J24;J25)="x";" ")
    -4
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      tu as le droit de tout lire avant de répondre...
      eric
      0