Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 fonction si "" (vide) + zone texte = masquer

achraf26

XLDnaute Occasionnel
bonsoir,
j'ai une cellule E2, quand j'écris une valeur, une zone de texte s'affiche.
mais quand j'insère la fonction dessous elle ne prend pas en compte quand la cellule =""
=SIERREUR(SI(H5="";"";SI(J5="";"";INDEX(TD[N°];EQUIV(1;(TD[Contractant]=$H$5)*(TD[Document]=$J$5);0))));"")
 

Pièces jointes

  • test 78.xlsm
    18.6 KB · Affichages: 18

Dranreb

XLDnaute Barbatruc
Bonjour.
J'ai vu au passage une Sub Worksheet_Change dans le module de la feuille. Mais elle teste la cellule E2, dont le contenu ne semble pas destinée à être changé, vu que c'est une formule. En testant ses antécédents ça marcherait mieux :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect([B5:C5], Target) Is Nothing Then
      Shapes("ZoneTexte 1").Visible = [E2].Value = ""
      End If
   End Sub
Mais tout cela serait du travail pour un UserForm de mise à jour utilisant le CLsCAs
 

Dranreb

XLDnaute Barbatruc
La Sub APD du Module1, quant à elle, pourrait s'écrire comme ça :
VB:
Sub APD()
   With [Tableau1].ListObject.ListRows.Add.Range
      .Resize(, 2).Value = ActiveSheet.[B5:D5].Value
      .Cells(1, 3).Select
      End With
   End Sub
Mais si vous décidez d'installer la fameuse ressource, je vous proposerai une solution avec un UserForm
 

job75

XLDnaute Barbatruc
Bonjour achraf26, JBARBE, Bernard, le forum,

Dans le code de la feuille :
VB:
Private Sub Worksheet_Calculate()
Shapes("ZoneTexte 1").Visible = [E2] = "" And [B5] <> "" And [C5] <> ""
End Sub
Dans Module1 :
VB:
Sub APD()
With [Tableau1]
    .Cells(IIf(.Cells(1, 1) = "", 1, .Rows.Count + 1), 1).Resize(, 2) = [B5:C5].Value
End With
End Sub
Et j'ai un peu allégé la formule matricielle en E2 :
Code:
=SIERREUR(INDEX(Tableau1[Année];EQUIV(1;(Tableau1[Nom]=B5)*(Tableau1[Prénom]=C5);0)/(NBVAL(B5:C5)=2));"")
A+
 

Pièces jointes

  • test 78(1).xlsm
    19.9 KB · Affichages: 9

job75

XLDnaute Barbatruc
La formule en E2 ne va pas quand le tableau n'a qu'une seule ligne de données.

Voyez ce fichier (2), il faut ajouter les en-têtes avec [#Tout] dans la formule :
Code:
=SIERREUR(INDEX(Tableau1[[#Tout];[Année]];EQUIV(1;(Tableau1[[#Tout];[Nom]]=B5)*(Tableau1[[#Tout];[Prénom]]=C5);0)/(NBVAL(B5:C5)=2));"")
 

Pièces jointes

  • test 78(2).xlsm
    19.6 KB · Affichages: 9

achraf26

XLDnaute Occasionnel
merci job75 pour votre aide,
Jai modifié le code il fonctionne super bien,

Shapes("ZoneTexte 1").Visible = [E2] = "" And [B5] <> "" And [C5] <> "" And [D5] <> ""

j'ai rencontré un autre problème quand j'insère une nouvelle colonne (H) dans le tableau, au moment je rajoute une nouvelle fonction exemple H9, la fonction ne copie pas automatiquement pourtant ca devrait etre Automatique.
bien à vous
 

Pièces jointes

  • test 800.xlsm
    20.2 KB · Affichages: 3

achraf26

XLDnaute Occasionnel
Bonsoir job75
Désolé pour ma réponse tardive, le fichier que j’avais postuler dernièrement, je l’ai éditer avant de consulter le poste 6.
Du coup je vais corriger le fichier et je regarderai les résultats
 

achraf26

XLDnaute Occasionnel
Bonour tous le monde,
j'ai regardé les postes, je vous donne ma conclusion, ci joint fichier reprend le poste 5 et le 6
malgré que la cellule E2 reste vide suite aux faux informations renseignés dans les cellules B5 et C5, le bouton "Ajouter" reste afficher.
le code :

VB:
Private Sub Worksheet_Calculate()
Shapes("ZoneTexte 1").Visible = [E2] = "" And [B5] <> "" And [C5] <> ""
End Sub

Code:
=SIERREUR(INDEX(Tableau1[[#Tout];[Année]];EQUIV(1;(Tableau1[[#Tout];[Nom]]=B5)*(Tableau1[[#Tout];[Prénom]]=C5);0)/(NBVAL(B5:C5)=2));"")

qui précise que même si la cellule E2 =""; la zone texte ne doit pas être afficher.
Bien à vous
 

Pièces jointes

  • Poste 5 et 6.xlsm
    18.7 KB · Affichages: 4

achraf26

XLDnaute Occasionnel
Rebonjour Job75, aucune des deux ne fonctionnait correctement malgré la fonction et le code du poste 5 et 6, rien ne fonctionne à part si j'ai une version d'Excel (Office Pro Plus 2016) qui fait que le code vba beug.
ci joint le fichier : le B5 et C5 vide malgré que la E2 ="", le bouton reste afficher.
 

Pièces jointes

  • Poste 5 et 6.xlsm
    18.8 KB · Affichages: 4

achraf26

XLDnaute Occasionnel
bonjour JOb75, Dranreb,
je vous jure que j'ai encore refais les solutions du poste 5 et 6 ce matin, mais rien fonctionnait.
je vous jure que je dis pas du tout n'importe quoi,
ci joint fichier nomé test1000. vous allez voir que j'ai bien mis la fonction en E2.
VB:
=SIERREUR(INDEX(Tableau1[[#Tout];[Année]];EQUIV(1;(Tableau1[[#Tout];[Nom]]=B5)*(Tableau1[[#Tout];[Prénom]]=C5);0)/(NBVAL(B5:C5)=2));"")

code de la feuille :
Code:
Private Sub Worksheet_Calculate()
Shapes("ZoneTexte 1").Visible = [E2] = "" And [B5] <> "" And [C5] <> ""
End Sub

et bouton vba :
Code:
Sub APD()
With [Tableau1]
    .Cells(IIf(.Cells(1, 1) = "", 1, .Rows.Count + 1), 1).Resize(, 2) = [B5:C5].Value
End With
End Sub

passer une bonne journée
bien à vous
 

Pièces jointes

  • test 1000.xlsm
    19.1 KB · Affichages: 8

job75

XLDnaute Barbatruc
Le bouton "Ajouter" est masqué puisque "test" et "noi" existent déjà en ligne 12, donc il ne faut pas les ajouter de nouveau.

La formule en H9 se recopie vers le bas chez moi quand on valide H9.

Mais j'écrirais plutôt =ANNEE(AUJOURDHUI())-[@Année]>41
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…