VBA excel copie valeurs avec condition

Fermé
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 - 23 avril 2008 à 19:35
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 29 avril 2008 à 11:28
Bonjour,
En tant que parent d’élève, je m’occupe d’une coopérative scolaire. Afin de faciliter la saisie des commandes, j’essaie de mettre en place un programme.
Voici mon problème.
J’ai un tableau excel sur lequel j’effectue la commande des quantités d’articles par élève. Il s’agit de l’onglet appelé « Commande » avec les infos suivantes : NOM, Prénom, Classe, N° de commande,
N° article quantité prix total
Je saisis le N° d’article et la quantité, le prix et total sont en automatique.
Je désire qu’à la fin de la saisie en cliquant sur un bouton de commande, toutes ces informations viennent alimenter un tableau qui se trouve sur l’onglet « Suivi commande ». Le tableau se présente sous cette forme (1 ligne par commande) :
N° commande, NOM, Prénom, 1,2,3,4,…….,80 (ces chiffres correspondent aux N° des articles)
J’ai réussi pour le nom, prénom, N° de commande dont voici le code ci-dessous :
' reporte les nom, prénom et n° commande et total
Worksheets("Suivi commande").Select
With Worksheets("Suivi commande").Range("a2:a65535")
Set c = .Find("", LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
c.Select
End If
a = ActiveCell.Row
Sheets("Suivi Commande").Range("A" & a) = Cells(5, 3)
Sheets("Suivi Commande").Range("b" & a) = Cells(3, 3)
Sheets("Suivi Commande").Range("c" & a) = Cells(3, 5)
Sheets("Suivi Commande").Range("cf" & a) = Cells(6, 5)

Par contre, j’ai essayé (en m’aidant d’exemples car je ne suis pas expert en VBA) pour rapatrier la quantité sous l'article concerné (1 colonne pour chaque article) mais impossible. En effet, je ne peux pas copier ma ligne car les parents ne commandent paque certains articles.

Quelqu’un peut-il m’aider ? Merci d'avance
Linette 44
A voir également:

6 réponses

michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
23 avril 2008 à 20:14
Bonsoir,

Tu as un décalage de 3 colonnes (N° comm, nom, prénom) donc si on a commandé X qté de l'article 10... X sera porté dans la colonne 10+3= 13 dans ta feuille de suivi

donc
col=3+ cellule renvoyant le numéro de l'article
shets("suivi...etc").cells(a,col)=cellule renvoyant la quantité commandée

Bonne soirée
Michel
0
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 3
23 avril 2008 à 21:10
Merci pour ta réponse Michel,
Le problème c'est que dans mon tableau de commande je saisis uniquement les articles commandés donc les cellules articles et quantités varient en fonction des commandes.

Exemple :
Jacques commande
article 2 (cellule B8) quantité 10 (cellule D8 )
article 25 (cellule B9) quantité 5 (cellule D9).....

Jean commande
article 5 (cellule B8) quantité 3 (cellule D8 )
article 10 (cellule B9) quantité 4 (cellule D9).....

Cordialement
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313 > linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008
24 avril 2008 à 09:26
bonjour,

j'vois pas trop où estt le pb mais....

REnvoie un extrait de ton classeur sans données confidentielles pour qu'on soit + concrets

pour envoyer une PJ:
www.cjoint.com

A+
Michel
0
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 3 > michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
24 avril 2008 à 23:26
Bonsoir,

Voici le lien pour la pièce jointe :
https://www.cjoint.com/?eyxwvr40Ov

Merci d'avance de ton aide
Linette
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
25 avril 2008 à 10:15
Bonjour,

Ci dessous proposition de macro:

Sub suivre_les_commandes()
Dim numero_art As Byte, qte_art As Byte ' pour demo et test
Dim derlig As Integer, lig_vide As Integer
Dim tablo()

With Sheets("commande")
'dernière ligne de commande
derlig = .Range("B65536").End(xlUp).Row
'construit un tableau de 3 colonnes (article désign qté: désign est inutile mais permet _
une construction facile du tableau) par le nombre d'articles différents commandés
tablo = .Range("B8:D" & derlig).Value
End With

With Sheets("suivi commande")
'Eléments fixes
'1° ligne vide
If Range("B3") = "" Then
lig_vide = 3
Else
lig_vide = Sheets("suivi commande").Range("B65536").End(xlUp).Row + 1
End If
'n° commande
.Cells(lig_vide, 1) = Sheets("commande").Range("C5")
'nom
.Cells(lig_vide, 2) = Sheets("commande").Range("C3")
'prénom
.Cells(lig_vide, 3) = Sheets("commande").Range("E3")
'Eléments variables
For cptr = 1 To UBound(tablo)
'demo pas à pas pour tester et comprendre:
'numero_art = tablo(cptr, 1)
'qte_art = tablo(cptr, 3)
'.Cells(lig_vide, numero_art + 3) = qte_art

.Cells(lig_vide, tablo(cptr, 1) + 3) = tablo(cptr, 3)
Next
End With
' NE PAS OUBLIER DE NETTOYER LA FEUILLE COMMANDE
'With Sheets("commande")
'.Range("B8:D" & derlig).Clearcontents
'etc.
End Sub


En espèrant que...

Michel
0
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 3
25 avril 2008 à 23:30
Désolé Michel de te remettre à contribution, mais les valeurs N° commande, Nom, Prénom, Qté d'articles se copient sur la ligne de la feuille ("commande") au lieu d'aller se copier sur la feuille ("suivi commande").
J'ai essayé plusieurs modifications mais comme je ne maîtrise pas le langage VBA, je n'ai pas obtenu le résultat désiré.
Peux-tu m'aider ?
D'avance merci
Linette
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
26 avril 2008 à 12:48
Bonjour,

Chez moi ça marchait mais peut être avais tu mis la macro où il ne fallait pas...

ci joint l'ensemble classeur+macros
https://www.cjoint.com/?eAmHasbmsY

Modif apportées:

1/J'ai installé une vérif -au moins 1 article commandé- avant de lancer "suivre les commandes" cette ligne se trouve dans le module feuille du bouton

2/ J'ai modifié la présentation de l'entête de "suivi commandes" à cause des cellules fusionnées qui sont une technique à proscrire autant que possible: ça fout un B... pas croyable dans les macros!

3/ A la fin, un message t'avertit de la validation et ensuite la feuille "commandes" est nettoyée

4/ Le report du montant colonne CF) avait été oublié: je l'ai ajouté après 1 premier essai...

T'essayes et tu me dis...



Comme tu t'intéresse aux coopés scolaires, je t'indique un lien où tu pourrais télécharger (gratuit) une compta de coopé suivant les normes. Ca a été réalisé par un grand Chef( pseudo: Ti) à 3 plumes de la tribu Excel.

http://www.veriti.net/download.php?lng=fr&pg=347

Bon WE

Amicalement
Michel
0
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 3
27 avril 2008 à 23:25
Bonsoir,
Cela fonctionne.

La coopérative dont je m'occupe permet aux parents d'élèves de passer une commande de fourniture scolaire (cahiers, crayons....) en juin avec une distribution en septembre. Cela représente 300 commandes à peu près.

Le programme avait été commencé par un informaticien qui n'a pas pu le terminer. Je l'ai donc repris mais avec mon peu de connaissance, ce n'est pas évident.

Je rencontre un nouveau problème (le dernier normalement) concernant la saisie des paiements. La saisie se fait dans des textbox qui sont copiées dans des cellules excel (feuille "données") afin de faire les calculs. Les montants étant des chiffres numériques (2 chiffres après la virgule) cela pose problème. Certaines cellules excel ont des triangles et ne reconnaissent pas les chiffres.
Le paiement peut se faire en bons (saisie en cliquant sur des optionbutton) et si je fais 2 saisies un beug arrive.

Si tu as la possibilité et le temps de regarder, je te joins le fichier : https://www.cjoint.com/?eBxbilPe27

Merci pour l'aide que tu m'as déjà apportée.

Amicalement
Linette
0
salut,
j'ai un tableau à remplir pour cela je veux creer un userform qui me permet d'entrer les valeurs correspandantes dans les champs correspand
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
28 avril 2008 à 16:02
Haniss,

Créee ton propre message m^me si la question estt proche!
sinon on ne s'y retrouvera pas dans celui là

C'est pas vrai, ces newbies!
0

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

Posez votre question
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
28 avril 2008 à 18:01
Bonsoir Linette,

Ci joint les modifs:
https://www.cjoint.com/?eCrUZ2IeAt

Si j'ai bien compris ta demande:
1/ le bug de l'optionbutton2 est résolu
2/ les différentes valeurs s'affichent avec 2 décimales (quand tu quittes le contrôle)

J'ai renommé les contrôles de l'userform car les appellations comme textbox248, commandbutton7 sont un cauchemar pour celui qui découvre le programme. J'ai donc essayé de mettre des noms mnémotechniques.

J'ai supprimé également ces horreurs que sont les "goto" et 2 ou 3 trucs à mon avis inutiles.

Enfin, dans l'onglet liste la dernière cellule était sur la ligne 3550 ou presque: bonjour l'encombrement du classeur! j'ai rectifié

La simplification du code (?) et surtout la rectification de la ligne 3550 ont allègé le classeur de 150Ko

J'ai fait des essais, ca a l'air de bien marcher; mais essaies de ton coté et dis-moi.

Bonne soirée
Amicalement
Michel

Ps: penses à protéger ta feuille "commande"
0
linette44 Messages postés 23 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 20 mai 2008 3
28 avril 2008 à 23:43
Bonsoir Michel,
Du vrai travail de pro.... et dire que cela fait 2 mois que je galère pour trouver une solution.

J'ai donc testé et voici mes interrogations :
1 - La saisie des montants dans les textbox doit se faire avec la virgule. Si on utilise le point, le programme beug.
Quand j'ai utilisé le point, cela a beugé et ma commande s'est enregistrée plusieurs fois au niveau de la feuille "suivi commande". Est-il possible que la saisie puisse se faire soit avec le point, soit avec la virgule ?
Si ce n'est pas possible, j'ajouterai un commentaire pour demander d'utiliser la virgule. Mais c'est vrai que sur un clavier numérique on a tendance à utiliser le point surtout si la saisie des Nom et prénom se fait en majuscule.

2- dans la feuille "liste", les cellules de la colonne "acompte" apparaissent avec un commentaire (triangle vert) lors de l'alimentation. Mais la somme se fait bien en bas de tableau, je pense donc qu'il n'y pas d'autres incidences.

3 - Quand tu parles de protéger la feuille "commande", je vais protéger les cellules non saisissables avec la fonction Données validation. Je pense que cela suffit.

Je vais réintégrer tranquillement tout ce langage dans mon programme mercredi et cela devrait rouler. L'avantage c'est que tu as vraiment allégé le code et il est nettement plus facile de se repérer.

Encore Merci
Amicalement
Linette
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
29 avril 2008 à 11:28
Bonjour Linette,

1/ Ci dessous modifications pour la saisie des montants avec le point décimal: on est maintenant libre de saisir avec la virgule ou le point.

Private Sub Tbx_especes_afterupdate()
'mise à jour espèces (transformation du point décimal en virgule)
Sheets("Données").Range("B27") = CDec(Application.Substitute(Tbx_especes, ".", ","))
Tbx_especes.Value = Format(Sheets("Données").Range("B27"), "#.00")
End Sub

Private Sub Tbx_cheque_AfterUpdate()
'mise à jour chèque
Sheets("Données").Range("B28") = CDec(Application.Substitute(Tbx_cheque, ".", ","))
Tbx_cheque.Value = Format(Sheets("Données").Range("B28"), "#.00")
End Sub


2/ En ce qui concerne les triangles verts, je travaille avec XL2000, donc...

3/ A toi de voir mais dis toi bien que si il ya una anerie à faire, elle sera faite qqsoit l'utilisateur( les autres ou toi...)

N'hésites pas au cas où.
Amicalement
Michel
0