Liste + recherche intuitive
Le piège a été de tenir compte dans le VBA de la zone qui définit l'en-tête de la première colonne des tableaux ! Mais c'est bon !
Bonsoir.
Le tableau prend vraiment forme avec l'outil recherche qui ouvre une saisie intuitive dès la 1er lettre tapée.
Les formules sont OK pour l'association au numéro unique !!!
Une autre petite avancée serait d'avoir une lecture dans le formulaire des 5ème colonnes pour y voir aussi la CIVILITE et le NOM (A,B, C, D, E)
Effectivement, pour une seule entreprise avec plusieurs contacts différents, le numéro unique, le lot, ou le nom de l'entreprise ne permet pas de rechercher le contact.
A quelle endroit du codage faut-il préciser les colonnes affichées dans le formulaire?
Je pourrais ajuster cela suivant l'onglet entrepise ou clients.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' si la cellule fait partie de la première ligne de la feuille
' ou
' s'il y a plusieurs lignes de sélectionnées
' ou
' si la colonne "active" de la sélection est supérieure à 2, alors on quitte
If Target.Row < 7 Or Target.Rows.Count > 1 Or Target.Column > 2 Then Exit Sub
' si la colonne active est inférieure à 2 et que le nombre de colonne dans la sélection est inférieur à 2 alors on quitte en faisant
'UNDO pour restaurer la valeur de l'id Potentiellement modifié
If Target.Column < 2 And Target.Columns.Count < 2 Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
Application.EnableEvents = False
If ActiveSheet.Cells(Target.Row, 1).Value = "" Then
ActiveSheet.Cells(Target.Row, 1).Value = "E-" & Format(Range("A6").Value + 1, "0000")
Range("A6").Value = Range("A6").Value + 1
ElseIf ActiveSheet.Cells(Target.Row, 2).Value = "" Then
ActiveSheet.Cells(Target.Row, 1).Value = ""
End If
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A4:C4")) Is Nothing Then Exit Sub
UserFormEnt.Left = 100
UserFormEnt.Top = 100
UserFormEnt.Show
End Sub
Merci pour vos avancements du projet.C'est super!
A quelle endroit du codage faut-il préciser les colonnes affichées dans le formulaire?
Je pourrais ajuster cela suivant l'onglet entrepise ou clients.
Bonjour,
Il faut intervenir dans la macro de l'userform
Par exemple, pour l'onglet client :
Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 2 ' *********** indiquer ici le nombre de colonnes
.ColumnWidths = "40;100" ' **************dimensionner la largeur de chaque colonne
End With
Me.ListBox1.List = Range("Tab_Cli[[" & Range("A6").Value & "]:[CLIENT]]").Value
End Sub
Private Sub TextBox1_Change()
Me.ListBox1.Clear
i = 0
For Each c In Application.Index(Range("Tab_Cli[[" & Range("A6").Value & "]:[CLIENT]]"), , 1) ' ******** modifier CLIENT > mettre l'en -tête de la dernière colonne à afficher
If UCase(c) Like "*" & UCase(Me.TextBox1) & "*" Or _
UCase(c.Offset(, 1)) Like "*" & UCase(Me.TextBox1) & "*" Then
Me.ListBox1.AddItem
Me.ListBox1.List(i, 0) = c.Offset(0, 0).Value
Me.ListBox1.List(i, 1) = c.Offset(0, 1).Value ' *********** ajouter les autres colonnes voulues à la suite
i = i + 1
End If
Next c
End Sub
Private Sub CommandButton1_Click()
flag = True
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
flag = False
End If
Next i
If flag Then
MsgBox "Choisir un item !"
Exit Sub
End If
ligne = 4
Range("A" & ligne).Value = Me.ListBox1.Column(0)
Range("B" & ligne).Value = Me.ListBox1.Column(1)
Me.Hide
End SubBonjour.
Je travail la mise en place de tous ces éléments sur mon fichier complet avec quelques ajustements sur l'affichage de l'userform.
Excellent !
Merci pour toute votre aide. Je vous fait un retour après avancement.
GOOD
Nous y voila !
Le fichiers est mis en place et tout fonctionne correctement.
A la copie du fichier sur le serveur et sous un autre nom, a l'ouverture message d'erreur : "La méthode 'Range' de l'objet '_Global' a échoué"
A l'ouverture du Débogage, erreur sur la feuille active :
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' si la cellule fait partie de la première ligne de la feuille
' ou
' s'il y a plusieurs lignes de sélectionnées
' ou
' si la colonne "active" de la sélection est supérieure à 2, alors on quitte
If Target.Row < 7 Or Target.Rows.Count > 1 Or Target.Column > 2 Then Exit Sub
' si la colonne active est inférieure à 2 et que le nombre de colonne dans la sélection est inférieur à 2 alors on quitte en faisant
'UNDO pour restaurer la valeur de l'id Potentiellement modifié
If Target.Column < 2 And Target.Columns.Count < 2 Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
Application.EnableEvents = False
If ActiveSheet.Cells(Target.Row, 1).Value = "" Then
ActiveSheet.Cells(Target.Row, 1).Value = "E-" & Format(Range("A7").Value + 1, "0000")
Range("A7").Value = Range("A7").Value + 1
ElseIf ActiveSheet.Cells(Target.Row, 2).Value = "" Then
ActiveSheet.Cells(Target.Row, 1).Value = ""
End If
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A4:C4")) Is Nothing Then Exit Sub
[Surligner] UserFormEnt.Left = 100[/Surligner]
UserFormEnt.Top = 100
UserFormEnt.Show
End SubLigne qui est surlignée en couleur = problème ? A quoi correspond ce paramètre
UserFormEnt.Left = 100
Après ce message, tout fonctionne correctement.
Voici les modifs que j'ai apportées :
1 - ligne 7 début du tableau (maj dans les codes)
2 - ligne supplémentaire qui affiche les éléments trouver via recherche. -- Ligne verrouillée.
Merci !!
UserFormEnt.Left = 100c'est pour caler l'userform dans l'écran
Si le reste fonctionne, supprime le.
Ma question est : quel est le nom donné à tes userform ? est-ce que le UserFormEnt existe ?
Bonjour, oui, UserFormEnt existe bien. Plus de soucis après avoir ouvert et fermé..
Je vais partager mon document avec mes collègues de travail pour une mise en situation complète.
Utilisation sur plusieurs machines via serveur.
Je marquerais résolu d'ici peu !COOL
Merci à vous ! Excellent !
Merci pour ce retour ...