BAse de donnée, pb avec les additems

Résolu
miliies Messages postés 16 Date d'inscription dimanche 17 septembre 2006 Statut Membre Dernière intervention 11 novembre 2006 - 15 oct. 2006 à 23:18
miliies Messages postés 16 Date d'inscription dimanche 17 septembre 2006 Statut Membre Dernière intervention 11 novembre 2006 - 16 oct. 2006 à 17:23
Salut, j'ai un pb avec ma base de donnée, ellle étaiat précedement sur word et je l'ai transférée sur excel depuis. J'ai un tableau de quatres colonnes qui se compose ainsi: désignation, référence, nb carton et palette. J'aimerai créer un userform qui me permette d'avoir accès à mes données à partir du n° de palette. Genre pour la palette n°15 afficher les trentes références qui la composent dans des textbox ou des combobox. J'ai essayé par additems mais c très loqurd, je n'y arrive pas et j'ai à peut prêt 300 palettes à enregistrer! A l'aide! Je ne voit pas comment faire!

milies

10 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
16 oct. 2006 à 17:04
Deux questions pour être sur :
La colonne 4 (donc D) de ta feuille 1 est bien celle qui s'appelle Palette et qui donc, contient les numéros de palettes à récupérer ?
Tu marques bien dans la cellule A1 de la feuille 2, le numéro de la palette que tu veux afficher ?

Heu .. je viens de voir un autre pb, j'ai inversé les feuilles  ... Bon, je vais tester chez moi ...

Allez, finis de rigoler, je viens de tester chez moi (et j'ai retrouvé une autre erreur, enfin, un truc qui ne servait à rien lputôt ^^).
Donc, voici un code qui fonctionne, foi de Molenn !!

   Dim i As Integer


   'Détermination de la dernière ligne de la base de données
   Dim NumLigne As String
   NumLigne = Worksheets("Feuil1").Range("A1").End(xlDown).Address
   NumLigne = Right(NumLigne, (Len(NumLigne) - InStrRev(NumLigne, "$", , vbTextCompare)))
  
   'Numéro de la ligne Saisie
   Dim NumLigneSaisie As String
   NumLigneSaisie = Worksheets("Feuil2").Range("A2").End(xlDown).Address
   NumLigneSaisie = Right(NumLigne, (Len(NumLigne) - InStrRev(NumLigne, "$", , vbTextCompare)))
   If NumLigneSaisie <> "65536" Then
      Worksheets("Feuil2").Range("A3:C" & NumLigneSaisie).ClearContents
   End If
  
   NumLigneSaisie = 3


   For i = 1 To NumLigne
      If Worksheets("Feuil1").Cells(i, 4).Value = Worksheets("Feuil2").Range("A1").Value Then
            Worksheets("Feuil2").Cells(NumLigneSaisie, 1).Value = Worksheets("Feuil1").Cells(i, 1).Value
            Worksheets("Feuil2").Cells(NumLigneSaisie, 2).Value = Worksheets("Feuil1").Cells(i, 2).Value
            Worksheets("Feuil2").Cells(NumLigneSaisie, 3).Value = Worksheets("Feuil1").Cells(i, 3).Value
            NumLigneSaisie = CInt(NumLigneSaisie) + 1
      End If
   Next i

A mettre bien entendu dans le code du bouton.
Voilà voilà,

Molenn
3
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
16 oct. 2006 à 09:11
C'est pas très logique je trouve ... Tu as une base de données en 4 colonnes, et ta palette possède 30 références ? Comment est-elle donc constituée cette base ?

Mais autrement, si tu es déjà sous Excel, tu n'as pas besoin de faire un userform pour afficher tes références, c'est même sans doute plus efficace de passer par des formules EXCEL (à base de RECHERCHEV et RECHERCHEH).

Dernière question : Quel rapport entre afficher les référence d'une palette n°15 par ex, et avoir 300 palettes à enregistrer ?
Tu veux consulter tes données déjà existantes, ou tu veux te créer une interface de saisie ?

Molenn
0
miliies Messages postés 16 Date d'inscription dimanche 17 septembre 2006 Statut Membre Dernière intervention 11 novembre 2006
16 oct. 2006 à 10:32
Ok, heu en fait mon tableau se compose de mes quatres colonnes:désignation   Référence nb     cartons  Palette
                                                                                                     Outillage      452111542        2             1
                                                                                                      râteau           452111542         3           1

Je remet le n° de la palette à chauqe fois! J'aimerai pouvoir créer un userform de saisie qui me permette par la suite de trouver et imprimer les références pour un palette donnée. J'ai déjà crée le formulaire de saisie pour remplir ces colonnes. je peux certainement utiliser ton système de rechercheV , mais est-ce possible de le faire sur une autre feuille? Par exemple dans cette autre feuille je saisie le n° de ma palette et les articles s'affichent.? je suis désolée mais je suis débutante!  En tout ca smerci de répondre aussi rapidement!
milies
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
16 oct. 2006 à 13:27
Oui, c'est tout à fait possible à partir d'une autre feuille.
Par contre, ça va poser un pb dans le sens où je n'avais pas tilté au début, tu peux avoir plusieurs fois le même numéro de palette dans tes références (ce n'est donc pas une clé primaire).

En Excel, la solution consisterait pour toi à utiliser les filtres élaborés (j'avais fait toute une explication dans un post à ce sujet, mais je ne le retrouve pas et j'ai la flemme de parcourir tous mes messages pour le retrouver ^^ ... tu as un tutoriel à cette adresse : http://www.ybet.be/formation_excell/13-filtre-elabore.htm )
Ca répond à ton besoin de manière ponctuelle. Ce n'est pas l'idéal à utiliser dans une macro (et surtout, les résultats doivent être affichés dans la même feuille que celle où sont tes données).

Il faut donc coder : Comment remplis tu actuellement tes combo box et tes textBox ?
Parce que l'idée va être de créer une boucle sur la longueur de ta base de donnée, de contrôler le contenu de la colonne Palette et de voir s'il correspond à la palette sélectionnée, puis d'ajouter les objets). Tu peux remplir des cellules Excel plutôt que des textbox.

Ca ressemblerait à un truc comme ça :
Feuil1 = Base de données
Colonne A : désignation   
Colonne B : Référence
Colonne C : nb
Colonne D : cartons 
Colonne E : Palette

Feuil2 = Saisie
La cellule A1 servira de sélection : tu tapes dedans le n° de la palette que tu veux consulter.Tu reportes les noms de colonnes dans les cellules de la ligne 2 : A2 Désignations, B2 Référence,  ...
Et tu vas dessiner un bouton sur ta feuille : on va lui donner un code qui va afficher tous les objets avec le n° de ta palette, à partir de la ligne 3 de la Feuil2

NumLigne : correspond à la dernière ligne de ta base de données, tu peux l'entrer en dur, ou la recalculer à chaque fois, je ne sais pas comment tu fonctionnes ^^
Personnellement, je fais comme ça, mais chacun sa méthode :p
NumLigne est le numéro de la dernière ligne de ma feuille (ce qui suppose bien entendu qu'il n'y ait pas de lignes vides)

Private sub Palette_Click()

   Dim i as integer

   'Détermination de la dernière ligne de la base de données
   Dim NumLigne as String
   NumLigne = Worksheets("Feuil1").Range("A1").End(xlDown).Address
   NumLigne = Right(NumLigne, (Len(NumLigne) - InStrRev(NumLigne, "$", , vbTextCompare)))
   
   'Détermination de la dernière ligne de la feuille de saisie
   Dim NumLigneSaisie as String
   NumLigneSaisie = Worksheets("Feuil1").Range("A1").End(xlDown).Address
   NumLigneSaisie = Right(NumLigne, (Len(NumLigne) - InStrRev(NumLigne, "$", , vbTextCompare)))
   if NumLigneSaisie = "65536" then
      NumLigneSaisie ="3"
   end if

   For i = 1 to NumLigne 
      if worksheets("Feuil1").cells(i,5).value = worksheets("Feuil1").range("A1").value then
            worksheets("Feuil2").cells(NumLigneSaisie ,1).value =  if worksheets("Feuil1").cells(i,1).value 
            worksheets("Feuil2").cells(NumLigneSaisie ,2).value =  if worksheets("Feuil1").cells(i,2).value 
            worksheets("Feuil2").cells(NumLigneSaisie ,3).value =  if worksheets("Feuil1").cells(i,3).value 
            worksheets("Feuil2").cells(NumLigneSaisie ,4).value =  if worksheets("Feuil1").cells(i,4).value 
            NumLigneSaisie = cint(NumLigneSaisie) + 1
      end if
   Next i

End Sub

Ca reste assez indicatif, je n'ai pas eu le temps de tester, mais l'idée générale est là.

Molenn
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
miliies Messages postés 16 Date d'inscription dimanche 17 septembre 2006 Statut Membre Dernière intervention 11 novembre 2006
16 oct. 2006 à 14:17
Ok c exactememnt ce que je recherche sauf que ça me met une erreure de syntaxe au niveau
worksheets("Feuil2").cells(NumLigneSaisie ,1).value =  if worksheets("Feuil1").cells(i,1).value 
je débute, je comprend pas toute les fonctions de ce code et j'arrive pas à le déplanter! lol

milies
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
16 oct. 2006 à 14:49
Oups, c'est ma faute ... Saletés de copier/coller
Enlève le if pour les 4 lignes ...

La formule, c'est :
worksheets("Feuil2").cells(NumLigneSaisie ,1).value =  worksheets("Feuil1").cells(i,1).value 

Molenn
0
miliies Messages postés 16 Date d'inscription dimanche 17 septembre 2006 Statut Membre Dernière intervention 11 novembre 2006
16 oct. 2006 à 15:22
Ok c'est ce que j'ai fait mais rien ne s'affiche!
Le code est déplanté mais ça n'a pas l'air de fonctionner!
La je capte plus rien !LOL je suis un peu perdue!
milies
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
16 oct. 2006 à 15:58
Je viens de voir une autre erreur dans mon code (décidément, on ne devrait jamais mettre un code qui ne soit pas testé !)

 if worksheets("Feuil1").cells(i,5).value = worksheets("Feuil2").range("A1").value then

Forcément, on compare le contenu de toutes les cellules avec le contenu de A1 sur la feuille 1, ça ne risquait pas de fonctionner
Je n'en vois pas d'autres pour le moment, mais ce n'est pas pour ça qu'il n'y en a pas ^^

Molenn
0
miliies Messages postés 16 Date d'inscription dimanche 17 septembre 2006 Statut Membre Dernière intervention 11 novembre 2006
16 oct. 2006 à 16:27
heu toujours pas , malgrès les corrections, est-ce du au fait que je n'ai que 4 colonnes voilà ce que j'ai :
Private Sub Palette_Click()


   Dim i As Integer


   'Détermination de la dernière ligne de la base de données
   Dim NumLigne As String
   NumLigne = Worksheets("Feuil1").Range("A1").End(xlDown).Address
   NumLigne = Right(NumLigne, (Len(NumLigne) - InStrRev(NumLigne, "$", , vbTextCompare)))
  
   'Détermination de la dernière ligne de la feuille de saisie
   Dim NumLigneSaisie As String
   NumLigneSaisie = Worksheets("Feuil1").Range("A1").End(xlDown).Address
   NumLigneSaisie = Right(NumLigne, (Len(NumLigne) - InStrRev(NumLigne, "$", , vbTextCompare)))
   If NumLigneSaisie = "65536" Then
      NumLigneSaisie = "3"
   End If


   For i = 1 To NumLigne
      If Worksheets("Feuil1").Cells(i, 4).Value = Worksheets("Feuil2").Range("A1").Value Then
            Worksheets("Feuil1").Cells(NumLigneSaisie, 1).Value = Worksheets("Feuil2").Cells(i, 1).Value
            Worksheets("Feuil1").Cells(NumLigneSaisie, 2).Value = Worksheets("Feuil2").Cells(i, 2).Value
            Worksheets("Feuil1").Cells(NumLigneSaisie, 3).Value = Worksheets("Feuil2").Cells(i, 3).Value
       
            NumLigneSaisie = CInt(NumLigneSaisie) + 1
      End If
   Next i


End Sub

milies
0
miliies Messages postés 16 Date d'inscription dimanche 17 septembre 2006 Statut Membre Dernière intervention 11 novembre 2006
16 oct. 2006 à 17:23
Super j'ai tout qui fonctionne parfaitement c génial je te remercie beaucoup, ça vas beaucoup m'aider pour gérer les stocks de ma boutique! , surtout ca ira plus vite! lol
Grand MERCI

milies
0
Rejoignez-nous