dans une meme cellule, ajoute de 2 resultat if then

chewwe1602

XLDnaute Nouveau
Bonjour a tous,

Je suis en train de créer un bon de commande automatisé via VBA.
Ce bon de commande sert a commander des pièces détaché pour la fabrication d'une fenetre.
J'ai dans ces pieces détachées, des pièces qui peuvents etre positionnées sur le coté de la fenetre ou en bas de la fenetre.

J'ai donc un code qui, lorsque je valide_click explique ceci.

Si la largeur est > a 800 et < a 1000 alors le prolongateur = 1
Si la largeur est > a 1000 et < a 1200 alors le prolongateur = 2
Si la hauter est > à 1100 et < à 1400 alors le prolongateur = 1
si la hauteur est > 1400 et < 1800 alors le prolongateur = 2.

C'est schématisé mais ça revient a ça.
maintenant, si ma fenêtre fait 1050 de large et 1600 de haut, il faut que dans la cellule prolongateur je retrouve la somme de 2+2.

mais bien sur, il me manque juste la technique pour additionner ces deux variables.Toute les conditions je les ai déjà crée avec des if ... then ...
elseif... then...

Est ce que ce que je veux faire est possible? Si oui quelqu'un peut il me l'expliquer?
 

camarchepas

XLDnaute Barbatruc
Re : dans une meme cellule, ajoute de 2 resultat if then

Et oui , déjà Bonjour , Hello DranReb

Moi , je ferais

Si la largeur est > a 800 et < a 1000 alors le prolongateur = 1
Si la largeur est > a 1000 et < a 1200 alors le prolongateur = 2

Si la hauter est > à 1100 et < à 1400 alors le prolongateur = prolongateur +1
si la hauteur est > 1400 et < 1800 alors le prolongateur = prolongateur +2
 

chewwe1602

XLDnaute Nouveau
Re : dans une meme cellule, ajoute de 2 resultat if then

Re camarchepas... décidément tu es seul a veiller durant le mois d'aout? :)

je te copie mon code ( qui est en fait un peu le tiens aussi ) pour être plus clair :

'calcule prolongateur coté paumelle et travers basse

With CBtypedouvrant.value = "OB"
'selon la hauteur
IF TBHFF.value >= 1776 and TBHFF.value <= 2225 then
Sheets("parametre").Range("J25").Value = ""
Sheets("parametre").Range("J26").Value = ""
Sheets("parametre").Range("J27").Value = TextBox3.Value*2
Sheets("parametre").Range("J28").Value = ""

elseIF TBHFF.value >= 1526 and TBHFF.value <= 1775 then
Sheets("parametre").Range("J25").Value = ""
Sheets("parametre").Range("J26").Value = TextBox3.Value
Sheets("parametre").Range("J27").Value = TextBox3.Value
Sheets("parametre").Range("J28").Value = ""

elseIF TBHFF.value >=1550 and TBHFF.value <=1076 then
Sheets("parametre").Range("J25").Value = ""
Sheets("parametre").Range("J26").Value = ""
Sheets("parametre").Range("J27").Value = TextBox3.Value
Sheets("parametre").Range("J28").Value = ""

elseIF TBHFF.value >=1075 and TBHFF.value <=851 then
Sheets("parametre").Range("J25").Value = ""
Sheets("parametre").Range("J26").Value = TextBox3.Value
Sheets("parametre").Range("J27").Value = ""
Sheets("parametre").Range("J28").Value = ""

elseIF TBHFF.value >=850 and TBHFF.value <= 696 then
Sheets("parametre").Range("J25").Value = TextBox3.Value
Sheets("parametre").Range("J26").Value = ""
Sheets("parametre").Range("J27").Value = ""
Sheets("parametre").Range("J28").Value = ""
end if

'selon la largeur
IF TBLFF.value >= 1476 and TBHFF.value <= 1725 then
Sheets("parametre").Range("J25").Value = ""
Sheets("parametre").Range("J26").Value = TextBox3.Value
Sheets("parametre").Range("J27").Value = TextBox3.Value
Sheets("parametre").Range("J28").Value = ""

elseIF TBLFF.value >= 1475 and TBHFF.value <= 1251 then
Sheets("parametre").Range("J25").Value = ""
Sheets("parametre").Range("J26").Value = ""
Sheets("parametre").Range("J27").Value = TextBox3.Value
Sheets("parametre").Range("J28").Value = ""

elseIF TBLFF.value >= 1250 and TBHFF.value <= 776 then
Sheets("parametre").Range("J25").Value = ""
Sheets("parametre").Range("J26").Value = TextBox3.Value
Sheets("parametre").Range("J27").Value = ""
Sheets("parametre").Range("J28").Value = ""


End if

end with

en j25 le prolongateur de 250
en j26 le prolongateur de 500
en j27 le prolongateur de 750
en j28 un autre prolongateur de 250 (différent techniquement du premier.)

Dans l’état actuel du code, quand je fais par exemple Hauteur 1330 et largeur 1300 j'obtiens 1 prolongateur de 750 au lieu de 2.
le texbox3 c'est la quantité de fenêtre
TBHFF c'est le textbox ou je renter la hauteur
TBLFF c'est le textbox ou je rentre la largeur.

Bonne fin de soirée :)
 

camarchepas

XLDnaute Barbatruc
Re : dans une meme cellule, ajoute de 2 resultat if then

Voilà

ATTENTION des TBLFF se sont transformés en TBHFF, j'ai corrigé .

Et voilà comment faire le cumul

Je ne comprend pas ton 1 with pas trés orthodoxe
Je t"ai rajouté un second with afin de fludifier l'écriture .

Code:
With CBtypedouvrant.Value = "OB"
 With Sheets("Parametre")
'selon la hauteur
If TBHFF.Value >= 1776 And TBHFF.Value <= 2225 Then
  .Range("J25").Value = ""
  .Range("J26").Value = ""
  .Range("J27").Value = TextBox3.Value * 2
  .Range("J28").Value = ""

ElseIf TBHFF.Value >= 1526 And TBHFF.Value <= 1775 Then
  .Range("J25").Value = ""
  .Range("J26").Value = TextBox3.Value
  .Range("J27").Value = TextBox3.Value
  .Range("J28").Value = ""

ElseIf TBHFF.Value >= 1550 And TBHFF.Value <= 1076 Then
  .Range("J25").Value = ""
  .Range("J26").Value = ""
  .Range("J27").Value = TextBox3.Value
  .Range("J28").Value = ""

ElseIf TBHFF.Value >= 1075 And TBHFF.Value <= 851 Then
  .Range("J25").Value = ""
  .Range("J26").Value = TextBox3.Value
  .Range("J27").Value = ""
  .Range("J28").Value = ""

ElseIf TBHFF.Value >= 850 And TBHFF.Value <= 696 Then
  .Range("J25").Value = TextBox3.Value
  .Range("J26").Value = ""
  .Range("J27").Value = ""
  .Range("J28").Value = ""
End If

'selon la largeur
If TBLFF.Value >= 1476 And TBLFF.Value <= 1725 Then
  .Range("J25").Value = ""
  .Range("J26").Value = .Range("J26").Value + TextBox3.Value
  .Range("J27").Value = .Range("J27").Value + TextBox3.Value
  .Range("J28").Value = ""

ElseIf TBLFF.Value >= 1475 And TBLFF.Value <= 1251 Then
  .Range("J25").Value = ""
  .Range("J26").Value = ""
  .Range("J27").Value = .Range("J27").Value + TextBox3.Value
  .Range("J28").Value = ""

ElseIf TBLFF.Value >= 1250 And TBLFF.Value <= 776 Then
  .Range("J25").Value = ""
  .Range("J26").Value = .Range("J26").Value + TextBox3.Value
  .Range("J27").Value = ""
  .Range("J28").Value = ""

End If
End With

End With
 

chewwe1602

XLDnaute Nouveau
Re : dans une meme cellule, ajoute de 2 resultat if then

Bonjour Dranreb,

Dessolé, hier soir je n'avais pas vu ta réponse. Je n'avais pas vu que toi aussi tu veille au grain durant les congés d'été :)

Bonjour camarchepas.

Merci pour ton code.
Pourquoi le with n'est il pas orthodoxe? cette fonction ne sert elle pas a répéter une variable ?

En tout cas merci car ça marche parfaitement. Je n'avais pas pensé a rappeler la cellule dans le résultat. Je n'ai pas encore les automatismes. Je vais encore sans doute poser des questions dont la réponse est évidente :)
 

camarchepas

XLDnaute Barbatruc
Re : dans une meme cellule, ajoute de 2 resultat if then

Et oui ,

Quitte à être insommiaque, autant que se soit utile .

Et pas de soucis , les questions ne paraissent bêtes que lorsqu'elles ont une réponse ( Plusieurs souvant d'ailleurs )

Allez une petite suggestion, qui pourrait peut être alléger ton programme ,

Le renseignement de la feuille pourrait peut être ce faire uniquement sur la validation de ton formulaire.

dans ce cas tu n'aurais qu'a gérer dans un premier temps l'interface elle même du formulaire
 

chewwe1602

XLDnaute Nouveau
Re : dans une meme cellule, ajoute de 2 resultat if then

Oulala !!! tu cherche a m'embrouiller Camarchepas?;)

Je note que c'est possible mais je pense que je vais continuer comme ça. D'abord parce que quand je reviens sur ce programme, je m'y retrouve aussi grâce a tout ces petits cailloux jeté de ci de la !!

Bon sinon ton code a fonctionné a merveille ( une fois de plus ) sauf que j'ai du rajouter le = sheets("parametre").value + textbox3
même au niveau des hauteurs. sinon ça ne me comptait pas les prolongateur des première conditions.

A plus tard pour d'autre question ( j'en ai déjà qui me taraudent !!! :D )
 

Dranreb

XLDnaute Barbatruc
Re : dans une meme cellule, ajoute de 2 resultat if then

À mon avis, quand une programmation commence à comporter beaucoup de cas et de tests, c'est qu'il est grand temps de faire en sorte que tout soit paramétré extérieurement au programme, d'après un gigantesque tableau de tous les cas possibles, et que le programme ne soit plus en quelque sorte qu'un simple squelette qui se réfère aux règles constitués par ce tableau. La maintenance en sera aussi grandement simplifiée puisqu'elle se ramènera à des modifications dans le tableau.
 

chewwe1602

XLDnaute Nouveau
Re : dans une meme cellule, ajoute de 2 resultat if then

Dranreb,

Je pense que tu fais référence au fait de créer des modules distinct selon chaque type de critère et que le bouton valider ne fasse qu’appeler des sub.

J'y ai pensé, mais j'ai fait quelques essai et je n'arrive pas a faire fonctionner les sub souhaité. Sinon c'est sur que je m'y prendrait comme ca ne serait ce que pour voir ou j'en suis. La mon esprit et mes codes partent un peu dans tous les sens !! :/
 

chewwe1602

XLDnaute Nouveau
Re : dans une meme cellule, ajoute de 2 resultat if then

Dranreb re bonsoir,

J'ai commencé a me pencher sur ta remarque, mais je calle.

J'ai actuellement un code suivant :

Private Sub TBHFF_Change()


' Affichage des cote D dans le comcocox CBcoted selon les HFF.
With CBtypedouvrant.Value = "OB" Or CBtypedouvrant.Value = "OF renvoi d'angle"
If CLng(TBHFF.Value) >= "2276" And CLng(TBHFF.Value) <= "2725" Then
CBcoted.List = Array("", "1050")
CBcoted.Text = "1050"
ElseIf CLng(TBHFF.Value) >= "1751" And CLng(TBHFF.Value) <= "2275" Then
CBcoted.List = Array("", "550", "1050")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1696" And CLng(TBHFF.Value) <= "1750" Then
CBcoted.List = Array("", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1601" And CLng(TBHFF.Value) <= "1695" Then
CBcoted.List = Array("", "375", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1446" And CLng(TBHFF.Value) <= "1600" Then
CBcoted.List = Array("", "260", "375", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1350" And CLng(TBHFF.Value) <= "1445" Then
CBcoted.List = Array("", "164", "260", "375", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1211" And CLng(TBHFF.Value) <= "1349" Then
CBcoted.List = Array("", "164", "210", "260", "375", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1076" And CLng(TBHFF.Value) <= "1210" Then
CBcoted.List = Array("", "114", "164", "210", "260", "375", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "946" And CLng(TBHFF.Value) <= "1075" Then
CBcoted.List = Array("", "114", "164", "210", "260", "375", "470")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "851" And CLng(TBHFF.Value) <= "945" Then
CBcoted.List = Array("", "114", "164", "210", "260", "375")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "581" And CLng(TBHFF.Value) <= "850" Then
CBcoted.List = Array("", "114", "164", "210", "260")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "485" And CLng(TBHFF.Value) <= "580" Then
CBcoted.List = Array("", "114", "164", "210")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "421" And CLng(TBHFF.Value) <= "484" Then
CBcoted.List = Array("", "114", "210")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "230" And CLng(TBHFF.Value) <= "420" Then
CBcoted.List = Array("", "114")
CBcoted.Text = ""
End If
End With

Sheets("parametre").Range("j3").Value = TBHFF.Value
End Sub

Pour essayer, j'ai créer un module appelé choix_cote_D. Dedans j'ai copier le code :

Private sub choix_coted ()

' Affichage des cote D dans le comcocox CBcoted selon les HFF.
With CBtypedouvrant.Value = "OB" Or CBtypedouvrant.Value = "OF renvoi d'angle"
If CLng(TBHFF.Value) >= "2276" And CLng(TBHFF.Value) <= "2725" Then
CBcoted.List = Array("", "1050")
CBcoted.Text = "1050"
ElseIf CLng(TBHFF.Value) >= "1751" And CLng(TBHFF.Value) <= "2275" Then
CBcoted.List = Array("", "550", "1050")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1696" And CLng(TBHFF.Value) <= "1750" Then
CBcoted.List = Array("", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1601" And CLng(TBHFF.Value) <= "1695" Then
CBcoted.List = Array("", "375", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1446" And CLng(TBHFF.Value) <= "1600" Then
CBcoted.List = Array("", "260", "375", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1350" And CLng(TBHFF.Value) <= "1445" Then
CBcoted.List = Array("", "164", "260", "375", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1211" And CLng(TBHFF.Value) <= "1349" Then
CBcoted.List = Array("", "164", "210", "260", "375", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "1076" And CLng(TBHFF.Value) <= "1210" Then
CBcoted.List = Array("", "114", "164", "210", "260", "375", "470", "550")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "946" And CLng(TBHFF.Value) <= "1075" Then
CBcoted.List = Array("", "114", "164", "210", "260", "375", "470")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "851" And CLng(TBHFF.Value) <= "945" Then
CBcoted.List = Array("", "114", "164", "210", "260", "375")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "581" And CLng(TBHFF.Value) <= "850" Then
CBcoted.List = Array("", "114", "164", "210", "260")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "485" And CLng(TBHFF.Value) <= "580" Then
CBcoted.List = Array("", "114", "164", "210")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "421" And CLng(TBHFF.Value) <= "484" Then
CBcoted.List = Array("", "114", "210")
CBcoted.Text = ""
ElseIf CLng(TBHFF.Value) >= "230" And CLng(TBHFF.Value) <= "420" Then
CBcoted.List = Array("", "114")
CBcoted.Text = ""
End If
End With

End sub

Dans le code Private Sub TBHFF_Change() de mon userforme1, j'ai suprimé toute cette partie. si bien que j'ai a présent mis les lignes suivantes :
Private Sub TBHFF_Change()

call choix_coted

Sheets("parametre").Range("j3").Value = TBHFF.Value
End Sub

mais il ne se passe rien. Pourtant il me semble que c'est comme ça qu'on appel un module?

Pourrais tu me dire d’où viens mon erreur car bien entendu, ça ne fonctionne pas.
 

Dranreb

XLDnaute Barbatruc
Re : dans une meme cellule, ajoute de 2 resultat if then

Non, je n'entrerai pas dans ce truc. Je ne commencerai à m'y intéresser qu'à partir du moment où il y aura un tableau dans une feuille avec tous les types d'ouvrants et, dans une autre colonne, toutes les valeurs pouvant entrer dans le List de CBcoted, avec en face de chacun le domaine où il peut s'appliquer, à savoir la valeur minimale et maximale du critère entré dans TBHFF.
Il s'agira alors pour la Sub TBHFF_Change() de moins d'une dizaine d'instruction qui fabriqueront une simple liste de numéros de lignes de ce tableau, qu'un objet de type ComboBoxLiés utilisera pour filtrer automatiquement ses dictionnaires arborescents, sans qu'on ait à s'en occuper, sauf à lui demander de se débrouiller tout seul pour le faire.
 

chewwe1602

XLDnaute Nouveau
Re : dans une meme cellule, ajoute de 2 resultat if then

Dranreb,

Merci de ta réponse. Malheureusement, si je fais sans ces tableau aujourd'hui c'est pour deux bonnes raisons.
1 - Je ne veux pas de feuill comportant des tableau.
J'ai déjà un tableur excel qui calcul tout ce que je suis en train de refaire en VBA. mais je trouve justement que tous ces tableaux sont des usine a gaz pour les personnes a qui je destine ce logiciel.
2 - Le but premier de ce logiciel c'est de me donner un cas concret qui me permet d'apprendre a programmer sous VBA. Si je simplifie tout tout de suite, ça ne sert a rien.

Je comprend parfaitement qu'en l'état actuel des choses tu ne veuille pas mettre le doigt la dedans( j'ai moi même parfois du mal a comprendre comment j'ai pu m'embarquer la dedans :) ! Mais quand je commence quelque chose je vais au bout .)
Tu ne veux pas m'expliquer pourquoi ma façon de faire ne fonctionne pas, ce n'est pas grave. Je te remercie quand même du temps que tu m'as accordé.

Cordialement.
 

camarchepas

XLDnaute Barbatruc
Re : dans une meme cellule, ajoute de 2 resultat if then

Bonjour à tous ,

pourquoi cela ne fonctionne pas , tout plein de raisons , et ce n'est pas comme cela que tu allégeras le traitement .

Bon en fait, selon ce que tu nous a donné comme code , puisque le classeur a dû terriblement évoluer , voici :

L'utilisation de Private devant le sub (Routine) ou le Function (Fonction) , rend inaccessible ce code depuis un autre module.

De plus si tu utilises un module standard , les objets ne sont plus accessible de la même maniére , voir pas accessible si le formulaire n'est pas ouvert.

Comme notre ami DranReb , le souligne ainsi que toi d'ailleur cela devient une usine à gaz , je pense que c'est toujours constructif de reconnaitre qu'une méthode utilisée n'est pas la bonne , plus l'on arrête vite et plus l'on peu ce consacrer à une nouvelle méthode.

Tous n'est pas perdu, les formulaires par exemple soit récupérables,

Je crois que ce que Dranreb te propose et à priori ils existent déjà c'est d'utiliser des abaques , mais de façon automatique, via des recherches sur tableau.

Le gros avantage de cette solution est de ne pas avoir à taper du programme parce d'une gamme de produit à évolué ou qu'une norme a changée , il suffit juste de mettre l'abaque à jour et voilà.

Car toute personne ayant crée une application pourra te dire qu'il est toujours difficile de ce replonger dedans 3 ou 6 mois aprés .

Je vais essayé de te faire une petite démonstration par rapport à ce que tu as écrit
 

Discussions similaires

Statistiques des forums

Discussions
312 379
Messages
2 087 769
Membres
103 662
dernier inscrit
rterterert