Fonction "SOMME" [Résolu]

Signaler
Messages postés
27
Date d'inscription
jeudi 4 mars 2021
Statut
Membre
Dernière intervention
9 avril 2021
-
Messages postés
352
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
10 avril 2021
-
bonjour,
j'ai à nouveau besoin d'aide sur un fichier VBA que j'avais mis en partage pour modification et je me suis aperçu que finalement mes fonctions "SOMME" ne fonctionnaient pas sur mes feuilles.
Je remets en partage ce fichier pour avoir votre aide sur le sujet, voici mon problème:
J'ai à l'ouverture de mon fichier un Userform avec 4 Unités. En cliquant sur l'unité A par exemple, apparaît 3 onglets: "Stock avant commande", "Stock à réintégrer" et " COMMANDE" . J'ai programmé des "SOMMES" sur les 2 onglets "Stock à réintégrer" et "COMMANDE" qui se calculent normalement lorsque l'on rempli le premier onglet "Stock avant commande". Seulement voilà, en VBA cela ne fonctionne pas. Puis-je avoir de l'aide?
merci
voici le lien pour le fichier
https://www.cjoint.com/c/KCFuvicRJAN

5 réponses

Messages postés
352
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
10 avril 2021
71
Bonjour,
vous avez plusieurs routines en VBA (boutons 1, 2, 3 et 4) qui font strictement la même chose mais en tout cas pas un calcul somme !
et une cinquième qui permet juste d'afficher le UserForm.

Quant aux routines associées aux boutons du userform, elles se contentent de masquer/afficher des onglets mais toujours pas de calcul de sommes.

Sub Bouton1_Clic()
Dim valeur As Date
valeur = InputBox("merci de saisir la date d'enregistrement", "ALERTE", "saisir la date du jour ici")
Range("B1").Value = Date
userform1.Show
End Sub


Vous demndez de saisir une valeur avec l'input et ensuite vous n'en faites rien ! Si la date saisie doit être affectée à la cellule B1, il suffit d'écrire :

Sub Bouton1_Clic()
Range("B1").Value= InputBox("merci de saisir la date d'enregistrement", "ALERTE", "saisir la date du jour ici")
userform1.Show
End Sub

Dans un input, on entre n'importe quoi (du texte). En supposant que le texte saisi est bien au format d'une date, il faut le convertir avec la fonction DateValue : https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/datevalue-function

Sinon, comme la fonction Date retourne automatiquement la date du jour, il suffirait d'écrire
Sub Bouton1_Clic()
  Range("B1").Value = Date
  userform1.Show
End Sub

Il n'y aura pas d'avertissement mais est-ce important ?

Donc, en l'état, rien d'étonnant à ce que ça ne fonctionne pas !

A moins que j'ai mal compris votre demande !!??
Messages postés
27
Date d'inscription
jeudi 4 mars 2021
Statut
Membre
Dernière intervention
9 avril 2021

bonjour,
pour répondre à vos différents points, tout d'abord mes 4 boutons correspondent à 4 unités différentes pour mon organisation. Chaque bouton est associé à 3 onglets visibles. Exemple pour l'unité A, onglets: "Stock avant commande A", "Stock à réintégrer A" et "COMMANDE A", les autres étant masqués car non concernés par l'unité en question. Mon objectif étant que chaque unité renseigne son propre onglet "Stock avant commande" et que les 2 autres ("Stock à réintégrer" et COMMANDE") se calculent automatiquement. Mes sommes se font donc sur ces 2 onglets et pour lesquels j'avais écrit mes formules . Exemple, la valeur de la cellule H5 de l'onglet "Stock à réintégrer" correspond à la valeur de la cellule AQ5 - H5 de l'onglet "Stock avant commande". L'onglet "COMMANDE" se calculant lui aussi en fonction des résultats précédemment cités. A la fermeture de l'onglet on renseigne la date afin de vérifier par la suite qu'ils ont bien été renseignés à une date déterminée qui servira par la suite à la personne qui passera la commande globale. J'espère avoir formulé au mieux ma demande.
merci
Messages postés
352
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
10 avril 2021
71
Bonjour,
Je comprends mieux : je croyais qu'il s'agissait d'un problème avec les macros !

En regardant l'exemple que vous citez, on voit que la formule de la cellule H5 de l'onglet "Stock à réintégrer A" est =SOMME('Stock avant commande A'!AQ5)-'Stock avant commande A'!H5 . On peut tout simplement corriger par ='Stock avant commande A'!AQ5-'Stock avant commande A'!H5 ET surtout, réactiver le calcul automatique dans les options d'Excel
Messages postés
27
Date d'inscription
jeudi 4 mars 2021
Statut
Membre
Dernière intervention
9 avril 2021

bonjour,
merci beaucoup pour votre aide, cela fonctionne à présent,j'ai modifié comme vous me l'avez recommandé!
j'avais juste un dernier petit souci à régler, associé à mes boutons unités, j'ai un bouton impression. Avec celui-ci et pour chaque unité, je souhaite que les impression des 2 onglets "Stock à réintégrer" et COMMANDE" se fasse.
cela ne fonctionne pas pour tout les boutons, pouvez-vous me guider, sachant que ma commande est la suivante:

Private Sub Cmd_Imprs_A_Click()
Worksheets(Array("COMMANDE A", "Stock à réintégrer A")).Select
Application.Dialogs(xlDialogPrint).Show
End Sub

je vous remercie
Messages postés
352
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
10 avril 2021
71
Bonjour,
A priori, ça ne fonctionne pas lorsque les feuilles sont masquées.

Pour bien faire, avant donc d'appeler le .select, il faudrait :
1) tester si les feuilles sont visibles
2) si pas visibles alors mémoriser l'état
3) rendre visible
4) Sélectionner
5) Afficher la boîte de dialogue
6) Remettre invisible

On peut aussi ne pas s'embêter : mémoriser l'état/rendre visible (même si déjà visible)/sélectionner/afficher le dialogue/remettre à l'état initial. Ce qui donne :
Private Sub Cmd_Imprs_A_Click()

Dim étatCommande As Boolean, étatStock As Boolean

    étatCommande = Worksheets("COMMANDE A").Visible
    étatStock = Worksheets("Stock à réintégrer A").Visible
    Worksheets("COMMANDE A").Visible = True
    Worksheets("Stock à réintégrer A").Visible = True
    Worksheets(Array("COMMANDE A", "Stock à réintégrer A")).Select
    Application.Dialogs(xlDialogPrint).Show
    Worksheets("COMMANDE A").Visible = étatCommande
    Worksheets("Stock à réintégrer A").Visible = étatStock
End Sub


PS : il serait judicieux d'écrire des procédures génériques auxquelles on passe des paramètres.
Par exemple ici Sub Impression(feuille1, feuille2)... ou feuille1 et 2 pourraient être les noms des feuilles.
On pourrait alors l'appeler dans chacune des commandes :

Private Sub Cmd_Imprs_A_Click()
Call impression("COMMANDE A", "Stock à réintégrer A")
End Sub
</code>

Votre programme serait plus facile à maintenir !
Messages postés
27
Date d'inscription
jeudi 4 mars 2021
Statut
Membre
Dernière intervention
9 avril 2021

bonsoir,
un grand merci pour votre aide, cela fonctionne correctement en appliquant la méthode:

"mémoriser l'état/rendre visible (même si déjà visible)/sélectionner/afficher le dialogue/remettre à l'état initial"
Messages postés
352
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
10 avril 2021
71
Bonne continuation !