Interaction dans une listview
Bonjour
j'ai encore besoins d'aide des plus aguerris sur Excel .
J'ai un fichier de gestion de stock de pneu et j'ai créé un listview permettant d'afficher les nouvelles demandes ou les demandes en cours.
Je souhaite, lors d'un appuis sur les boutons "A Cmdé" ou "Valider" pouvoir respectivement remplir des lignes correspondantes et modifier une valeur dans une cellule de la ligne sélectionnée. Autrement dit, les boutons interagies avec uniquement la ligne sélectionnée parmi une table de donnée.
La première problématique est la suivante : Quand je clique sur "valider" (qui sous entend que le pneu est en stock et va être livré au client), la Colonne A de la ligne sélectionnée est modifier de 1 ou 2 (en stock ou commande en cours) à 0 (qui signifie commande soldée).
Je vous mets le fichier pour que ce soit plus claire (s'il y a un code c'est : MAGASIN)
Merci pour votre aide :)
Bonjour,
Je me souviens de ce fichier ....
La première problématique est la suivante : Quand je clique sur "valider" (qui sous entend que le pneu est en stock et va être livré au client), la Colonne A de la ligne sélectionnée est modifier de 1 ou 2 (en stock ou commande en cours) à 0 (qui signifie commande soldée).
Pour être sûr d'avoir bien compris, si la colonne A comporte 1 ou 2, vous voulez que cette colonne passe toujours à 0 lorsque vous validez ?
Si oui, utilisez ce code
Private Sub LivraisonPneu_Click()
Dim lig As Integer
Dim ws As Worksheet
Set ws_demandes = Worksheets("DEMANDES")
lig = AffichageDemande.SelectedItem.Index + 1
ws_demandes.Range("A" & lig) = 0
Call Actualisation
End Subsi ok-->
Cordialement
Hello ouii vous m'avez bien aidé la dernière fois haha
Je réalise un fichier assez complexe mais très intéressant d'un point de vu codage ;)
Alors votre code fonctionne mais pas à tous les coups. J'ai remarqué que, si toutes mes lignes sont à 1 ou 2 (pour le test), lorsque quand je clique sur la 1ere ligne dans le listview et que je valide, ça fonctionne la 1ère lignes disparait et passe à 0.
Lorsque que je souhaite "valider" la 2ème ligne, qui est donc passé en première position, il faut que je "valide" la 3ème ligne pour que la première passe à 0... Et ainsi de suite...
J'ai essayer de réinitialiser la variable "lig" en faisaint un lig = 0 après le Call Actualisation mais rien.
Alors votre code fonctionne mais pas à tous les coups. J'ai remarqué que, si toutes mes lignes sont à 1 ou 2 (pour le test), lorsque quand je clique sur la 1ere ligne dans le listview et que je valide, ça fonctionne la 1ère lignes disparait et passe à 0.
Oui exact je suis allé trop vite. Deux questions :
- Y a-t-il une colonne qui comporte une référence unique dans votre listview ?
- est-ce que l'on peut trier la feuille Demande ou cela doit-il rester dans l'ordre des encodages. exemple mettre les 0 en premier
C'est une chose qui m'a déjà intrigué dans votre fil précédent. cela représente quoi les 0, 1 et 2 dans votre colonne A
Non il n'y a pas de référence unique mais la variable DR (qui représente la dernière ligne utilisée) est utilisable dans le code.
Il est préférable de laisser dans cette ordre là notamment parce que la colonne DATE s'incrément en fonction de la date de l'ordinateur.
Alors les 0, 1 et 2 repressentent respectivement : 2 = nouvelle demande d'un client
1 = demande pris en compte par le magasin (ou dans mon cas, pas de stock et donc commande en cours au fournisseur).
0 = demande soldée.
Si le magasin clique sur "validé" : 2 passe à 0 de la ligne sélectionnée
Après j'adapterais le code pour passer 2 à 1 s'il y a une commande en cours.
Il est préférable de laisser dans cette ordre là notamment parce que la colonne DATE s'incrément en fonction de la date de l'ordinateur.
Vu que les 0 ne sont pas repris dans la listview, si on doit laisser la liste telle quelle, c'est impossible à réaliser sans avoir un identifiant différent par ligne
En considérant le tableau tel quel, la seule possibilité serait de trier par exemple la liste en mettant tout ce qui est à 0 à la fin ou au début dans le tableau de la feuille.
Si le tableau est trié selon la date, alors il y a moyen de remettre le tableau dans cet ordre après la mise à zéro de la ligne choisie dans la listview
Dites moi
Okay je vois bien ce que vous souhaitez faire. Alors j'ai créer une nouvelle colonne qui se remplie automatiquement en fonction de la ligne. C'est la colonne AE. AE2 = 1, AE3 = 2 etc... (à cause de l'entête). Du coup, j'ai une valeur unique de créée. Comment l'utiliser pour trouver la ligne correspondante ?
Private Sub LivraisonPneu_Click()
Dim lig As Integer
Dim ws_demandes As Worksheet
Set ws_demandes = Worksheets("DEMANDES")
lig = AffichageDemande.SelectedItem.Index + 1
ws_demandes.Range("A" & lig) = 0
Call Actualisation
End SubEt, est-ce que je peux déclarer toutes mes variables en amont de tous mes Private Sub et les réutiliser dans plusieurs "sous" Private Sub ?
Alors j'ai créer une nouvelle colonne qui se remplie automatiquement en fonction de la ligne. C'est la colonne AE. AE2 = 1, AE3 = 2 etc..
Ok mais dans ce cas, il faut que cette information soit aussi dans la listview. Du coup il faut revoir certains codes de votre fichier. Ce qui ne serait pas le cas si l'on utilise la fonction Trier
De plus il vous faut un titre sur cette colonne AE, genre ID, num ou autre
Le code Livraisonpneu ne sera plus d'application
C'est good ! Ce problème là est résolu.
J'ai créé donc une colonne en A qui prend la un index unique (de 1 à x...). Ensuite, j'ai montré l'index dans le listview avec une nouvelle colonne d'affichage et un autre textbox. Ensuite j'ai simplement légèrement modifier votre code :
Private Sub LivraisonPneu_Click()
Dim lig As Integer
Dim ws_demandes As Worksheet
Set ws_demandes = Worksheets("DEMANDES")
lig = Val(txtIndex) + 1
ws_demandes.Range("B" & lig) = 0
Call Actualisation
lig = 0
End Subla variable "lig" prend la valeur de la textbox + 1 pour modifier la ligne de la selection du listview :) :)
l'index à gauche et le textbox de l'index à côté du mot "BESOINS"
Je laisse ce post ouvert car j'aurais sûrement d'autres questions prochainement pour adapter mon listview que je viens de modifier ;)
Une petite question : est-ce qu'il est possible de déclarer les variables dans un seul PrivateSub et de l'utiliser dans plusieurs autres PrivateSub (pour éviter de rédéclarer la même variable, je pense notamment à :
DR = ws_demandes.Cells(Rows.Count, "A").End(xlUp).Rowpou trouver la dernière ligne ..
EDIT : Et deuxième question : je ne trouve rien mais quand j'intègre dans une cellule avec une formule via VBA, celle-ci :
=INDEX(STOCK!$A$2:$A$1000;EQUIV(1;(STOCK!$D$2:$D$1000=L" & DR1 & ")*(STOCK!$E$2:$E$1000=M" & DR1 & ")*(STOCK!$F$2:$F$1000=N" & DR1 & ")*(STOCK!$G$2:$G$1000=O" & DR1 & ")*(STOCK!$H$2:$H$1000>=P" & DR1 & ");0);1)"Au moment de l'inclusion dans la cellule, des @ se placent avant les "STOCK!**** et de facto, la formule ne fonctionne pas. (Je remets le fichier à jour au cas où) :
Une petite question : est-ce qu'il est possible de déclarer les variables dans un seul PrivateSub et de l'utiliser dans plusieurs autres PrivateSub (pour éviter de rédéclarer la même variable, je pense notamment à :
Oui c'est possible mais il faut voir si cette variable DR peut être conservée telle quelle dans les autres codes.
Il me faudrait plus d'indications pour vous diriger
Et deuxième question : je ne trouve rien mais quand j'intègre dans une cellule avec une formule via VBA, celle-ci :
Je ne vois pas votre souci dans le fichier joint. Peut-être me donner un exemple concret ?
Hello,
J'ai ouvert un sujet propre à cette problématique : https://forum.excel-pratique.com/excel/vba-ajout-d-arobase-et-erreur-calcul-171071
Bonjour,
J'ai ouvert un sujet propre à cette problématique : https://forum.excel-pratique.com/excel/vba-ajout-d-arobase-et-erreur-calcul-171071
Ok. Merci de cloturer celui-ci si cette demande est terminée.
Cordialement