probleme dans une base de données

robinhood

XLDnaute Occasionnel
Bonjour le Forum

j'ai une base de données qui comporte deux types de données :

1/ des données génériques, c'est-à-dire une référence générique avec plusieurs longueur
2/ des produits uniques, a chaque produit correspond une seule référence avec une seule longueur,

mon problème est que je travaille avec un fichier dont mon référentiel est la reférence, c'est a dire j'introduit la référence et le fichier fait les recherches dans la base de données, mais quand j'introduit une référence ganérique il choisit la première référence qui n'est pas forcément celle avec la bonne longueur,

existe t-il une solution pour que quand j'introduit une référence générique le fichier me propose de choisir une longueur parmi une liste pour avoir le bon produit,

Merci de votre aide

ci-joint le fichier descriptif.
 

Pièces jointes

  • robinhood.xls
    20.5 KB · Affichages: 89
  • robinhood.xls
    20.5 KB · Affichages: 90
  • robinhood.xls
    20.5 KB · Affichages: 88

Catrice

XLDnaute Barbatruc
Re : probleme dans une base de données

Bonjour,

Tu peux modifier le code comme ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Target.Row > 1 And Target.Rows.Count = 1 And Target.Columns.Count = 1 Then
If Target = "" Then Exit Sub
Application.EnableEvents = False
Set MaZoneRef = Sheets("Feuil2").Range("B2:" & Sheets("Feuil2").Range("B65536").End(xlUp).Address)
NbRef = Application.CountIf(MaZoneRef, Target)
Select Case NbRef
Case 0: Target = "Ref error !"
Case Is >= 1
Target.Offset(0, 6) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 1).Resize(1, 1).Value
Target.Offset(0, 5) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 2).Resize(1, 1).Value
Target.Offset(0, 8) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 3).Resize(1, 1).Value
Target.Offset(0, 7) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 4).Resize(1, 1).Value
Target.Offset(0, 1) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 4).Resize(1, 1).Value
Target.Offset(0, 2) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 5).Resize(1, 1).Value
End Select
End If
Application.EnableEvents = True
End Sub

Il faut supprimer la liste dans la feuille :
Cliquer sur "Mode Creation" (barre d'outils Visual Basic)
La liste apparait, la supprimer.
Cliquer à nouveau sur "Mode Creation"
 

robinhood

XLDnaute Occasionnel
Re : probleme dans une base de données

Bonjour

dans le dernier fichier joint (calcul rendement Forum), j'ai un petit souci, en faite quotidiennement je copie beaucoup de références d'un autre fichier et je les colle dans la colonne REF PROD, les informations ne s'affichent pas directement, je suis obligé de faire F2 puis Entrée pour que le fichier affiche les données,
existe t-il une méthode pour que ça se fasse automatiquement sans a avoir a faire F2 puis entrés.

voilà le code du ma macro actuelle :

Public MaDest
Private Sub ListBox1_Click()
Sheets("Feuil1").Range(MaDest).Offset(0, 7) = Sheets("Feuil1").ListBox1.Column(1)
Sheets("Feuil1").Range(MaDest).Offset(0, 6) = Sheets("Feuil1").ListBox1.Column(2)
Sheets("Feuil1").Range(MaDest).Offset(0, 9) = Sheets("Feuil1").ListBox1.Column(3)
Sheets("Feuil1").Range(MaDest).Offset(0, 8) = Sheets("Feuil1").ListBox1.Column(4)
Sheets("Feuil1").Range(MaDest).Offset(0, 1) = Sheets("Feuil1").ListBox1.Column(4)
Sheets("Feuil1").Range(MaDest).Offset(0, 2) = Sheets("Feuil1").ListBox1.Column(5)
Sheets("Feuil1").Range(MaDest).Offset(0, 12) = Sheets("Feuil1").ListBox1.Column(6)
Sheets("Feuil1").ListBox1.Visible = False
ActiveCell.Select
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And Target.Row > 1 And Target.Rows.Count = 1 And Target.Columns.Count = 1 Then
If Target = "" Then Exit Sub
Application.EnableEvents = False
Set MaZoneRef = Sheets("Feuil2").Range("B2:" & Sheets("Feuil2").Range("B65536").End(xlUp).Address)
NbRef = Application.CountIf(MaZoneRef, Target)
Select Case NbRef
Case 0: Target = "Ref error !"
Case 1
Target.Offset(0, 7) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 1).Resize(1, 1).Value
Target.Offset(0, 6) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 2).Resize(1, 1).Value
Target.Offset(0, 9) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 3).Resize(1, 1).Value
Target.Offset(0, 8) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 4).Resize(1, 1).Value
Target.Offset(0, 1) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 4).Resize(1, 1).Value
Target.Offset(0, 2) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 5).Resize(1, 1).Value
Target.Offset(0, 12) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 6).Resize(1, 1).Value
Target.Offset(0, 14) = MaZoneRef.Offset(Application.Match(Target, MaZoneRef, 0) - 1, 7).Resize(1, 1).Value
Case Else
With Sheets("Feuil1").ListBox1
MaPos = Application.Match(Target, MaZoneRef, 0) - 1
.ListFillRange = "Feuil2!" & MaZoneRef.Offset(MaPos, 0).Resize(NbRef, 7).Address
.ColumnWidths = "40;120;40;30;30;30;30"
.Width = 345
.Visible = True
.Top = Target.Top
.Left = Target.Left
End With
MaDest = Target.Address
End Select
End If
Application.EnableEvents = True
End Sub
 

Catrice

XLDnaute Barbatruc
Re : probleme dans une base de données

Bonjour,

Il suffit de faire une boucle sur les cellules que tu auras copié.
Mais le probleme, c'est comment gérer les fois où la liste s'affichera et où il y aura un choix à faire.
Comment veux tu faire fontionner tout ça ?
Renseigner toutes les données pour lesquelles il n'y a pas besoin d'intervention "humaine" et afficher les listes pour les autres et que l'opérateur fasse un choix pour chacune ?...
 

robinhood

XLDnaute Occasionnel
Re : probleme dans une base de données

Bonjour Catrice

il y a peut etre une solution, quand j'entre les réf je met les réf uniques regroupés en premier lieu et après je met les références génériques regroupés,
est il possible de créer une macro avec un userforme dans lequel je sélactionne la plage surlaquelle je veux effectuer l'opération F2 puis entrée.

j'espère que cette proposition apporte la solution.

Merci d'avance.:)
 

Catrice

XLDnaute Barbatruc
Re : probleme dans une base de données

Bonjour,

L'idée serait de boucler sur les Ref collées, mettre à jour les données pour lesquelles il n'y a pas d'ambiguité et mettre en couleur (par exemple) les cellules multi-choix.
En cliquant sur chaque cellule de couleur, une liste (comme dans la version actuelle) apparaitrait et permettrait de choisir la bonne Ref.

Si c'est ça que tu veux faire, je peux regarder mais je vais pas pouvoir le faire immédiatement ...
 
Dernière édition:

Catrice

XLDnaute Barbatruc
Re : probleme dans une base de données

Bonsoir,

ci-joint une solution bricolée sur le code existant, à optimiser ...

Une fois que tu as collé tes Ref, tu cliques sur le bouton.
Ca renseigne les valeurs uniques et identifie les multichoix.
Tu n'as plus qu'à aller renseigner les cellules marquées
 

Pièces jointes

  • Calcul Rendement FORUM.zip
    46.4 KB · Affichages: 41
  • Calcul Rendement FORUM.zip
    46.4 KB · Affichages: 39
  • Calcul Rendement FORUM.zip
    46.4 KB · Affichages: 38
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 819
Membres
104 676
dernier inscrit
akram1619