XL 2021 Garder un résultat ou donnée en mémoire

  • Initiateur de la discussion Initiateur de la discussion KORSiRO
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

KORSiRO

XLDnaute Nouveau
Bonjour !

Je suis actuellement sur un projet perso afin d’aider la communauté dans l’impression 3D.
Je mets en place un Inventaire de Filament 3D dans lequel j’ai réussi à mettre en place pas mal de chose malgré ma petite expérience sur Excel 🙂

Je bloque actuellement sur une chose qui me parait pas si compliqué par rapport à ce que j’ai déjà réussi à faire dans mon classeur lol

Je m’explique :

Prenons en compte 3 cellules : C13 - G13 - P13)

- C13 : contient une valeur (poids en grammes entrée manuellement)
- P13 : contient une valeur (autre poids en grammes entrée manuellement)
- G13 : contient la soustraction de C13-P13

Jusque là ça fonctionne.
J’aimerais ensuite que la cellule G13 qui contient le résultat de la soustraction C13-P13 garde en mémoire ce résultat même si je supprime la valeur (poids) entrée en P13 pour que, si j’ajoute une nouvelle valeur (poids) la soustraction continue en gardant en mémoire le résultat de la précédente soustraction.

Avez-vous une idée de la mise en place ?

Merci à vous !
 
Solution
Bonsoir @KORSiRO 🙂, à tous les autres 😉,

Une autre manière de faire avec trace de toutes les consommations successives pour chaque ligne pour permettre d'éventuelles corrections en cas de saisies erronées.

Quand on modifie une ou des valeurs en colonne P, on modifie les formules correspondantes de la colonnes G.
Les formules en colonnes G permettent de voir la succession des consommations.
La colonne P contient une validation qui n'autorise que les entiers strictement positifs ou une cellule vide.
Il faut voir ce qui se passe si on modifie la valeur de la colonne C : que fait-on ? Doit-on modifier la formule, doit-on faire une raz en colonne G ou bien encore autre chose ?
Quand doit-on réinitialiser une ligne ?

Le code est...
@KORSiRO

Ça veut dire que mon explication est farfelue ? Lol
Non cela veut dire que sans fichier représentatif il ne va pas être très évident de te répondre "juste"

C'est quoi représentatif ?

- représentatif, même organisation des lignes et des colonnes, mêmes libellés, même nom des TS, mêmes noms de feuilles...
- anonymisé, pas de données personnelles réelles tels nom, n° sécu, adresse ... remplacé par Nom1, Nom2 etc ....
- simplifié, une quinzaine de lignes reproduisant l'ensemble des différents cas envisageables (Avec le résultat souhaité éventuellement)

Si cela fonctionne sur le fichier fourni et pas sur le vrai fichier c'est qu'il n'est en rien représentatif ou que tu n'as pas su transposer ce qui devrait être un simple copier coller du code.

==> Voir ma signature
 
@KORSiRO


Non cela veut dire que sans fichier représentatif il ne va pas être très évident de te répondre "juste"

C'est quoi représentatif ?

- représentatif, même organisation des lignes et des colonnes, mêmes libellés, même nom des TS, mêmes noms de feuilles...
- anonymisé, pas de données personnelles réelles tels nom, n° sécu, adresse ... remplacé par Nom1, Nom2 etc ....
- simplifié, une quinzaine de lignes reproduisant l'ensemble des différents cas envisageables (Avec le résultat souhaité éventuellement)

Si cela fonctionne sur le fichier fourni et pas sur le vrai fichier c'est qu'il n'est en rien représentatif ou que tu n'as pas su transposer ce qui devrait être un simple copier coller du code.

==> Voir ma signature
Je comprend tout à fait voici mon fichier 😉
Il y a des cellules "liste" (marque/type) d'autres dynamiques qui changent en fonction du "poids restant" qui alerte qu'il est bientôt épuisé avec le % etc...

J'ai déjà fait quelques petites choses sur le fichier mais certaines fois je bloque lol
 

Pièces jointes

Le bon endroit pour effectuer ces calculs est dans les événements Change et SelectionChange de Worksheet

VB:
Dim Modif
Private Sub Worksheet_Change(ByVal Target As Range)
   Modif = Target.Address = "$P$13"
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Modif Then
     Modif = False
     Range("C13") = Range("G13") - Range("P13")
  End If
End Sub
 
Le bon endroit pour effectuer ces calculs est dans les événements Change et SelectionChange de Worksheet

VB:
Dim Modif
Private Sub Worksheet_Change(ByVal Target As Range)
   Modif = Target.Address = "$P$13"
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Modif Then
     Modif = False
     Range("C13") = Range("G13") - Range("P13")
  End If
End Sub
Merci pour ta réponse

J'ai copié ton code dans un nouveau module grâce à VBA mais rien ne diffère....

Si j'ai dans C13 1000 et dans P13 700, dans G13 j'ai 300 ok (C13-P13) si je supprime le 700 de P13 et que je renseigne 400 à la place la valeur de G13 n'est pas de 300 (résultat de l'ancienne soustraction) à laquelle tu enlève encore les "nouveaux" 400 que je renseigne mais ça donne toujours la valeur C13 de base donc 1000 - 400 (nouvelle valeur) donc 600 et non -100 (300-400)

Je sais pas si c'est clair lol

En fait j'aurais voulu que si je rentre 700 dans P13 avec la soustraction par rapport à C13 qui est a 1000 ça me donne 300 dans G13 et que ces 300 reste en mémoire si je supprime la valeur de P13 pour en entrer une nouvelle et que cette nouvelle valeur dans P13 se soustrait en plus aux 300 (précédent qui sont en mémoire)
 
ca me fait pareil avec ton fichier

Si dans la colonne "consommé" je met 200 j'obtiens 800 (1000-200) maintenant si dans cette même cellule je met 300 j'obtiens 700 (1000-300) ce que j'aurais voulu c'est qu'avec le premier calcul 1000-200=800 ces 800 reste en mémoire et si maintenant je mets 300 dans la cellule "consommé" le calcul soit 800 (résultat du premier calcul) - 300 (nouvelle valeur) = 500 et pas repartir de 1000 auquel tu soustrais les 300 (nouvelle valeur)
 
C’était un essai 🤣

En fait le consommé est reporté
Regarde la pièce jointe 1211330
Mais la cellule ou c'est reporté c'est une cellule pour un autre filament chaque ligne correspond a un filament et en fait ce dont je te parle depuis le début c'est pour avoir un suivi du filament :

admettons que sur la ligne 1 ABS Anycubic se soit 1000g (bobine neuve) auquel tu enlève 100g (consommé) d'un fichier que tu doit imprimé dont le poids de filament est donc de 100g tu entre 100 dans la colonne consommé et du coup dans la colonne poids restant de la ligne 1 le poids passe à 900 (1000 bobine neuve - 100 du modèle imprimé) donc la sur ma bobine il me reste 900g.
Si avec cette même bobine j'imprime un deuxième objet qui fait 250g j'aimerais que les 900g restant à cause du premier objet imprimé reste en mémoire et donc les 250g du nouvel objet imprimé que je rentre dans la colonne consommé (toujours de la première ligne) c'est 250g s'enlève au 900g restant déjà est pas au 1000 de départ de la bobine neuve puisqu'elle ne l'est plus à cause du premier objet imprimé qui à enlevé déjà 100g 😀

c'est peut être plus clair expliqué avec un vrai exemple 😛
 
J'ai copié ton code dans un nouveau module grâce à VBA mais rien ne diffère....
Il faut placer le code dans la partie du code de la feuille concernée c'est dans cet endroit que les deux événements peuvent être interceptés.
alors le calcul se déroule ainsi
si la une cellule dans la colonne "P" (16) est modifiée :
si la cellule G (7) est vide "" cela veut dire première utilisation
G = C - P
sinon
G = G - P
fin si
si la cellule C est modifiée elle remis à zéro les deux autres
si la cellule G est modifiée elle remis à zéro la cellule P

Bien qu'il soit possible de régler le problème d'une façon plus simple en ajoutant une colonne dans laquelle la quantité consommé est enregistrée après avec un simple soustraction on peut trouver la quantité disponible .
 

Pièces jointes

Dernière édition:
Bonsoir @KORSiRO 🙂, à tous les autres 😉,

Une autre manière de faire avec trace de toutes les consommations successives pour chaque ligne pour permettre d'éventuelles corrections en cas de saisies erronées.

Quand on modifie une ou des valeurs en colonne P, on modifie les formules correspondantes de la colonnes G.
Les formules en colonnes G permettent de voir la succession des consommations.
La colonne P contient une validation qui n'autorise que les entiers strictement positifs ou une cellule vide.
Il faut voir ce qui se passe si on modifie la valeur de la colonne C : que fait-on ? Doit-on modifier la formule, doit-on faire une raz en colonne G ou bien encore autre chose ?
Quand doit-on réinitialiser une ligne ?

Le code est dans le module de la feuille "Inventaire" :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xrg As Range, x, oldFormu, newFormu
   Set xrg = Intersect(Range("p13:p" & Rows.Count), Target)
   If xrg Is Nothing Then Exit Sub
   For Each x In xrg
      If IsNumeric(x.Value) Then
      If x > 0 Then
         oldFormu = Trim(Cells(x.Row, "g").Formula)
         If InStr(oldFormu, "SUM") > 0 Then
            newFormu = Left(oldFormu, Len(oldFormu) - 1) & "," & x.Value & ")"
         Else
            newFormu = "=" & Cells(x.Row, 3).Value & " -SUM(" & x.Value & ")"
         End If
         On Error GoTo ERRformuleKO
         Application.EnableEvents = False
         Cells(x.Row, "g").Formula = newFormu
         Application.EnableEvents = True
      End If
      End If
   Next x
   Exit Sub
 
ERRformuleKO:        ' Gestionnaire d'erreur si la nouvelle formule aboutit à une erreur
   MsgBox "La formule en " & Cells(x.Row, "g").Address(0, 0) & " a aboutit à une erreur." & _
            vbLf & "la valeur en " & x.Address(0, 0) & " n'a pas été prise en compte." & _
            vbLf & vbLf & "L'ancienne formule a été rétablie", vbCritical
   Resume Next
End Sub
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour