XL 2010 Filtre de données et mise à jour

Horusbk

XLDnaute Junior
Bonjour,
NOTE: Pour des raisons de confidentialité les données que je vous présente sont fausses :)

Je possède un fichier qui liste toutes les commandes effectuées par des clients de ma société. Toutes les commandes sont listées dans un onglet "TOUT".
Ne maîtrisant pas très bien VBA je me tourne vers vous :

Mes collègues travaillent à plusieurs sur ce fichier (en mode partagé sur notre réseau) et chaque employé est responsable d'un dépôt.

Dans le fichier test, vous trouverez une feuille de classeur "FILTRE". Je voudrais que la combobox soient alimentées avec les différentes entrepôts (colonne C dans la feuille TOUT). Lorsque l'employé sélectionne un entrepôt il voit apparaître dans les cellules en dessous de la combobox toutes les commandes en relation avec cet entrepôt (la liste des commandes filtrées doit apparaître dans la feuille FILTRE).

Il peut modifier les lignes extraites grâce au filtre et les modifications doivent être mise à jour dans la liste globale de TOUT.

Je vous joins la base de mon fichier test (tableaux remplis, combobox présente et données fausses insérées).

Cordialement
Horusbk
 

Pièces jointes

  • Filtre et MAJ_test1.xlsm
    19.6 KB · Affichages: 35

Horusbk

XLDnaute Junior
Bonjour,
C'est exactement ce que je souhaite :) Néanmoins lorsque je modifie les extractions du filtre, les données ne sont pas mises à jour dans le global. Tu penses que c'est possible de faire ça ?

Cordialement.
Horusbk.
 

Jacky67

XLDnaute Barbatruc
Tu penses que c'est possible de faire ça ?
Re...
Un début de piste....
Un double clic sur la ligne de la liste des extractions ouvre un userform pour effectuer la modification.
Un clic sur le bouton "Valider la modification" fait une mise à jour de cette modification sur les deux feuilles ("Filtre" et "tout")



https://ensemblepoursacha.wordpress.com/
 

Pièces jointes

  • Filtre et MAJ_test2.xlsm
    40.6 KB · Affichages: 32

Horusbk

XLDnaute Junior
Re,
Franchement c'est parfait !

Une dernière question, quand je vais passer le code sur mon fichier final il y a beaucoup plus de champ que dans l'exemple. Je devrais modifier quoi dans le codage de l'userform ?

J'ai 24 colonnes et pour les colonnes 6 (F) et 8 (H) ce sont des heures et la colonne 17 (Q) une date.
Pour les label, est-il possible de pointer vers une cellule donnée ? Car parfois j'ai des en-têtes sur deux lignes dont la ligne du dessus est fusionnée pour regrouper en dessous d'elle trois colonnes.

Merci :)
 

Jacky67

XLDnaute Barbatruc
Re,
Franchement c'est parfait !

Une dernière question, quand je vais passer le code sur mon fichier final il y a beaucoup plus de champ que dans l'exemple. Je devrais modifier quoi dans le codage de l'userform ?

J'ai 24 colonnes et pour les colonnes 6 (F) et 8 (H) ce sont des heures et la colonne 17 (Q) une date.
Pour les label, est-il possible de pointer vers une cellule donnée ? Car parfois j'ai des en-têtes sur deux lignes dont la ligne du dessus est fusionnée pour regrouper en dessous d'elle trois colonnes.

Merci :)
Re..
Donne un exemple de la structure exacte du fichier final avec les entêtes.


https://ensemblepoursacha.wordpress.com/
 

Jacky67

XLDnaute Barbatruc
Voici :)

Je sais pas si c'est préjudiciable pour le codage, mais la structure des en-têtes et bonne mais PAS les intitulés.
RE..
Autre version en PJ
Je pense que tu as l'essentiel dans cet exemple.
Il t'appartient de mettre en place les éventuels contrôles de données entrées dans l'userform, si nécessaire.


https://ensemblepoursacha.wordpress.com/
 

Pièces jointes

  • Filtre et MAJ_test3.xlsm
    46.2 KB · Affichages: 42

Horusbk

XLDnaute Junior
Merci beaucoup Jacky :)
Il reste un petit soucis, j'ai passé le code sur mon fichier en modifiant mes cellules comme il faut (suppression de la fusion), modification des noms de combobox / userform... pour compiler avec les autres contrôles VB en place.

Par rapport au fichier test :
TOUT = Adaptation
filtre = VARIANTES

Lorsque je lance une recherche par la combobox dans Adaptation ( = TOUT du fichier test) il me surligne en jaune :
Code:
  Plage.Offset(1).Resize(Plage.Rows.Count - 1, Plage.Columns.Count).SpecialCells(xlCellTypeVisible).Copy Sheets("VARIANTES").[a4]

Le code complet de la page variantes :
Code:
Option Explicit
Dim Tmp As String, Tmp1 As String, Plage
Private Sub ComboBox21_Change()
Sheets("VARIANTES").Range("a4:aa" & Rows.Count).Clear
If ComboBox21.Value = "" Then Exit Sub
With Sheets("ADAPTATION")
  Set Plage = .Range("a3:aa" & .Cells.Find("*", , , , xlByRows, xlPrevious).Row)
  Plage.AutoFilter Field:=4, Criteria1:=ComboBox21.Value
  Plage.Offset(1).Resize(Plage.Rows.Count - 1, Plage.Columns.Count).SpecialCells(xlCellTypeVisible).Copy Sheets("VARIANTES").[a4]
End With
Plage.AutoFilter
End Sub
Private Sub Worksheet_Activate()
Dim F As Worksheet, i As Long, mondico, A(), temp
'auteur JB
Set F = Sheets("ADAPTATION")
Set mondico = CreateObject("Scripting.Dictionary")
A = F.Range("b3:b" & F.Cells(F.Rows.Count, "c").End(xlUp).Row)
For i = LBound(A) To UBound(A)
  If A(i, 1) <> "" Then mondico(A(i, 1)) = ""
Next i
'--avec tri
temp = mondico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Sheets("VARIANTES").ComboBox21.List = temp
'Sheets("VARIANTES").ComboBox21.Value = ""
End Sub

Sub Tri(A, gauc, droi)  ' Quick sort
Dim Ref As String, g As Long, d As Long, temp
Ref = A((gauc + droi) \ 2)
g = gauc: d = droi
Do
  Do While A(g) < Ref: g = g + 1: Loop
  Do While Ref < A(d): d = d - 1: Loop
  If g <= d Then
    temp = A(g): A(g) = A(d): A(d) = temp
    g = g + 1: d = d - 1
  End If
Loop While g <= d
If g < droi Then Call Tri(A, g, droi)
If gauc < d Then Call Tri(A, gauc, d)
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim i As Long, c
Cancel = True
With Sheets("VARIANTES")
  Set Plage = .Range("a4:aa" & .Cells.Find("*", , , , xlByRows, xlPrevious).Row)
End With
If Intersect(Target, Plage) Is Nothing Or [a4] = "" Then Exit Sub
With Sheets("ADAPTATION")
  Set Plage = .Range("a3:aa" & .Cells.Find("*", , , , xlByRows, xlPrevious).Row)
End With
Tmp = ""
LaligneTout = Target.Row
For i = 1 To 27: Tmp = Tmp & Cells(Target.Row, i): Next
For Each c In Plage.Rows
  Tmp1 = ""
  For i = 1 To 27: Tmp1 = Tmp1 & Sheets("ADAPTATION").Cells(c.Row, i): Next
  If Tmp = Tmp1 Then LaligneFiltre = c.Row
Next
UserForm1.Show
End Sub

En regardant mes différentes feuilles de calcul, après le message d'erreur et l'arrêt de la procédure VB, j'ai remarqué que le filtre s'effectuer toujours sur la colonne D de Adaptation ( = TOUT ; comme tu l'avais codé) alors que j'ai modifié le code ci-dessus pour que le filtre soit sur la colonne B.

Mon fichier est exactement dans la même configuration que le fichier test.

Encore merci ;)
 

Horusbk

XLDnaute Junior
Re,
Tout à fait, le classeur que tu m'as donné fonctionne.
Je te joins celui qui ne fonctionne pas, à filtrer sur la colonne B dans Adaptation (avec des données fausses).

De plus, comme mes collègues utilisent le filtre dans la feuille source, il y a pas un moyen de le désactiver via la macro et le replacer à la fin de la procédure ?
 

Pièces jointes

  • Commandes EXEMPLE.xlsm
    465.4 KB · Affichages: 51

Jacky67

XLDnaute Barbatruc
Re..
-Ton classeur fait appel à une feuille "Aide" inexistante
- Des validations de données sont présentes et font références à des données inexistantes
-Des cellules ayant comme résultat "Ref"
-Le gestionnaire de noms ==>les noms sans référence
-La structure qui change après chaque intervention
-Etc... etc....
Tu dois comprendre que dans ces conditions il m'est difficile pour ne pas dire impossible de faire du bon boulot sur ce classeur.
-si le filtre doit se faire sur la colonne 2
Remplacer cette ligne
Plage.AutoFilter Field:=4, Criteria1:=ComboBox21.Value
par
Plage.AutoFilter Field:=2, Criteria1:=ComboBox21.Value
Si la colonne de recherche doit contenir des données numériques, ce procédé ne fonctionnera pas.
On est très loin de l'exemple initiale qui était donné.
 
Dernière édition:

Horusbk

XLDnaute Junior
Bonjour Jacky67,

Merci pour ton aide, j'ai modifié la ligne correspondante et tout fonctionne parfaitement ! :)

-Des cellules ayant comme résultat "Ref"
-Le gestionnaire de noms ==>les noms sans référence
Excuses-moi pour ces deux problèmes, je t'avais transmis mon fichier final en enlevant les données confidentielles et ce, sans supprimer les formules et les références de plage.

SUJET RESOLU
 

Discussions similaires

Réponses
16
Affichages
580
Réponses
16
Affichages
629

Statistiques des forums

Discussions
314 644
Messages
2 111 528
Membres
111 189
dernier inscrit
Laurent.