|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 3 ![]() |
Bonjour le forum;
Passioné par les possibilités qu'offrent Excel et vba, je me décide enfin à mettre le pied à l'étrier . Etant donné la quantité de données à traiter à la main, je pense qu'une automatisation des tâches serait vraiment parfaite ! Le But : J'ai un tableau à réaliser pour localiser des pièces. Ce tableau contient : reference de la pièce et emplacement correspondant. Pas à pas : On appele le formulaire qui contient deux champs (ref et emplacement) On entre les données. On valide via la commande bouton OK (ou on annule la saisie) La macro vérifie si cette entrée existe déjà : si oui, un message le signale; si non, la macro prend la première ligne vide pour y insérer les cdonnées. Contrainte : Il faut que la macro soit capable de trier par ordre alphabétique au fur et à mesure des entrées. 1 mois maximum de délai Question : Est-ce faisable avec du temps à consacrer et (je pense) une bonne compréhension globale de l'infmmatique? J'ai tenté de bidouiller avec l'enregistreur de macros mais pas grand résultat... Je laisse le fichier en pièce jointe. Je cherche des pistes ou idées, pas de réponse toute faite. Merci par avance pour votre aide. Localisation pièce.xls |
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Bonjour,
Ton fichier doit être buggé car je n'arrive pas à l'ouvrir avec Excel 2003 (même en le renommant en .xslx, ça ne fonctionne pas). Ceci dit, ce que tu veux faire n'est pas bien sorcier avec un minimum de connaissances en VBA et du modèle objet Excel.
Si tu être guidé sans qu'on te donne un code pré-mâché, le mieux serait peut-être que tu commences à écrire ton code et nous dire où tu coinces. Bon courage! |
|
|
00
|
|
|
#3 | |||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Oui.
C'est cela qui est intéressant. Il faudra fournir vos tentatives entre les balises [code] et [/code]. Voir la conclusion. Ce n'est pas une bonne idée en tête d'une discussion. Le modérateur risque de supprimer le classeur. Lire Fichier joint dans vos discussions. 1. Décrire la feuille magasin de pièce avec des constantes nommées Citation:
Dans Excel, ouvrir le Visual Basic Editor (Alt+F11). Cliquez sur le VBE (Visual Basic Editor) menu "Insérer" > "Module" Module 1 est créé. Dans les propriétés de Module1, renommez Module1 en ModPiece. Dans la fenêtre d'Edition du module ModPiece, copier-coller, modifier et compléter le code VBA suivant : Code :
Si vous avez déjà commencé votre formulaire UserFormPiece, décrivez le. Postez votre code VBA UserFormPiece puis ModPiece entre les balises [code] et [/code]. ___________ En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.
|
|||
|
|
00
|
|
|
#4 | ||||||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 3 ![]() |
Bonsoir le forum, Mattchess,Sclarckone ;
J'ai ""bien avancé "". Le formulaire pour saisir la réf et l'emplacement est créé. J'ai corrigé l'ordre de tabulation dans le formulaire pour plus d'ergonomie. De plus j'ai affecté au bouton OK du formulaire une macro qui permet d'insérer les saisies clavier dans la colonne A pour la ref et dans la colonne B pour l'emplacement. voici le code utilisé : Code :
Je tente de faire en sorte que VBA remplisse la première ligne vide suivante. J'ai donc (en fouillant sur le forum) créé une variable (Ligne_vide) comme suit : Code :
MattChess : J'ai créé le module ModPiece comme vous me l'avez conseillé.Pour le moment, je ne vois pas comment l'intégrer dans ma feuille. J'ai pourtant le sentiment que ce n'est pas pour rien que vous m'avez donné cette piste.... Est-ce que ces lignes Code :
De plus pour répondre à votre question : La ref est de type String, l'emplacement de type Integer.Désolé de partir un peu dans tous les sens, j'ai trifouillé un peu à tout et je commence à me perdre Au cas où mes explications ne sont pas claires (ce qui est certainement le cas...) je laisse mon fichier qui est surment plus parlant. Je continue cependant à travailler sur ce que vous m'avez indiqué à votre première réponse! Merci par avance pour votre aide. Cordialement. |
||||||
|
|
00
|
|
|
#5 | ||||||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Citation:
Code :
Ligne_vide = Range("A65536").End(xlDown).Row + 1 Si tu veux écrire quelque chose dans la première ligne vide (dans la première colonne par exemple), tu peux alors utiliser: Code :
Cells(Ligne_vide, 1).Value = 'ce que tu veux Citation:
C'est-à-dire qu'au lieu d'écrire (par exemple, mais c'est inutile dans ton code); Tu écriras: Code :
Cells(rowFirstPiece, colPieceRef).Value = 'ce que tu veux |
||||||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 3 ![]() |
Merci bcp Sclarckone. Je ""bricole"" tout ça et reviens vers vous.
Merci ! |
|
|
00
|
|
|
#7 | ||||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
1. Revue de code du formulaire
Dans la fenêtre d'Edition de "formulaire" le code a initialement la forme suivante. Trouvez un nom plus explicite que le nom général de "formulaire" tel que frmAddRef qui indique qu'il s'agit d'un UserForm qui ajoute une référence. Code :
2. Version mieux présentée Comparez avec le début du code réécrit : Code :
Cela permet de forcer la déclaration des variables. 3. Le code source VBA du module ModPiece Dans la fenêtre d'Edition du module ModPiece, copier-coller le code VBA suivant : Code :
La fenêtre d'Exécution immédiate permet de tester des fragments de code pour apprendre VBA et lancer des procédures ou interroger VBA sur le résultat d'une fonction. C'est beaucoup plus rapide que le cycle de test dans le formulaire, même si en final on pourra intégrer les fonctions testées de ModPiece dans le code du formulaire. Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, copier-coller et valider par ENTER : 23/08/2011 VBA affiche la date dans la fenêtre d'Exécution immédiate. On notera en bleu foncé le résultat affiché par VBA. Notez le point d'interrogation en début de requête. C'est le raccourci de Debug.Print que l'on trouve dans la procédure AfficherReference() de ModPiece. 1 Il y a actuellement une référence dans la feuille "Localisation". Ref n° 1 MAT3214 en 1 Comme AfficherReference() est une procédure et non une fonction, elle ne retourne pas de résultat. Il n'y a pas lieu d'interroger VBA avec le "?" en tête de requête. True La référence "MAT3214" existe. False Ce n'est pas le cas de la référence "MATAHARI". True La référence "MATAHARI" a été ajoutée avec succès. Où ? Ref n° 1 MAT3214 en 1 Ref n° 2 MATAHARI en 69 Après " MAT3214" True Ref n° 1 ANGELINA en 0 Ref n° 2 MAT3214 en 1 Ref n° 3 MATAHARI en 69 5 Première ligne vide pour la prochaine référence. Code :
? Cells(Columns(colPieceRef).Rows.Count, colPieceRef).End(xlUp).Row + 1 C'est plus long à écrire mais c'est plus explicite que le Range("A65536"). Excel VBA doit interpréter la chaîne "A65536" pour extraire les coordonnées en style L1C1. C'est donc plus long en temps d'exécution qu'en style L1C1. Avec la forme Cells(ligne, colonne) du style L1C1, on lui donne directement l'information de ligne et colonne grâce à la constante colPieceRef identifiant la colonne A des références des pièces. On a préféré demander à VBA de calculer le nombre de rangée de la colonne colPieceRef plutôt que de voir un 65536 -- c'est le maximum d'un entier 16-bit non signé -- se balader dans le code sans avoir de constante nommée et commenté. 5. Questions sur les références Quel est le nombre maximum de références à saisir ? Avez-vous ces références déjà dans un fichier texte, que l'on peut visionner dans le BlocNote (NotePad) de Windows, ou dans un autre classeur .xls ? ___________ Si la discussion est résolue, vous pouvez cliquer sur le bouton En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.
|
||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com