VBA IF avec Or impossible ?

RAPHOUPHOU

XLDnaute Nouveau
Bonjour je fais de nouveau appel à vous.

Voila mon problème



Dans ma feuille "recap" je vais avoir des référence de B7 à B50
J'aimerais en fonction des référence, activer ou non des Checkboxs dans mon UserForm1.

Je veux utiliser un OR mais j'obtient un "incompatilibité de type"


En résumé:
FEuille "RECAP"


SI dans B7:B50 j'ai "VC2-P1" ou "VC2-P1"ou "..." ALORS Activer CheckBox1.

SI dans B7: B50 j'ai " VC2-P1" ou "VC2-P5" ou "..." ALORS Activer CheckBox2
.....



Merci
 

Pièces jointes

  • configurateur OPTION (version 1).xlsm
    228.8 KB · Affichages: 85

RAPHOUPHOU

XLDnaute Nouveau
RE

MERCI de ton aide cela fonctionne


mais maintenant j'aimerais qui boucle toute mes propositions la ex: il doit m'affiché deux CheckBoxs mais il sort parce que le premier If est validé il ne vas pas dans le 2ème :(


Boucle ?
merci


Set f = Sheets("recap")
For Each C In f.Range("B7:B" & f.[B65000].End(xlUp).Row) 'lecture des valeurs
If C = "VC2-P5" Or C = "VC2-P2" Then

CheckBox1.Enabled = True
TextBox1.Enabled = True

Else: CheckBox1.Enabled = False
TextBox1.Enabled = False

End If
'*****AND ??*********

If C = "VC2-P4" Or C = "VC2-P2" Then

CheckBox2.Enabled = True
TextBox2.Enabled = True

Else: CheckBox2.Enabled = False
TextBox2.Enabled = False

End If


Next C


End Sub
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Et si au lieu de les mettre dans des If, vous affectiez directement aux .Enabled les expressions Boolean ?
Personnellement je fais toujours comme ça pour les propriété Enabled de contrôles.

Edit: Mais la ça ne va pas.
Faites un Select Case C.Value. Mais je ne comprends pas très bien ce qui doit en résulter en fait.
Comptez peut être le nombre de "VC2-P5", "VC2-P2" et "VC2-P4" et prenez la décision des Enabled à la fin…
Vous pouvez aussi utiliser Workshseetfunction.countif pour le comptage
VB:
Dim F As Worksheet, R As Range, NbVC2P2&, NbVC2P4&, NbVC2P5&
Set F = ThisWorkbook.Sheets("recap")
Set R = F.Range("B7:B" & F.[B65000].End(xlUp).Row)
NbVC2P2 = WorksheetFunction.CountIf(R, "VC2-P2")
NbVC2P4 = WorksheetFunction.CountIf(R, "VC2-P4")
NbVC2P5 = WorksheetFunction.CountIf(R, "VC2-P5")
CheckBox1.Enabled = NbVC2P5 + NbVC2P2 > 0
TextBox1.Enabled = CheckBox1.Enabled
CheckBox2.Enabled = NbVC2P4 + NbVC2P2 > 0
TextBox2.Enabled = CheckBox2.Enabled
 
Dernière édition:

RAPHOUPHOU

XLDnaute Nouveau
Merci Dranreb de votre aide.


Ce "logiciel" doit me permettre de chiffrer des appareils Electrique.
Pour faire simple nous avons des appareils standard , ensuite nous pouvons y ajouter des accessoires mais selon le type d’appareils des options sont déjà intégrées, ou d'autre impossibles à installer

Le but de ma demande est de proposer que les options possibles à installer et ensuite choisir de l'installer ou non.


donc Option 1: Que pour M1 ou M2 ou M3
Option 2 que pour M2 ou M5
Option 3 que pour M2 ou M4 ou M5
.....
 

RAPHOUPHOU

XLDnaute Nouveau
Une dernière question et mon programme et fini


Je souhaite faire revenir la ref, desigantion, quantité et le prix en fonction de mes checkbox


Avez vous une idée pour finaliser mon code, utilisation index ?
 

Pièces jointes

  • configurateur OPTION (version 3).xlsm
    301 KB · Affichages: 59

Dranreb

XLDnaute Barbatruc
Je ne vous suis pas du tout, désolé.
En général, bien qu'elle existe on n'a jamais besoin de WorksheetFunction.Index en VBA parce que l'objet Range possède comme l'objet Worksheet les propriétés Rows, Columns et Cells dont on peut extraire un élément.
 

Bebere

XLDnaute Barbatruc
bonjour Raphoudhou,Dranreb
une idée,fait pour 3 checbox
plus simple avec une listbox avec optionbutton en multiselect(si plusieurs sélections)
Dim iframe As Byte

Private Sub CheckBox1_Click()
iframe = Mid(Me.Frame1.Name, 6)
End Sub

Private Sub CheckBox2_Click()
iframe = Right(Me.Frame3.Name, 6)
End Sub

Private Sub CheckBox3_Click()
iframe = Right(Me.Frame5.Name, 6)
End Sub

Private Sub CommandButton1_Click()

For i = 1 To 14
If UserForm1.Controls("CheckBox" & i) = True Then
Li = Feuil2.Columns(1).Find(Me("Frame" & iframe).Caption, LookIn:=xlValues, lookat:=xlWhole)
With Feuil1 'recap
L = .[B65000].End(xlUp).Row + 1
.Range("B" & L) = Feuil2.Range("A" & Li) ' B=> RECAP A=>OPTION === REF
.Range("C" & L) = Feuil2.Range("B" & Li) 'C=> RECAP B=>OPTION === DESIGNATION
.Range("D" & L) = CDbl(Me("TextBox" & i)) 'QUANTITE
.Range("E" & L) = F.Range("C") 'PRICE
End With
End If
Next

End Sub
 

RAPHOUPHOU

XLDnaute Nouveau
Merci de ton aide bebere mais cela ne fonctionne pas


upload_2016-7-26_9-43-42.png



Une idée du Problème
 

Bebere

XLDnaute Barbatruc
'il manquait .row ligne li=,et ligne incomplète 'price
'une question,combien de checkbox peuvent être cochée
Private Sub CommandButton1_Click()

For i = 1 To 14
If UserForm1.Controls("CheckBox" & i) = True Then
Li = Feuil2.Columns(1).Find(Me("Frame" & iframe).Caption, LookIn:=xlValues, lookat:=xlWhole).Row
With Feuil1 'recap
L = .[B65000].End(xlUp).Row + 1
.Range("B" & L) = Feuil2.Range("A" & Li) ' B=> RECAP A=>OPTION === REF
.Range("C" & L) = Feuil2.Range("B" & Li) 'C=> RECAP B=>OPTION === DESIGNATION
.Range("D" & L) = CDbl(Me("TextBox" & i)) 'QUANTITE
.Range("E" & L) = Feuil2.Range("C" & Li) 'PRICE
End With
End If
Next

End Sub

Private Sub UserForm_Initialize()
Dim i As Byte
'*****************Initialisation TextBox**************
For i = 1 To 14
Me("TextBox" & i).Value = 1
Next
 

Discussions similaires

Réponses
2
Affichages
494

Statistiques des forums

Discussions
311 725
Messages
2 081 944
Membres
101 849
dernier inscrit
florentMIG