Petit programme en VBA... besoin d´aide

Petit programme en VBA... besoin d´aide - VB/VBA/VBS - Programmation

Marsh Posté le 17-05-2007 à 23:19:11    

Salut,
Je vais pas mentir, j´ai un programme VBA à faire pour un projet en cours, mais sachant que ça fait 5h au total qu´on a fait ça en cours, et que personne comprend rien, y compris moi, je vois vraiment pas comment je pourrai réaliser ce programme...
Donc si jamais quelqu´un aurait l´aimable volonté de réaliser ce programme (qui, à mon avis, ne doit vraiment pas être compliqué pour qqn s´y connaissant un tant soit peu), ce serait super.
Sinon, évidemment, vous pouvez simplement m´aider en m´indiquant quelques codes pour certains trucs demandés dans le sujet.
 
Merci d´avance aux éventuels personnes qui répondront ;)
 
Donc voici le sujet :
 
http://img243.imageshack.us/img243/3042/info1kd4.jpg
http://img84.imageshack.us/img84/5579/info2zl0.jpg
 
J´ai tout de même commencé à écrire quelques lignes en cours, mais je doute qu´elles soient correctes...
http://tmxrt.free.fr/1/VBA.xls
 
Merci d´avance ;)

Reply

Marsh Posté le 17-05-2007 à 23:19:11   

Reply

Marsh Posté le 18-05-2007 à 07:56:19    

Bonjour,
En s'y mettant à plusieurs on doit pouvoir t'aider.
1) C'est pour quand?
2) Expliques comment ton groupe pense structurer ses données
3) D'après ton module, tes notions de VBA sont à améliorer: as-tu réfléchi sur les actions réalisées par chaque ligne?
 
par exemple:
 Nom = InputBox("Entrer le nom du client:", "SAISIE", "0" )
.
.
.
.
 Nom = Worksheets("Clients" ).Cells(3, 1).Value
 
 
a)   tu demandes le Nom par inputbox
b)   tu mets dans Nom la value qui se trouve en cells(3,1)
 
3= ligne 3            1= colonne 1
Je suppose que tu veux faire "les contraires" :
  Worksheets("Clients" ).Cells(1, 3).Value = Nom
 
Maintenant: si tu boucles sur cette séquence: tu vois bien que tu vas recouvrir toujours la même ligne!!!!
Il faudrait alors remplacer le 1  par un indice: i que tu fais progresser
Oui, mais si tu arrètes ta saisie pour la reprendre après la pause café: catastrophe, tu reprends en ligne 1!!!!! Alors il faut rechercher sur le forum la manière de chercher la dernière ligne libre, ou de remplacer une ligne si le code client existe déjà.
 
Si tu crées un formulaire, tu pourras éviter tous tes inputbox....
C'est tout pour l'instant
 
Cordialement


Message édité par seniorpapou le 18-05-2007 à 07:57:09
Reply

Marsh Posté le 18-05-2007 à 10:01:06    

1 > Pour lundi 28 au plus tard ;)
2 > Structurer ses données, c'est à dire ? Selon la prof, il faut que nous réalisions pour chaque fonction (données clients, factures,...) des sous programmes ( Sub). Je sais pas trop si c'est de ça que tu me parlais ^^
 
3 > Depuis l'autre fois, on a eu un cours supplémentaire, du coup le fichier n'est plus à jour. Et effectivement, on a utilisé l'indice i pour passer à une nouvelle ligne. Enfaite, je pense, la partie pour la saisie des données clients à été faite ;)
Par contre, je n'ai jamais entendu parler de formulaire...
 
Je posterais le fichier lundi soir ;)
 
Merci déjà pour ces éclaircissement ! :)

Reply

Marsh Posté le 18-05-2007 à 13:38:22    

« je n'ai jamais entendu parler de formulaire... »
Tout l'ambiguité du vocabulaire Excel à cause des tradcutions.
On parle de feuille de calcul Excel et en langage VBA c'est des objets Sheet (ou même Worksheet).
Et paradoxalement quand on regarde l'explorateur de projet (ALT-F11, puis CTRL+R), on peut explorer une arborescence permettant de voir des « feuilles » qui sont en fait des formulaires (en VBA ce sont des objets Form).

 

Si tu insères une nouvelle « feuille » tu peux alors créer des formulaires de saisie élaborés, avec des controles, ...


Message édité par tegu le 18-05-2007 à 13:38:44
Reply

Marsh Posté le 19-05-2007 à 08:56:51    

Si je comprend bien, le formulaire se crée sous Excel simplement, et non sous le VBA ?
Si c'est bien ça, la prof ne veut pas... elle veut que tout soit fait sous forme de programme VBA.

Reply

Marsh Posté le 19-05-2007 à 09:44:15    

Bonjour,
http://cjoint.com/?ftjPlW0HA7
extraire les deux fichiers du zip et lancer le .htm
Juste pour donner un bref aperçu d'un formulaire en vb pour Excel
Cordialement

Reply

Marsh Posté le 19-05-2007 à 11:29:00    

Ok, merci ;)
On a jamais vu comment créé ça, donc je pense pas que ce soit cela que la prof veuille qu'on utilise.
Mais maintenant je saurais :)

Reply

Marsh Posté le 19-05-2007 à 13:25:00    

Re,
Bon, restons sur les input, je suppose que les maquettes des factures etc... sont faites?
 
pour le "programme" de recherche, sous vba tapes :  Find, puis tu surlignes, puis: touche F1 tu auras les infos pour chercher l'adresse d'une valeur  
 en plaçant les deux lignes
 
        i = Range(firstaddress).Row
        j = Range(firstaddress).Column
 
au bon endroit dans l'exemple tu auras les coordonnées demandées
Cordialement


Message édité par seniorpapou le 19-05-2007 à 13:26:14
Reply

Marsh Posté le 19-05-2007 à 20:04:59    

Oui j'ai créé les feuilles de factures ;)
Meric pour l'astuce :)

Reply

Marsh Posté le 21-05-2007 à 15:11:47    

Bonjour,
 
Voila le fichier mis à jour : http://tmxrt.free.fr/1/ProjetInfo.xls
 
Le programme pour entrer les données clients, ainsi que les feuilles excel sont correctes selon la prof.
 
Par contre, impossible d'arriver à créer le programme pour la recherche des données clients à intégré sur la facture... D'après ce que j'ai compris, il faut utiliser du "Do While", du "If, Then, Else", mais on n'y arrive pas :/
 
Si vous pouviez m'aider sur ce point (la question 4 enfaite), ça nous aiderez beaucoup ;)
 
Merci d'avance.

Reply

Marsh Posté le 21-05-2007 à 15:11:47   

Reply

Marsh Posté le 21-05-2007 à 21:35:35    

Bonsoir,
a) L'utilisation du find, proposée plus haut est-elle possible?
si non  
i = 2
Do While Not IsNull(Worksheets("clients" ).Cells(i, 1))
If numclient = Worksheets("clients" ).Cells(i, 1) Then
Worksheets("facture" ).Cells(1, 2).Value = Worksheets("clients" ).Cells(i, 1).Value
Worksheets("facture" ).Cells(2, 2).Value = Worksheets("clients" ).Cells(i, 2).Value
Worksheets("facture" ).Cells(3, 2).Value = Worksheets("clients" ).Cells(i, 3).Value
Worksheets("facture" ).Cells(4, 2).Value = Worksheets("clients" ).Cells(i, 4).Value
Worksheets("facture" ).Cells(5, 2).Value = Worksheets("clients" ).Cells(i, 5).Value
Worksheets("facture" ).Cells(6, 2).Value = Worksheets("clients" ).Cells(i, 6).Value
Worksheets("facture" ).Cells(7, 2).Value = Worksheets("clients" ).Cells(i, 7).Value
 Exit Do
 
Else
i = i + 1
End If
Loop
 
 
Cordialement
 
edit si c'est la question 4  : faire un programme.....
on peut  intégrer:
_____________________________________________________
Do While Not IsNull(Worksheets(nomdefeuille).Cells(i, nucol))
If numclient = Worksheets(nomdefeuille).Cells(i, nucol) Then
laligne=i
 Exit Do
 
Else
i = i + 1
End If
Loop
msgbox "pas de client...."
_______________________________________________________
dans une fonction  laligne (i as   ..., nomdefeuille as ...., nucol as ...., numclient as ...) as ....
qui ne délivre que la ligne du code cherché
 
pour chercher le i et le j dans un "range" donné, le "find" est quand même plus pratique que de mettre deux Do imbriqués. Voir plus haut


Message édité par seniorpapou le 21-05-2007 à 22:03:43
Reply

Marsh Posté le 22-05-2007 à 07:21:49    

Bonjour,
Je ne suis pas là de la journée, si quelqu'un peut faire avancer le schmilblik ce serait sympa.
Bien entendu: sans donner tout "tout cuit"
Cordialement


Message édité par seniorpapou le 22-05-2007 à 07:22:54
Reply

Marsh Posté le 23-05-2007 à 07:10:35    

Bonjour :)
 
"a) L'utilisation du find, proposée plus haut est-elle possible? "
Je ne pense pas, je vais donc prendre plutot la méthode donnée en dessous ;)
 
Les lignes de Worksheets, je les ais, mais par contre y'a qqles lignes de code dont je n'ai jamasi entendu parler, donc je ne sais pas trop si je peux les utiliser, ni à quoi elles correspondent :
- (Do While) Not IsNull(Worksheets("clients" ).Cells(i, 1))
- Exit Do
 
Ainsi que les dernières phrases...  
- dans une fonction  laligne (i as   ..., nomdefeuille as ...., nucol as ...., numclient as ...) as ....
qui ne délivre que la ligne du code cherché  
- pour chercher le i et le j dans un "range" donné  
 
Si vous pouviez me détailler un peu ces lignes, merci ;)
 
Merci pour votre aide :)

Reply

Marsh Posté le 23-05-2007 à 09:07:08    

Bonjour,
J'ai utilisé le Do While parce qu'il est cité plus haut, ce qui implique la connaissance du "loop" qui lui est associé.
Le "Exit Do" permet de sortir de la boucle Do de façon anticipée et d'enchainer immédiatement après le Loop qui lui est associé (à noter que le msgbox que j'ai placé n'est pas correct, il faut ajouter un test sur IsNull(Worksheets("clients" ).Cells(i, 1))...)
 
J'espère que votre prof admet que vous utilisiez le help de VB pour travailler, à moins qu'elle vous donne une liste exhaustive des instructions à utiliser.
 
 
Utilisation de la fonction Isnull:
elle renvoie True si le contenu de Worksheets("clients" ).Cells(i, 1)) est nul c'est le cas pour la ligne qui n'a pas de client
et renvoie False si un code client existe.
Not isnull  nous donne le contraire donc: le Do while Not Isnull... demande l'execution de la séquence tant que l'on trouve un code client en colonne 1.
 
 
 
POur les "dernières phrases", j'avais supposé (à tord apparemment) que la connaissance de l'écriture d'une fonction ou d'un subroutine était acquise.  Il va falloir demander au prof comment introduire le "programme" du 4) sans passer par des paramètres, à moins de connaître l'utilisation des variables "public" qui ne sont pas vraiment appropriées au problème.
Cordialement  
 
 
 
   
 
 
 
 
 
 
 
 

Reply

Marsh Posté le 24-05-2007 à 18:38:41    

Merci pour l'explication du "Exit Do"
 
On doit réaliser ce programme d'après ce qu'on est censé avoir appris... à savoir à peine 2-3 codes (du genre MSGBOX, Worksheets, Do While, If, etc, rien de plus développé...
 
Ce qui m'amène à dire qu'on a jamais vu la fonction Isnull :s Mais bon au pire on va essayer avec ça ;)
 
En tout cas, merci encore une fois ;)

Reply

Marsh Posté le 24-05-2007 à 18:57:55    

Bonsoir,
ceci est-il plus de niveau?
 
i = 2
Maxclient=250 'par exemple
aucun=true
 
Do While i<= maxclient+1
 
If numclient = Worksheets("clients" ).Cells(i, 1) Then  
Worksheets("facture" ).Cells(1, 2).Value = Worksheets("clients" ).Cells(i, 1).Value  
Worksheets("facture" ).Cells(2, 2).Value = Worksheets("clients" ).Cells(i, 2).Value  
Worksheets("facture" ).Cells(3, 2).Value = Worksheets("clients" ).Cells(i, 3).Value  
Worksheets("facture" ).Cells(4, 2).Value = Worksheets("clients" ).Cells(i, 4).Value  
Worksheets("facture" ).Cells(5, 2).Value = Worksheets("clients" ).Cells(i, 5).Value  
Worksheets("facture" ).Cells(6, 2).Value = Worksheets("clients" ).Cells(i, 6).Value  
Worksheets("facture" ).Cells(7, 2).Value = Worksheets("clients" ).Cells(i, 7).Value  
 aucun=false
ligneclient = i   'cela peut servir
 i=maxclient+2 'pour sortir tout de suite
Else  
i=i+1
End If  
 
Loop  
if aucun then msgbox "pas de client"
 
Cordialement


Message édité par seniorpapou le 24-05-2007 à 20:11:55
Reply

Marsh Posté le 24-05-2007 à 20:17:20    

@seniorpapou:
 
Une toute petit question sur le "do while Not Isnull" avec ce genre d'instruction je peux parcourir toutes les lignes de mon tableau jusqu'à la fin sans avoir à préciser sa taille, non?
 
Donc en gros je n'ai pas besoin de faire ça:
 
Do Until (Cells(s, 2) = "" And Cells(s + 1, 2) = "" )
s = s + 1
Loop
 
pour trouver la dernière nigne de mon tableau et rentrer "s" dans la macro qui suit, non?
 
Kiwi

Reply

Marsh Posté le 24-05-2007 à 21:13:52    

Bonsoir,
OUi, tu peux, mais une ligne est plus souvent utilisée pour trouver la première ligne disponible:
 
lignelibre = Sheets("Feuil1" ).Range("A65536" ).End(xlUp).Row + 1
 
Le do while.suppose qu'il n'y as pas de cellule vide dans la colonne testée (ici la colonne A de la feuill1)L'utilisation du  end(xlup) suppose que, dans la colonne testée, il n'y a pas de cellule vide pour une ligne non vide ( par exemple A10 vide et B10 non vide)
Je n'ai pas donné cette ligne de code dans ce fil puisque les connaissances sont supposées restreintes.
Cordialement
 
Edit: regarder le  End pour Excel dans help VB
Edit du Edit:    
http://jacxl.free.fr/cours_xl/cour [...] ml#der_cel
peut servir


Message édité par seniorpapou le 25-05-2007 à 07:15:11
Reply

Marsh Posté le 24-05-2007 à 22:48:22    

@ Apparement ces lignes de codes correspondent mieux vu qu'elles n'utilisent que des codes que "je connais" ;)
 
Je pense donc qu'on pourra convenablement finir ce programme lundi, merci seniorpapou pour ta grande aide ;)

Reply

Marsh Posté le 25-05-2007 à 19:51:46    

@seniorpapou:
 
thanks a lot pour les infos ;)

Reply

Marsh Posté le 28-05-2007 à 23:20:07    

Bon et bien finis le projet ce matin (enfin pas vraiment fini, pas eu le temps...)
On verra bien ce que ça donne...
 
Merci en tout cas ;)

Reply

Marsh Posté le 29-05-2007 à 07:29:50    

Comment dit-on bonne chance??
M....

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed