Excel: données (validation) [Résolu/Fermé]

Signaler
-
 ar168 -
Bonjour,

Pour la rédaction des bons de commandes, j'utilise un fichier Excel: le bon est sur la 1ère feuille, et "le base de donnée" sur la 2ème. Le client effectue son choix via le menu déroulant grâce à la fonction validation des données.

Est-il possible de travailler à l'envers? Autrement dit le client coche la cellule correspondant à son choix dans la 2ème feuille "base de donnée" et l'indication de l'article s'insère dans la première feuille bon de commande, dans une colonne définie en partant de la ligne 10 (par exemple)...

J'ai peu d'espoir que cela soit possible avec Excel, mais...

D'avance merci pour vos astuces


5 réponses

Bonjour,

Le tableau est visible à l'adresse
http://cjoint.com/?0KehEvnx7xF

Actuellement il fonctionne de façon "classique".

Exemple, dans l'onglet "commande", clique sur B10. Un menu déroulant s'ouvre. Choisi un article (seul les 29 premiers articles sont encodés). Il te reste juste à encoder la quantité souhaitée, et le tour est joué!

Très simple!... sauf que certains "clients" veulent une vue d'ensemble des produits disponibles. Cette liste existe, sous l'onglet épicerie. En principe elle est protégée, afin qu'un "petit malin" ne modifie pas cette base de données.

Serait-il possible, en allant sous l'onglet épicerie, de pouvoir cliquer sur un article et que celui-ci s'insère ans l'onglet commande, en B10, le suivant en B11 etc...

Je sais que le client devra de toute façon revenir dans "commande" pour préciser la quantité... mais bon, certains estiment que les chemins détournés sont parfois plus simples! En fait il faudrait à mon avis abandonner Excel et passer sous Acces pour créer un véritable système style e-commerce: tu cliques sur un objet, une fenêtre s'ouvre pour indiquer la quantité, et le tout génère un bon de commande visible, mais impossible à modifier. Exemple: http://www.collectandgo.be/cogo/fr/home

On peut rêver... je me débrouille sous Excel, mais Acces, c'est l'inconnu total!

A nouveau merci pour l'aide et les astuces.
Messages postés
16376
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 janvier 2021
3 120
Bonjour

macro à installer dans le module "Thisworkbook"
déclenchement par double clic sur l'article choisi

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim secteur As String
secteur = UCase(ActiveSheet.Name)
derlig = Columns("B").Find("*", , , , , xlPrevious).Row
If secteur <> "commande" _
     And Not Intersect(Target, Range("B1:B" & derlig)) Is Nothing _
          And Target.Count = 1 Then
     With Sheets("commande")
          lig = .Columns("B").Find(secteur, .Range("B8"), , , xlPart).Row
          ligvide = .Columns("B").Find("", .Cells(lig, "B")).Row
          .Cells(ligvide, "B") = Target
     End With
End If
End Sub

Messages postés
16376
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 janvier 2021
3 120
ci joint maquette
https://www.cjoint.com/?3KejcvjDCMv

si tu ne connais pas VBA, tu dis pour l'installation de la macro

Le déclenchement "double-clic" a été choisi pour marquer une action volontaire

il serait intéressant d'insérer en ligne 1 des secteurs de produit des étiquettes de champs .

du fait que l'on emploie VBA, on pourrait se dispenser d'écrire tes formules dans la feuille "commande"; à toi de voir...

petite interrogation amicale:
Tu vends de l'alcool aux enfants ?
petite interrogation amicale:
Tu vends de l'alcool aux enfants ?


Zut, je suis découvert...

Rassure-toi, c'est à usage (à dose "homéopathique") des cuisines didactiques dans les cours de cuisine!

Pour revenir au bon lui-même, je regarde vos propositions et reviendrai vers vous pour la suite.

Merci à tous.
J'ai ouvert la maquette, fais un double-clic sur un article de l'onglet épicerie... et il ne se passe rien
Je dois avoir raté un épisode...
Messages postés
16376
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 janvier 2021
3 120
1/as tu le ruban développeur de présent sur ton Excel?

2/ Il faut télécharger et non ouvrir le lien
Messages postés
16376
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 janvier 2021
3 120
Si l'onglet Développeur n'apparait pas dans le ruban:
Cliquez sur le bouton Office,
puis sur le bouton Options Excel.
Cliquez sur le menu Standard.
Cochez l'option Afficher l'onglet Développeur dans le ruban.
Cliquez sur le bouton OK pour valider.

source:https://silkyroad.developpez.com/Excel/NouveautesExcel2007/#LIII-B-8

puis
bouton office- centre gestion confidentialité - parametres du centre de gestion...-activer les macros
Messages postés
8
Date d'inscription
mardi 8 septembre 2009
Statut
Membre
Dernière intervention
4 novembre 2011

J'aurais fait beaucoup plus simple :
copie des tableaux avec liaison dans la première feuille. On coche les lignes voulues dans les différentes feuilles . On applique un filtre des lignes cochées sur la première feuille.
Messages postés
16376
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 janvier 2021
3 120
Effectivement très facile avec des enfants...
Messages postés
8
Date d'inscription
mardi 8 septembre 2009
Statut
Membre
Dernière intervention
4 novembre 2011

Je n'ai pas compris la question... ou alors j'ai mal expliqué ma solution. Ma manip n'est à faire qu'une fois, après c'est transparent. Il n'y a plus qu'à cocher dans les différentes feuilles, et le reste se fait tout seul.
Pour michel_m:

Les macros étaient désactivés... méa culpa!

Maintenant, tout marche à merveille.

Encore une petite question: il est possible d'éviter les doublons dans une feuille. C'est égalent possible avec cette macro?

A nouveau, un GRAND merci.
Messages postés
16376
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 janvier 2021
3 120
petite remarque:

en relisant ton post:
En fait il faudrait à mon avis abandonner Excel et passer sous Acces pour créer un véritable système style e-commerce: tu cliques sur un objet, une fenêtre s'ouvre pour indiquer la quantité, et le tout génère un bon de commande visible

c'est faisable facilement ( peut-être) en Excel
Dans la famille Office: Word et Excel: les bases, y compris le publipostage (c'est déjà pas mal!)

Access, c'est la planète Mars pour moi!

Si tu me dis qu'Excel peut faire le travail que je croyais réservé à Access, je dis BRAVO, mais je t'avoue que tu deviens là le gourou d'une secte, celle des vrais utilisateurs d'Excel.
Messages postés
12238
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
26 janvier 2021
2 559
Bonjour ar168, Michel_m,
J'avoues suivre ce sujet car il est vrai que c'est toujours intéressant de suivre les travaux de Michel... Mais en plus ce cas peux m'aider pour une application au taf.
J'interviens juste pour souligner l'opinion de michel : c'est faisable facilement ( peut-être) en Excel. Il est en effet aisément réalisable d'insérer soit une inputbox (solution la plus simple mais la plus aléatoire au niveau de la saisie par l'utilisateur), soit un petit UserForm pour demander la quantité.
En reprenant le code de michel, en supposant que la quantité doive être stockée en colonne C feuille "commande", et en partant sur une simple InputBox sans test (et donc libre cours à toutes les fantaisies dse bug possible et imaginable par l'utilisateur...), on peux faire quelque chose comme :

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim Secteur As String, Derlig As Integer, Lig As Integer, Ligvide As Integer
Dim Quantite ' As Integer

Secteur = UCase(ActiveSheet.Name)
Derlig = Columns("B").Find("*", , , , , xlPrevious).Row
If Secteur <> "commande" _
     And Not Intersect(Target, Range("B1:B" & Derlig)) Is Nothing _
          And Target.Count = 1 Then
     With Sheets("commande")
          If Application.CountIf(.Columns("B"), Target) > 0 Then GoTo doublon
          Lig = .Columns("B").Find(Secteur, .Range("B8"), , , xlPart).Row
          Ligvide = .Columns("B").Find("", .Cells(Lig, "B")).Row
          Do
          Quantite = InputBox("Saisir la quantité désirée", "Quantité")
            If Not IsNumeric(Quantite) Then
                MsgBox "Veuiller saisir un nombre entier"
            End If
          Loop While Not IsNumeric(Quantite)
          .Cells(Ligvide, "B") = Target
          .Cells(Ligvide, "C") = Quantite
          .Activate
     End With
End If
Exit Sub
doublon:
MsgBox "Article déjà commandé!", vbCritical, "Cuisine didactique"
End Sub

Je précise bien que la modification que j'ai apporté au code de michel n'est vraiment pas optimisée...
Messages postés
16376
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
25 janvier 2021
3 120
tu deviens là le gourou d'une secte, celle des vrais utilisateurs d'Excel.
si c'est de l'humour c'est raté

si les vrais utilisateurs.... si c'était une secte, on n' essaierait pas de t'aider bénévolement
quant à me comparer à un gourou... :-((

pour m'amuser,je vais quand m^me essayer de faire un vrai-faux look e-commerce simplifié....
ca risque d'^tre long quand même
J'avais oublié l'aspect (et l'esprit) mercantile qui anime les gourous. Toutes mes excuses. Il est heureux qu'il existe encore des communautés d'entraide et des personnes comme toi (et les autres qui apportent leurs pierres à l'édifice).