Forcer des zones de listes à une case particulière

loic3869

XLDnaute Occasionnel
Bonjour

J’utilise des zones de listes est il possible de les forcer à une case blanche à l’ouverture ou à la fermeture du fichier ou même par l’action d’un bouton de commande ?

Merci.

Loic.
 

loic3869

XLDnaute Occasionnel
Re : Forcer des zones de listes à une case particulière

Quand j'exécute en pas à pas tout d'abord le programme commence par la ComboBox2 qui place à la case vide ensuite je passe à la ComboBox3 et là il va dans le programme de la ComboBox3 alors que quand il était à la combobox2 il n'est pas passé dans son programme.

Pour le Call o je ne peux pas le tester sur le portable car il faut installer un programme complémentaire que ne peux pas encore installé.

A+
 

Pierrot93

XLDnaute Barbatruc
Re : Forcer des zones de listes à une case particulière

Bonjour Loic

peut être comme ci dessous, en désactivant ponctuellement les procédures événementielles, mais sans voir le code et le fichier dans sa totalité, difficile de voir si cela suffira à résoudre ton problème...

Code:
Private Sub Workbook_Open()
Dim x As OLEObject
Application.EnableEvents = False
For Each x In Sheets("Feuil1").OLEObjects
    If TypeOf x.Object Is MSForms.ComboBox Then
        x.Object.ListIndex = -1
    End If
Next x
Application.EnableEvents = True
End Sub

bonne journée
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Forcer des zones de listes à une case particulière

Re

bon en fait il faut utiliser une variable public de typte booléenne. Dans le module "thisworkbook", événement "open" :

Code:
Private Sub Workbook_Open()
Dim x As OLEObject
b = True
For Each x In Sheets("Réglages").OLEObjects
    If TypeOf x.Object Is MSForms.ComboBox Then
        x.Object.ListIndex = -1
    End If
Next x
b = False
End Sub

dans un module standard, le module1 de ton classeur par exemple, sur la première ligne, la déclaration de la variable "public" :

Code:
Public b As Boolean

et le code de l'événement "change" de tous tes combo doit contenir ceci :

Code:
Private Sub ComboBox1_Change()
If b = False Then
'ton code
End If
End Sub

@+
 

loic3869

XLDnaute Occasionnel
Re : Forcer des zones de listes à une case particulière

Je teste et j'en reparle après.

Et j'ai un autre problème avec le calcul de norme. Dites moi si ça marche chez vous.

Moi j'ai une erreur de bibliothèque. Comment résoudre ce problème ?

Merci.
 

Pierrot93

XLDnaute Barbatruc
Re : Forcer des zones de listes à une case particulière

Re

pour ton erreur de bibliothèque, modifies la ligne comme suit :

Code:
Rang = Application.Index(Range("N2:N20000"), Application.Match([D29], [N2:N20000], 1))

pas top l'utilisation des crochets, renvoie l'évaluation des cellules concernées, préférable d'utiliser l'objet "range", enfin c'est juste mon avis...

@+
 

loic3869

XLDnaute Occasionnel
Re : Forcer des zones de listes à une case particulière

Je ne comprends pas bien pourquoi ça ne marche pas j'ai l'impression que le problème vient de mon portable. Est-ce possible ?
J'ai tapé votre ligne et j'ai une incomptabilité de type
erreur 13.
 

Pierrot93

XLDnaute Barbatruc
Re : Forcer des zones de listes à une case particulière

Re

peut être spécifier la feuille, si celle ci n'est pas active...

Code:
with Sheets("Nomdelafeuille")
Rang = Application.Index(.Range("N2:N20000"), Application.Match(.Range("D29"), .Range("N2:N20000"), 1))
End With
 

loic3869

XLDnaute Occasionnel
Re : Forcer des zones de listes à une case particulière

ça marche merci beaucoup.
Maintenant l'autre soucis est que le résultat ne s'inscris pas dans la case dont voici le programme:

Private Sub CommandButton3_Click()
Dim k As Long
Dim Rang As Double
Dim Al As Long


Dim plagerecherche As Range
Dim o As Object

'Set o = CreateObject("Function.Match")


Set plagerecherche = Worksheets("Réglages").Range("O2:O10000")
With Sheets("Réglages")
Rang = Application.Index(.Range("N2:N20000"), Application.Match(.Range("D29"), .Range("N2:N20000"), 1))
End With
Worksheets("Réglages").Cells(1, 1).Value = Rang
k = 0
For k = 1 To 10000

If (Worksheets("Réglages").Cells(k, 14).Value = Rang) And (Worksheets("Réglages").Cells(k, 14).Value) < Worksheets("Réglages").Cells(25, 3).Value Then
Worksheets("Réglages").Cells(29, 7).Value = Worksheets("Réglages").Cells(k, 15).Value

Exit For

End If

Next


With Sheets("Réglages")
Rang = Application.Index(.Range("N2:N20000"), Application.Match(.Range("D30"), .Range("N2:N20000"), 1))
End With
k = 0

For k = 1 To 10000

If (Worksheets("Réglages").Cells(k, 14).Value = Rang) And (Worksheets("Réglages").Cells(k, 15).Value) > Worksheets("Réglages").Cells(25, 3).Value Then
Worksheets("Réglages").Cells(30, 7).Value = Worksheets("Réglages").Cells(k, 15).Value

Exit For

End If

Next

With Sheets("Réglages")
Rang = Application.Index(.Range("N2:N20000"), Application.Match(.Range("D31"), .Range("N2:N20000"), 1))
End With
k = 0
For k = 1 To 10000

If (Worksheets("Réglages").Cells(k, 14).Value = Rang) And (Worksheets("Réglages").Cells(k, 14).Value) < Worksheets("Réglages").Cells(25, 3).Value Then
Worksheets("Réglages").Cells(31, 7).Value = Worksheets("Réglages").Cells(k, 15).Value

Exit For

End If

Next

End Sub

Qu'avez-vous vous quand vous cliquez sur "Calcul de la norme" ?

Merci d'avance.
 

Pierrot93

XLDnaute Barbatruc
Re : Forcer des zones de listes à une case particulière

Re

là suis largé, sais pas trop ce que devrait renvoyer les fonctions "index" et "match". Tu pars dans des boucles, mais suis pas sur que ce soit le meilleur moyen... A voir.... Peut pas t'aider plus sur ce coup...
 

Discussions similaires

Réponses
2
Affichages
316

Statistiques des forums

Discussions
315 132
Messages
2 116 581
Membres
112 797
dernier inscrit
zouzou50