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.
 

andsim34

XLDnaute Nouveau
Re : Fonction et Liste déroulante

Bonjours a tous.
Je demande a tout le monde, mais bon, je pense que job75 sera plus a meme de m'aider.

J'ai du recommencer mon logiciel, car le schéma n'allais plus.
J'ai nommer tout mes cellules "diam*", et egalement les "debit*" et "puiss*"
J'ai mi la validation liste dans toute les cellules "diam*"
la formule des case "diam*" à un peu changer par rapport a avant.

Je n'arrive pas a remettre la macro que vous m'aveiz faite.Je ne comprend pas comment elle marche. Pouvez vous me la modifier pour qu'elle fonctionne sur mon nouveau fichier ?

Cijoint.fr - Service gratuit de dépôt de fichiers Le fichier que vous m'aviez envoyé contenant la macro.

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

Je n'ai pas colorier le case en bleu, donc si vous pouvez faire démarrer la macro dès qu'il y a un changement sur la page (je me débrouillerais plus tard pour la faire marcher quand les cellules bleu seront modifier).

Voila, j'espere avoir été clair, MERCI d'avance ;-).
 

job75

XLDnaute Barbatruc
Re : Fonction et Liste déroulante

Bonjour andsim34,

On peut déclancher la macro même si la cellule modifiée n'est pas bleue (j'ai mis la ligne de code en commentaire).

Mais il faut alors désactiver l'action des évènements par Application.EnableEvents :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
[COLOR="Red"]'If Target.Interior.ColorIndex <> 34 Then Exit Sub 'si la cellule n'est pas bleue[/COLOR]
Dim nm As Object
[COLOR="Red"]Application.EnableEvents = False[/COLOR]
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("D35") = "oui" Then .FormulaR1C1 = "=IF(puiss16=0,""pas de débit"",IF(R35C4=""non"",""rentrer un diametre"",IF(AND(R35C4=""oui"",R34C4=""cuivre""),INDEX(Tabl_Cu,MATCH(debit16,Q_Cu,1),1),IF(AND(R35C4=""oui"",R34C4=""acier""),INDEX(Tabl_Ac,MATCH(debit16,Q_Ac,1),1),""""))))"
    End With
  End If
Next
[COLOR="Red"]Application.EnableEvents = True[/COLOR]
End Sub

Votre fichier avec la macro :

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

A+
 

andsim34

XLDnaute Nouveau
Re : Fonction et Liste déroulante

Merci.

Cependant, il ya plusieurs probleme:
-ça n'affiche pas la validation quand je mets "non" en D35
-pour tout les diam sa prend: puiss16 et debit16 dans la formule. il faudrais que ça prenne pour diamX par exemple puissX et debitX.

:confused:
 

job75

XLDnaute Barbatruc
Re : Fonction et Liste déroulante

Re,

Pour le 1er problème, j'avais laissé trainer un B7 dans la macro (à remplacer par D35).

Pour le second problème, je regarde ce que je peux faire, je n'avais pas fait attention.

A+
 

job75

XLDnaute Barbatruc
Re : Fonction et Liste déroulante

Re,

Voici la macro corrigée, les valeurs 16, 15, 14... sont maintenant prises dans la cellule .offset(-2) :

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
Application.EnableEvents = False
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 = [COLOR="Red"]Range("D35")[/COLOR] = "non" And .Offset(1) <> 0
      If Range("D35") = "oui" Then .FormulaR1C1 = "=IF(puiss" & [COLOR="Red"].Offset(-2)[/COLOR] & "=0,""pas de débit"",IF(R35C4=""non"",""rentrer un diametre"",IF(AND(R35C4=""oui"",R34C4=""cuivre""),INDEX(Tabl_Cu,MATCH(debit" & [COLOR="Red"].Offset(-2)[/COLOR] & ",Q_Cu,1),1),IF(AND(R35C4=""oui"",R34C4=""acier""),INDEX(Tabl_Ac,MATCH(debit" & [COLOR="Red"].Offset(-2)[/COLOR] & ",Q_Ac,1),1),""""))))"
    End With
  End If
Next
Application.EnableEvents = True
End Sub

Le fichier :

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

A+
 

andsim34

XLDnaute Nouveau
Re : Fonction et Liste déroulante

Re.
Merci sa marche nikel, mais...(car il y a toujours un mais mdr)

Il y a un pb. En fait le pb ce situe dans le tableau maintenant.

J'ai colorier en bleu la zone du tableau ou est le problème, et j'ai mis des bulles en dessous pour l'expliquer.

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

Pouvez vous essayer d'y jeter un oeil ? (désolé, ça fait un peu le gars qui ne veut pas essayer lui meme, mais je ne comprend pas trop la macro, ça dépasse mon niveau :eek:))
 

job75

XLDnaute Barbatruc
Re : Fonction et Liste déroulante

Re,

La macro ne fait qu'entrer une formule dans les cellules du diagramme.

Si les cellules n'existent pas, bien sûr pas de formule !

Je ne vois d'ailleurs pas du tout ce qu'il faut faire avec le tableau que vous mentionnez, désolé, je pense que c'est un autre problème.

A+
 

andsim34

XLDnaute Nouveau
Re : Fonction et Liste déroulante

Bonjour.
Il y a des diam* dans le tableau aussi, de D0188 a DO331 (diam155 a 298), car je ne pouvais pas les faire figurer sur le schéma.
D'après ce que j'ai compris la macro prend le numéro se situant 2 case au dessus de la cellule diam*, or pour les diam155 a diam298, le numéro correspondant a "*" se trouve 4 colonnes a gauche, et non pas 2 lignes au dessus comme pour les diam* étant sur le schéma.

Par exemple pour le diam155 (en DO188), la formule est:

Code:
=SI(puiss[COLOR="Red"]18/16[/COLOR]=0;"pas de débit";SI($D$35="non";"rentrer un diametre";SI(ET($D$35="oui";$D$34="cuivre");INDEX(Tabl_Cu;EQUIV(debit[COLOR="red"]18/16[/COLOR];Q_Cu;1);1);SI(ET($D$35="oui";$D$34="acier");INDEX(Tabl_Ac;EQUIV(debit[COLOR="red"]18/16[/COLOR];Q_Ac;1);1);""))))

Car deux case au dessu de diam155 il y a "18/16".
elle devrait etre:

Code:
=SI(puiss[COLOR="red"]155[/COLOR]=0;"pas de débit";SI($D$35="non";"rentrer un diametre";SI(ET($D$35="oui";$D$34="cuivre");INDEX(Tabl_Cu;EQUIV(debit[COLOR="red"]155[/COLOR];Q_Cu;1);1);SI(ET($D$35="oui";$D$34="acier");INDEX(Tabl_Ac;EQUIV(debit[COLOR="red"]155[/COLOR];Q_Ac;1);1);""))))

donc pour les diam1 a 154, la macro fonctionne, mais pour ceux de 155 a 298, ce n'est pas bon.:(

Voila je pense avoir été plus clair.
 

job75

XLDnaute Barbatruc
Re : Fonction et Liste déroulante

Bonjour andsim34, le forum,

OK j'ai compris, maintenant j'utilise la variable n tirée du nom de la cellule.

Edition : J'ai aussi simplifié ou modifié 2 expressions (en dessous) :

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, n As Integer
Application.EnableEvents = False
For Each nm In Application.Names
  If nm.Name Like "diam*" Then 'recherche les noms commençant par diam
    [COLOR="Red"]n = Replace(nm.Name, "diam", "")[/COLOR]
    With Range([COLOR="Red"]nm.Name[/COLOR])
      .Validation.InCellDropdown = Range("D35") = "non" And [COLOR="Red"]Range("puiss" & n)[/COLOR] <> 0
      If Range("D35") = "oui" Then .FormulaR1C1 = "=IF(puiss" & n & "=0,""pas de débit"",IF(R35C4=""non"",""rentrer un diametre"",IF(AND(R35C4=""oui"",R34C4=""cuivre""),INDEX(Tabl_Cu,MATCH(debit" & n & ",Q_Cu,1),1),IF(AND(R35C4=""oui"",R34C4=""acier""),INDEX(Tabl_Ac,MATCH(debit" & n & ",Q_Ac,1),1),""""))))"
    End With
  End If
Next
Application.EnableEvents = True
End Sub

Le fichier :

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

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 390
Messages
2 087 952
Membres
103 683
dernier inscrit
Cescodelvar