Bonjour,
je vous expose mon pb car j'ai rien trouvé la dessus
Jai plusieurs combobox, remplies à partir de plage de cellules, nommées.
Mais je souhaite que lorsque l'utilisateur du formulaire saisie une valeur non présente dans la list de la combobox, cette valeur soit automatiquement mise en mémoire et ajoutée à la liste nommée.
Donc j'ai crée plusieur macros pour cela, mais une bug subsite : dites moi ce que vous en pensez. Il me retourne l'erreur 13 (incompatibilité de type ) quand j'appelle la macro de la facon suivante
Application = ZoneApplication.Text ' ZoneApplication est une combobox
Call RajoutEntreeListe(Worksheets("Listes").Range("ListeApplication"), Application, UserForm1.ZoneApplication)
******
Public Sub RajoutEntreeListe(Plage As Range, Entree As String, Liste As Controls)
'Objectif : si l'utilisateur saisie une valeur dans une combobox,
'qui n'appartient pas à la liste de valeurs initiales, celle ci lui sera ajoutée
Dim UnePlage As Range
Dim DerniereLigne As Long
Dim Colonne As Long
Dim Comparaison As Boolean
Dim NomPlage As String
Set UnePlage = Plage
'Récupérer le nombre de ligne de la plage
DerniereLigne = StockNbLigne() 'macro qui récupère le numéro de la dernière ligne de la combobox
'Récupérer le numéro de la colonne de la plage de cellules
Colonne = UnePlage.Column
'Récupérer le nom déjà donné à la plage de cellules Plage:
NomPlage = Plage.Name
'Comparer la valeur de la saisie avec celles présentes dans la liste du contrôle
Comparaison = ComparerSaisieCombobox(Entree, Liste)
If Comparaison = True Then
'Mettre la valeur de l'entrée en dessous de la plage nommée
Cells(DerniereLigne + 1, Colonne) = Entree
'Supprimer le nom de la plage nommée
Call SupprimerNomPlage(Plage)
'Renommer la plage agrandie :
UnePlage.Resize(Plage.Rows.Count + 1).Name = NomPlage
End If
End Sub
***
Function ComparerSaisieCombobox(Saisie As String, Liste As Controls) As Boolean
Dim ControlIndex As Integer ' compteur de boucle
Dim NbLigne As Integer 'Nb ligne de la combobox
Dim ListeObjet As Object ' valeur déjà présente dans la combobox
Dim ValeurListe As String
'Récupérer le nombre de ligne de la combobox
NbLigne = Liste.ListCount
For ControlIndex = 0 To NbLigne - 1
' Récupérer la valeur (index (j)) de la combobox
Set ListeObjet = Liste.Item(ControlIndex)
ValeurListe = ListeObjet.Value
If Saisie Like ValeurListe Then
ComparerSaisieCombobox = True
Else
ComparerSaisieCombobox = False
End If
Next ControlIndex
End Function
****
Public Sub SupprimerNomPlage(PlageSupprimer As Range)
'
ActiveWorkbook.Names("PlageSupprimer").Delete
End Sub
Public Sub NommerPlage(PlageNommer As Range)
Dim Adresse As String
ActiveWorkbook.Names.Add Name:="PlageNommer", RefersToR1C1 _
:="adresse"
End Sub
***********
je vous expose mon pb car j'ai rien trouvé la dessus
Jai plusieurs combobox, remplies à partir de plage de cellules, nommées.
Mais je souhaite que lorsque l'utilisateur du formulaire saisie une valeur non présente dans la list de la combobox, cette valeur soit automatiquement mise en mémoire et ajoutée à la liste nommée.
Donc j'ai crée plusieur macros pour cela, mais une bug subsite : dites moi ce que vous en pensez. Il me retourne l'erreur 13 (incompatibilité de type ) quand j'appelle la macro de la facon suivante
Application = ZoneApplication.Text ' ZoneApplication est une combobox
Call RajoutEntreeListe(Worksheets("Listes").Range("ListeApplication"), Application, UserForm1.ZoneApplication)
******
Public Sub RajoutEntreeListe(Plage As Range, Entree As String, Liste As Controls)
'Objectif : si l'utilisateur saisie une valeur dans une combobox,
'qui n'appartient pas à la liste de valeurs initiales, celle ci lui sera ajoutée
Dim UnePlage As Range
Dim DerniereLigne As Long
Dim Colonne As Long
Dim Comparaison As Boolean
Dim NomPlage As String
Set UnePlage = Plage
'Récupérer le nombre de ligne de la plage
DerniereLigne = StockNbLigne() 'macro qui récupère le numéro de la dernière ligne de la combobox
'Récupérer le numéro de la colonne de la plage de cellules
Colonne = UnePlage.Column
'Récupérer le nom déjà donné à la plage de cellules Plage:
NomPlage = Plage.Name
'Comparer la valeur de la saisie avec celles présentes dans la liste du contrôle
Comparaison = ComparerSaisieCombobox(Entree, Liste)
If Comparaison = True Then
'Mettre la valeur de l'entrée en dessous de la plage nommée
Cells(DerniereLigne + 1, Colonne) = Entree
'Supprimer le nom de la plage nommée
Call SupprimerNomPlage(Plage)
'Renommer la plage agrandie :
UnePlage.Resize(Plage.Rows.Count + 1).Name = NomPlage
End If
End Sub
***
Function ComparerSaisieCombobox(Saisie As String, Liste As Controls) As Boolean
Dim ControlIndex As Integer ' compteur de boucle
Dim NbLigne As Integer 'Nb ligne de la combobox
Dim ListeObjet As Object ' valeur déjà présente dans la combobox
Dim ValeurListe As String
'Récupérer le nombre de ligne de la combobox
NbLigne = Liste.ListCount
For ControlIndex = 0 To NbLigne - 1
' Récupérer la valeur (index (j)) de la combobox
Set ListeObjet = Liste.Item(ControlIndex)
ValeurListe = ListeObjet.Value
If Saisie Like ValeurListe Then
ComparerSaisieCombobox = True
Else
ComparerSaisieCombobox = False
End If
Next ControlIndex
End Function
****
Public Sub SupprimerNomPlage(PlageSupprimer As Range)
'
ActiveWorkbook.Names("PlageSupprimer").Delete
End Sub
Public Sub NommerPlage(PlageNommer As Range)
Dim Adresse As String
ActiveWorkbook.Names.Add Name:="PlageNommer", RefersToR1C1 _
:="adresse"
End Sub
***********