Fonction et Liste déroulante

andsim34

XLDnaute Nouveau
Bonjour à tous!
Je suis nouveau, je me présente, je suis étudiant en DUT génie thermique et énergie, et je suis en stage actuellement et je dois developpé un logiciel de perte de charge sur excel.
Alors voila je vous explique mon probleme:

Je dois laisser le choix a l'utilisateur de selectionné la matiere de la canalisation, et de selectionné un diametre (en fonction de la matiere) ou de le calculé automatiquement avec excel.

J'ai donc fais une liste avec "oui" ou "non" pour le calcul, et une autre "cuivre" ou "acier" pour le choix de la matiere.

Dans ma case de résultat, actuellement, j'affiche "rentrer un diametre" s'il on choisi "non" pour le calcul, et si on choisi oui, le calcul se fais en fonction de la matiere.

Je voudrais que quand je choisisse "non", et par exemple "cuivre", il saffiche une liste de diametre possible pour les canalistation en cuivre à la place de "rentrer un diametre".

Voici ma formule actuel de ma case de résultat si ça peut aider:
SI($B$7="non";"rentrer un diametre";SI(ET($B$7="oui";$B$6="cuivre");INDEX(Données!H4:J17;EQUIV(F15;Données!J4:J17;1);1);SI(ET($B$7="oui";$B$6="acier");INDEX(Données!K4:M14;EQUIV(F15;Données!M4:M14;1);1);"")))

En gros je voudrais pouvoir intégrer une liste déroulante dans ma formule.

J'espere avoir été clair. Merci d'avance de vos réponses.
 

job75

XLDnaute Barbatruc
Re : Fonction et Liste déroulante

Bonjour andsim34, bienvenue sur XLD,

Voici une solution avec une liste de validation :

- nommer Liste la liste des diamètres

- selectionner la cellule résultat, puis menu Données-Validation-Options-Autoriser : Liste, dans Source entrer la formule :

=SI($B$7="non";Liste)

Voyez si ça vous convient, car je ne fais pas référence à la matière.

Edit : bonjour Raja, mromain

A+
 
Dernière édition:

andsim34

XLDnaute Nouveau
Re : Fonction et Liste déroulante

Oups!:( j'ai crié victoire trop tot.

La méthode de job75 fonction, le seul probleme maintenant c'est que si je selectionne un diametre via la liste déroulante, et que je souhaite repassé en calcul automatique, la formule a disparu.

Elle a été remplacé par le diametre que j'avais choisi avant. :confused:

Est ce possible d'insérer la validation liste directement dans une formule d'une cellule ?
 
Dernière édition:

andsim34

XLDnaute Nouveau
Re : Fonction et Liste déroulante

Voila je réexplique mon pb, ce sera plus clair:

Je souhaite faire apparaitre dans ma case "résultat" soit le résultat d'une formule, soit une liste déroulante1, soit une liste déroulante2 suivant 2 conditions.

Ca donne ca:
Si A1="oui";B1="cuivre" utiliser la formule du cuivre
Si A1="oui;B1="acier" utiliser la formule de l'acier
Si A1="non";B1="cuivre" afficher la liste déroulante du cuivre
Si A1="non";B1="acier" afficher la liste déroulante de l'acier

Comment puis-je faire ? dois-je faire une macro ? si oui comment fait-on une liste déroulante a partir d'une macro ?

Merci d'avance.
 

job75

XLDnaute Barbatruc
Re : Fonction et Liste déroulante

Bonjour andsim34, le forum,

Il n'est pas possible d'utiliser dans une même cellule une liste de validation et une formule.

Il faudrait donc une macro en effet.

Sur la base de votre fichier, cette macro se déclancherait quand les cellules B6 et B7 de la feuille Calculs seraient modifiées.

Mais votre fichier n'est pas très facilement utilisable tel quel. Il faut en effet recalculer à chaque fois de nombreuses cellules telles que F13, F25, F37..., O37, O49, etc...

Je regarde ça, mais il me semble qu'il faudrait revoir la structure de cette feuille.

A+
 

andsim34

XLDnaute Nouveau
Re : Fonction et Liste déroulante

Oui il faudrais le faire pour pas mal de cellules.

Comment fait t-on une liste déroulante avec une macro ?

J'ai essayé en enregistrant dans la macro une validation liste, sa me donne un truc dans le genre:

With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Liste_DN_Cu"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With


Mais je ne sais pas comment faire pour l'afficher dans une cellule choisi de excel. si telle ou telle condition est respecté.
 

job75

XLDnaute Barbatruc
Re : Fonction et Liste déroulante

Re,

Pour information, il ne sera pas nécessaire que la macro détermine pour chaque cellule une liste de validation, celle-ci pouvant être définie préalablement.

Par contre la macro devra afficher ou masquer cette liste par la propriété :

...InCellDropdown = True ou False

Le problème est de déterminer les cellules où appliquer cette propriété.

A+
 

job75

XLDnaute Barbatruc
Re : Fonction et Liste déroulante

Bonjour andsim34, le forum,

J'ai écrit une macro dans le code la feuille Calculs.

Elle est exécutée quand une cellule en bleu est modifiée.

A noter que j'ai mis une valeur dans la cellule J10 pour que les listes de validation apparaissent.

La macro :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Interior.ColorIndex <> 34 Then Exit Sub 'si la cellule n'est pas bleue
Dim nm As Object
For Each nm In Application.Names
  If nm.Name Like "diam*" Then 'recherche les noms commençant par diam
    With Range(Replace(nm, "=", ""))
      .Validation.InCellDropdown = Range("B7") = "non" And .Offset(1) <> 0
      If Range("B7") = "oui" Then .FormulaR1C1 = "=IF(R[1]C=0,""pas de débit"",(IF(R7C2=""non"",""rentrer un diametre"",IF(AND(R7C2=""oui"",R6C2=""cuivre""),INDEX(Données!R4C8:R17C10,MATCH(R[2]C,Données!R4C10:R17C10,1),1),IF(AND(R7C2=""oui"",R6C2=""acier""),INDEX(Données!R4C11:R14C13,MATCH(R[2]C,Données!R4C13:R14C13,1),1),"""")))))"
    End With
  End If
Next
End Sub

Le fichier :

Cijoint.fr - Service gratuit de dépôt de fichiers

Bonne continuation.

A+
 

andsim34

XLDnaute Nouveau
Re : Fonction et Liste déroulante

WAOU!
Un grand merci a toi job75!!!
Je n'ai vu ton message que maintenant, je ne suis pas un pro en Excel et VBA donc entre temps j'ai passé la matinée a me faire une usine a gaz:


Code:
'Diam1
Range("diam1").Clear

If debit1 > 0 And matiere = "cuivre" And auto = "non" Then ActiveSheet.Range("diam1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="=Liste_DN_Cu"

If debit1 > 0 And matiere = "acier" And auto = "non" Then ActiveSheet.Range("diam1").Validation.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="=Liste_DN_Ac"

If debit1 > 0 And matiere = "cuivre" And auto = "oui" Then Range("diam1").FormulaLocal = "=INDEX(Tabl_Cu;EQUIV(debit1;Q_Cu;1);1)"

If debit1 > 0 And matiere = "acier" And auto = "oui" Then Range("diam1").FormulaLocal = "=INDEX(Tabl_Ac;EQUIV(debit1;Q_Ac;1);1)"

If debit1 = 0 Then Range("diam1") = "pas de débit"

que j'ai recopié pour chaque "diam" , soit 89 fois mdr!

Bref, MERCI, meme si j'ai du mal a comprendre comment marche ton code.
Est ce que si je rajoute des "diam*" (en gros si je rajoute des radiateurs a mon schéma) ton code les prendra en compte automatiquement ? (bien sur avec les meme couleur, et meme disposition)
 

job75

XLDnaute Barbatruc
Re : Fonction et Liste déroulante

Re,

Est ce que si je rajoute des "diam*" (en gros si je rajoute des radiateurs a mon schéma) ton code les prendra en compte automatiquement ? (bien sur avec les meme couleur, et meme disposition)

Aucun problème : la macro étudie toutes les cellules dont le nom commence par diam.

Simplement prendre soin pour de nouvelles cellules de copier la validation (copier une cellule avec validation, puis Collage spécial-Validation).

Edit : bien sûr un nom diamxx doit être affecté à une seule cellule...

A+
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
467
Réponses
8
Affichages
205
Réponses
2
Affichages
306

Statistiques des forums

Discussions
312 393
Messages
2 087 964
Membres
103 687
dernier inscrit
olivier72