Afficher un résultat immédiatement après avoir effectué l'opération
J'ai créé une interface de gestion des stocks, mais je suis embêtée: sur cette interface, se situent les cases"Rechercher", "Entrée" et "Sortie", et "Ajouter". Lorsque je souhaite ajouter une valeur à un composant, je recherche ce composant sur "Rechercher", puis j'entre le supplément dans "Entrée" et enfin je valide avec "Ajouter". Or, pour qu'il m'affiche le résultat mis à jour, je dois rechercher le composant sur "Rechercher". J'aimerais qu'il me le mette à jour automatiquement dès que j'ai cliqué sur "Ajouter".
Voici le code:
Sub AjouterValeur()
'C'est la fonction pour ajouter des valeurs
'Principe : Il compare les différents onglets avec la recherche, si ça correspond il ajoute les valeurs rentrées aux cases correspondantes dans l'onglet
Dim MaRecherche
Dim Entree
Dim Sortie
Dim Prix
Dim Emplacement
Dim Annee
Dim TestAnnee
Dim k
Dim Ws As Worksheet
Dim c As Range
Dim Message As String, firstAddress As String
MaRecherche = form.search.Value
'Ici on traite l'année, il ajoute 1 à k à chaque année suprérieure à 2016 (2016 ets la référence)
k = 0
Annee = Year(Date)
TestAnnee = 2016
While Annee <> TestAnnee
TestAnnee = TestAnnee + 1
k = k + 1
Wend
j = 0
If form.nbremontee = 1 Then
For Each Ws In Worksheets
With Ws
Set c = .Columns("B:D").Find(What:=MaRecherche, LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
c.Offset(0, 3).Value = Date
'Ici on regarde si il y a plusiseurs remontées dans le même onglets, si oui on change de fonction
If Ws.Name = "TSD Vernant & Lac" Or Ws.Name = "Tapis Pré & Michalet" Or Ws.Name = "TK Forêt & Ballacha MONTAZ" Or Ws.Name = "TK Veret & Aujon POMA" Or Ws.Name = "TK Bois & Stade MONTAZ" Or Ws.Name = "TK Lapiaz & G.Grenier & Gers" Then
form2.ComboBox1 = Ws.Name
form3.Show
Exit Sub
Else
firstAddress = c.Address
Do
If c.Column = 2 Then
Entree = form.nouventree.Value
Sortie = form.nouvsortie.Value
Prix = form.nouvprix.Value
Emplacement = form.nouvadresse.Value
If Not Entree = "" Then
c.Offset(0, 7).Value = c.Offset(0, 7).Value + Entree
Else
c.Offset(0, 7).Value = c.Offset(0, 7).Value
End If
If Not Sortie = "" Then
If Ws.Name = "Roulements" Or Ws.Name = "Bandages&pneus" Or Ws.Name = "Lubrifiants" Then 'Ici on regarde si on travaille sur bandages/roulements ou pas, si oui on change de fonction
form4.Show
Unload form2
Exit Sub
Else
c.Offset(0, 11 + k).Value = c.Offset(0, 11 + k).Value + Sortie
End If
Else
c.Offset(0, 11 + k).Value = c.Offset(0, 11 + k).Value
End If
If Not Prix = "" Then
c.Offset(0, 5).Value = Prix
c.Offset(0, 4).Value = Date
Else
c.Offset(0, 5).Value = c.Offset(0, 5).Value
Prix = c.Offset(0, 5).Value
End If
If Not Emplacement = "" Then
c.Offset(0, 1).Value = Emplacement
Else
Emplacement = c.Offset(0, 1).Value
End If
Message6 = Message6 & c.Offset(0, 7).Value & vbCrLf
Message7 = Message7 & c.Offset(0, 8).Value & vbCrLf
Message8 = Message8 & c.Offset(0, 5).Value & vbCrLf
End If
Set c = .Columns("B:D").FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
result_nok = ""
End If
End If
End With
Next Ws
MsgBox ("C'est ajouté")
Else
form2.Show
Exit Sub
End If
'Ici on remet les valeurs à 0 ou on modifie avec ce qu'on a ajouté
form.result4 = Emplacement
'messge6 ou messge7 correspond à la valeur de Qté'
form.result6 = Message6
form.result7 = Message7
form.result8 = Prix
form.nouventree.Value = 0
form.nouvsortie.Value = 0
form.nouvprix.Value = ""
form.nouvadresse.Value = ""
End Sub
Le problème si situerait à la fin, au niveau du MsgBox "C'est ajouté". Je suppose qu'il faudrait un "Show", mais la méthode "Show" ne me permet pas d'afficher une valeur (ici, c.Offset(0,7).Value ou c.Offset(0,11+k).Value) car elle ne peut afficher que des objets.
merci d'avance!
Bonjour Dorothée et bienvenue sur le Forum,
Sans fichier Excel c'est plus compliqué de pourvoir t'aider, mais si j'ai bien compris, tu a un UserForm qui te permet de rechercher et ajouter/modifier une liste de stock ?
Tu peux afficher les résultats d'un stock dans plusieurs TextBox et les modifier en changeant le contenue d'un TextBox puis en cliquant sur Ajouter?
Sauf, que ton problème est qu'une fois que tu a cliquer sur Ajouter, tes TextBox ne prennent pas directement les valeurs que tu a mis à jour et tu est obligé de procéder à une nouvelle recherche pour sa ?
Autant de question qu'on ne se poserai pas si nous avions le fichier :p
Bonjour,
Tout d'abords, indentes ton code il en sera plus lisible, pour le poster, utilises les balises code (bouton </> puis tu colles le code entre les balises en faisant attention à ne pas supprimer un crochet)
et pour éviter que nous ayons à créer un classeur de test, postes une copie de ton fichier après l'avoir anonymiser si il doit l'être, les noms et prénoms peuvent éventuellement rester mais pas les adresses réelles, pas les numéros de téléphone réels et pas les éventuelles données confidentielles. Pour que tu n'ai pas par la suite à trop modifier le code qu'un intervenant aura posté, le fichier exemple sera le plus conforme possible au fichier original
Bonjour et merci pour vos réponses.
Je joins mon fichier excel (le code est 2017). La recherche d'une référence s'effectue à partir de l'onglet "Recherche" (première page) puis sur "cliquer ici pour rechercher".
Le souci réside dans le fait que l'opération qui permet d'obtenir "Quantité" est effectuée via une formule sur le tableau excel, alors que les opérations qui permettent d'obtenir "Entrée" et "Sortie" (ainsi que "Prix" et "Adresse" ) sont effectuées dans la macro qui s'intitule "AjouterValeur". Ainsi, les valeurs de "Entrée", "Sortie", ainsi que "Prix" et "Adresse" s'affichent instantanément, tandis que la valeur de "Quantité" nécessite d'actualiser avec le bouton "Rechercher".
Je me demande si c'est possible que la nouvelle Quantité s'affiche aussi instantanément, ou pas (comme elle est calculée à partir des nouvelles entrées et sorties).
Encore merci!
Bonjour,
Voici mes tentatives de code pour résoudre le problème . J'ai décidé de créer une nouvelle variable Quantité. Pour trouver sa valeur initiale, je dois trouver la ligne de la référence recherchée intitulée "MaRecherche", puis je me reporte à la colonne K pour trouver la valeur du stock. Ensuite, j'effectue des opérations sur "Quantité" en additionnant ou soustrayant les valeurs de "Entrée" et "Sortie".
Tentative 1:
'Dim o As Object
'Set o = Worksheets(Ws.Name).Range("B4:B900").Find(MaRecherche)
'je recherche la référence correspondant à MaRecherche dans la colonne correspondante'
'Dim therow As Integer
'therow = o.Row
'Quantite = Range("Ktherow").Value
'Il semble que cette écriture ne convienne pas car la méthode Range ne peut lire que une lettre puis un nombre; peut-être que le problème vient de là '
Tentative 2:
'x = Cells.Find(MaRecherche.Value).Row
' Quantite = Range("Kx:Kx").Value 'Encore une fois la méthode Range pose problème
Voilà mes avancements peu fructueux