Microsoft 365 Appliquer un calcul à la formule VBA qui recherche la dernière valeur d'un tableau en fonction d'un critère

CaptainSalt31

XLDnaute Nouveau
Bonjour à tous ,

Comme vous le constatez, rien que le titre est compliqué.

Je vous explique, je travaille sur un fichier depuis quelque temps qui permettrais de faire un historiques d'entrée et de sortie de matériel et pouvoir faire des statistiques avec ce qui en ressort.

Le principe est simple, il y a deux boutons qui font apparaître des UserForms, 1 pour l'entrée, l'autre pour la sortie avec différent critères. Chaque infos rentrées dans les userform alimentent 2 pages distincte pour construire une sorte de base de donnée petit à petit.

Dans le fichier joint, j'ai complètement allégé le fichier pour qu'il soit simple et qu'on puisse se concentrer sur le problème. J'aimerais en effet faire apparaître un délais de traitement dans le tableau de sortie. La ou je bloque personnellement c'est le fait que le matériel qui entre n'est pas forcément le premier à sortir. Il me fraudais donc un code qui me permette d'aller chercher la dernière date d'entrée du matériel en question pour pouvoir la soustraire avec la date de sortie que je viens d'entrer.

Je ne suis pas sur d’être assez clair car ça l'est dans mon esprit mais j'ai toujours du mal à le retranscrire.



Je vais vous donner un exemple;

Dans le fichier joint

dans la première ligne des entrées on a le modèle a3 de la série A le 22/05/2021

puis on a d'autres modèle qui vienne s'y ajouter,

imaginons que le 24/05/2021 on sorte le modèle a3 j'aimerais avoir dans la colonne délais "2jours"

puis ensuite, imaginons que ce même modèle entre à nouveau, j'aimerais que lorsqu'il y aura la sortie de ce produit, que ça vienne chercher la dernière entrée



La raison de mon blocage est que je débute depuis quelques temps sur excel et je n'ai aucune idée du code qui pourrait correspondre à ma demande.

N’hésitez pas à me faire part de votre expérience pour faire avancer mon travail et ma connaissance dans le VBA d'excel.

Merci d'avance !
 

Pièces jointes

  • Enrée sortie.xlsm
    56.8 KB · Affichages: 26
Dernière édition:

CaptainSalt31

XLDnaute Nouveau
Bien le bonjour,
Waouh, sacré travail que tu as fait, en effet beaucoup de modifications ! en même temps je n'avais aucune idée de comment on pouvait articuler le code pour faire ce que tu as fait. Je vais bien étudier ton code pour apprendre !
Merci beaucoup pour ce que tu as fait, je n'ai pas vraiment de questions, cela fonctionne comme ce que je l'imaginais, voire mieux avec cette liste à choisir dans les sorties!

Seth Meyers Reaction GIF by Late Night with Seth Meyers
 

CaptainSalt31

XLDnaute Nouveau
Salut @AC045364,
Au final j'ai une petite question 🤣 J'ai passé pas mal de temps à étudier le code pour en apprendre plus, j'ai bien compris les étapes de construction du code en faisant quelques tests etc..
Cependant j'ai un blocage sur une ligne:
VB:
 Serie_ComboBox1.List = WorksheetFunction.Transpose(Worksheets(Feuil1.Name).Range("NomSéries"))
En effet, cela doit être cette ligne qui va chercher les Série via la variable "NomSéries" mais je ne vois pas ou est-ce que cette variable est définie. Comment cette variable va chercher les données des colonnes I à K ? Pareil pour la variable "Série". Je ne sais pas si je suis très clair donc hésite pas à me reprendre ou a me demander des précisions !
A plus
 

soan

XLDnaute Barbatruc
Bonjour CaptainSalt31, AC045364,

bienvenue sur le site XLD ! :)

En effet, cela doit être cette ligne qui va chercher les Séries via la variable "NomSéries" mais je ne vois pas où est-ce que cette variable est définie.

sur la feuille Excel, fais Ctrl F3 ➯ fenêtre "Gestionnaire de noms" ; que tu peux aussi avoir via : onglet Formules, rubrique "Noms définis", commande "Gestionnaire de noms" ; dans la liste de la fenêtre, tu devrais avoir le nom défini "NomSéries" ; clique dessus pour le sélectionner, puis en bas de la fenêtre, regarde ce qu'indique "Fait référence à :".​

soan
 
Dernière édition:

AC045364

XLDnaute Nouveau
Bonjour CaptainSalt31, soan

Serie_ComboBox1.List = WorksheetFunction.Transpose(Worksheets(Feuil1.Name).Range("NomSéries"))
Ceci n'est pas une variable mais une des propriétés de Serie_ComboBox1 de la même façon que tu définissais Serie_ComboBox1.ColumnCount =1 (qui soit dit en passant est une valeur par défaut).
Ici NomSéries fait référence à I1 à K1.
Pour une raison inconnue, la variable List d'un ComboBox demande une liste d'éléments verticale.
Ce qui transforme la liste horizontale en liste verticale est la fonction "Transpose". Ainsi le ComboBox va pouvoir afficher la liste A, B et C de façon verticale. Si Transpose n'et pas présent, seul le A s'affiche.

De plus, le nom Série n'existe pas. Les noms Série0, Série1 et Série2 existent.
Selon le clic sur A, B ou C (qui définit le numéro du Choix: 0 pour A, 1 pour B et 2 pour C)
Worksheets(Feuil1.Name).Range("Série" & Choix) se rapportera soit à Série0 ou Série1 ou Série2.

En passant quand Série2 fait référence à =DECALER(Résumé!$K$1;1;0;NBVAL(Résumé!$K:$K)-1;1),
ceci indique que le nombre de cellules de Série2 s'ajuste automatiquement si des éléments s'ajoutent au bas de la liste.
Si on voulait ajuster automatiquement le NomSéries il faudrait s'assurer que seuls des noms de série sont sur la ligne 1 et modifier la référence comme suit:
DECALER(Résumé!$I$1;1;0;NBVAL(Résumé!$I:$I)-1;1) .

Une question, est-ce qu'il y a un moyen de recevoir un courriel lorsque quelqu'un met à jour cette page web?
 

soan

XLDnaute Barbatruc
Bonjour AC045364,

Ceci n'est pas une variable mais une des propriétés de Serie_ComboBox1

De plus, le nom Série n'existe pas. Les noms Série0, Série1 et Série2 existent.

elles sont très bien, tes infos ! 👍 :) si je ne les ai pas données moi-même, c'est car ça fait longtemps que je n'ai pas fait de graphiques, alors j'avais oublié cette propriété et ces noms de séries. :oops: ton post #8 est très bien aussi ; donc j'ai mis un "J'aime" à tes 2 posts #7 et #8.​



Une question, est-ce qu'il y a un moyen de recevoir un courriel lorsque quelqu'un met à jour cette page web?

pour faire un simple rafraîchissement de la page web, c'est à toi de le faire, et c'est très facile : il te suffit d'appuyer sur la touche F5 ; pour être averti quand la page change :

a) quand quelqu'un poste un nouveau message dans cette conversation, le sujet remonte dans la liste des sujets, et son titre est en gras, ce qui change par rapport à quand il était devenu en non gras car tu étais venu "dans le sujet" pour le consulter, ou car tu avais cliqué sur le bouton « Marquer comme lu » ou sur le lien « Marquer les forums comme lus ».

b) tu as aussi la possibilité de suivre cette conversation, en cliquant sur le bouton « Suivre » situé en haut à droite de cette page web ; le titre du sujet de cette conversation sera alors visible dans la liste qui apparaît quand tu cliques sur le lien « 👁️‍🗨️ Contenu suivi » situé en haut de la page web.

c) dans les options de ton compte AC045364, rubrique « Confidentialité », tu dois aussi cocher cette case :​
☑ Recevoir des nouvelles et des mises à jour par e-mail

d) éventuellement, au même endroit, tu peux aussi cocher la case qui est située juste en dessous :
☑ Recevoir un e-mail de résumé d'activité

voici une petite image complémentaire :

Image.jpg




au cas où tu connaissais déjà toutes les choses décrites ci-dessus, ces infos pourront quand même servir à d'autres lecteurs de cette conversation qui sont de nouveaux membres. :)

soan