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
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
A voir également:
- VBA excel copie valeurs avec condition
- Excel cellule couleur si condition texte - Guide
- Liste déroulante excel - Guide
- Copie cachée - Guide
- Si et excel - Guide
- Copie écran samsung - Guide
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
j'ai un tableau à remplir pour cela je veux creer un userform qui me permet d'entrer les valeurs correspandantes dans les champs correspand
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
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!
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!
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
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"
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"
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
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
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
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
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
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
23 avril 2008 à 21:10
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
24 avril 2008 à 09:26
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
24 avril 2008 à 23:26
Voici le lien pour la pièce jointe :
https://www.cjoint.com/?eyxwvr40Ov
Merci d'avance de ton aide
Linette