miliies
Messages postés16Date d'inscriptiondimanche 17 septembre 2006StatutMembreDernière intervention11 novembre 2006
-
15 oct. 2006 à 23:18
miliies
Messages postés16Date d'inscriptiondimanche 17 septembre 2006StatutMembreDernière intervention11 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!
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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 ?
miliies
Messages postés16Date d'inscriptiondimanche 17 septembre 2006StatutMembreDernière intervention11 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
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
miliies
Messages postés16Date d'inscriptiondimanche 17 septembre 2006StatutMembreDernière intervention11 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
miliies
Messages postés16Date d'inscriptiondimanche 17 septembre 2006StatutMembreDernière intervention11 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
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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 ^^
miliies
Messages postés16Date d'inscriptiondimanche 17 septembre 2006StatutMembreDernière intervention11 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
miliies
Messages postés16Date d'inscriptiondimanche 17 septembre 2006StatutMembreDernière intervention11 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