Macro calcul automatique + gestion date Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
T
Tribilbo
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 21 mars 2017
Version d'Excel : 2010

Message par Tribilbo » 25 septembre 2017, 14:42

Bonjour tout le monde,

J'aimerai pouvoir créer une macro qui me permettra de faire un calcul automatique. Ce calcul sera effectué après avoir sélectionné manuellement la cellule dans laquelle je veux que le résultat apparaisse.

Avec comme exemple le fichier joint:

Je sélectionne manuellement la cellule I15/16 (cellule fusionnée).
Je lance ensuite la macro qui fait le calcul suivant:

I13/14- (G15/16-G13/14) "en minutes" * 60 * H13/14

Le calcul de date doit me donner des minutes dans tous les cas. Le résultat sera affiché dans la cellule sélectionnée au départ.

Lorsque j'ai essayé de faire ma macro je me suis perdu dans les cellules fusionnées (malheureusement je suis obligé de les laisser fusionnées) et surtout pour faire un calcul de date et transformer en minutes.

Merci de votre aide.
exemplemacro.xlsx
(9.56 Kio) Téléchargé 11 fois
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'196
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 26 septembre 2017, 02:41

Bonsoir,
=I13-(G15-G13)*1440*H13
Lorsque des cellules sont fusionnées, une seul a une existence et peut contenir une valeur !

Les valeur date-heures ont pour unité le jour (soit 24 h, ou 1440 min, ou 86400 s).

Inutile de mobiliser VBA pour ce petit calcul !

Cordialement.
T
Tribilbo
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 21 mars 2017
Version d'Excel : 2010

Message par Tribilbo » 26 septembre 2017, 13:01

Bonjour,
je sais que c'est un simple calcul. Je dois le faire de facon régulière. Je demande une macro pour accélérer ce processus (le refaire 4-5 fois par jour c'est une perte de temps) et de plus c'est pour essayer de comprendre un peu plus les macros. En effet, ce genre de calculs se retrouve dans d'autres tableurs et donc je pourrais appliquer cette macro (avec des modifications).

Merci
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'196
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 26 septembre 2017, 13:12

Quand tu mets une formule, elle demeure, et continue de calculer. Et est plus rapide à mettre en oeuvre qu'une macro...

Une macro VBA ne fonctionnera pas sur un autre tableur qu'Excel.
T
Tribilbo
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 21 mars 2017
Version d'Excel : 2010

Message par Tribilbo » 26 septembre 2017, 13:20

Je suis d'accord mais pour mes besoins, de temps en temps, je dois faire le calcule et d'autre fois je dois juste inscrire une valeur.
En ce moment je le fais à la calculette...

Concernant le fait de pouvoir l'utiliser dans d'autres tableurs, je pensais à une macro qui utilise comme point de départ la cellule active (sélectionnée par l'utilisateur), ensuite la disposition est toujours la même. Donc pour "récolter" les différentes valeurs requises pour le calcul, ce sera toujours les cellules adjacentes.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'196
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 26 septembre 2017, 13:53

Si cela peut t'amuser...
Sub Calculer()
    With ActiveCell
        .Value = .Cells(-1, 1) - (.Cells(1, -1) - .Cells(-1, -1)) * 1440 * .Cells(-1, 0)
    End With
End Sub
T
Tribilbo
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 21 mars 2017
Version d'Excel : 2010

Message par Tribilbo » 26 septembre 2017, 14:07

Ha oui, je ne voyais pas ca aussi simple....

J'étais parti dans dans des déclarations de variables pour chaque cellule. Avec différents types de cellules (date, nombre...).

Merci de ton aide !
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'196
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 26 septembre 2017, 14:25

On fait simplement le calcul (le même que la formule) en utilisant un adressage relatif par rapport à la cellule résultat sélectionnée.
T
Tribilbo
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 21 mars 2017
Version d'Excel : 2010

Message par Tribilbo » 26 septembre 2017, 14:58

J'ai une dernière question, l'adressage relatif n'est pas explicite pour moi je m'explique:

Si je prends comme exemple la première commande cells(-1,1). En regardant le fonctionnement de cette commande, je devrais me retrouver à une ligne au-dessus et une colonne à droite. mais je sais que ce n'est pas le cas. Elle fait référence à la ligne juste au-desssus. Donc pourquoi avoir besoin de mettre +1 pour la colonne par rapport à la cellule active ?
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'196
Appréciations reçues : 446
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 26 septembre 2017, 16:19

Avec ...Offset(-1, 1) tu devrais effectivement te retrouver une ligne au-dessus et sur la colonne de droite, car tu paramètres un décalage par rapport à une cellule (dont le décalage par définition est nul : ....Offset(0, 0).

Mais avec ...Cells tu paramètres des numéros de ligne par rapport à une cellule qui est elle-même : Cells(1, 1). Donc avec Cells(-1, 1) tu as reculé de 2 rangs en ligne, et te trouves donc 2 lignes au-dessus, mais dans la même colonne (l'index n'a pas bougé).

Il te faut aussi tenir compte de tes fusions qui affectent les lignes. En cas de fusion, on ne peut cibler que la cellule supérieure gauche de la fusion, seule à contenir éventuellement quelque chose. Mais les lignes (ou colonnes) des fusions comptent toujours dans les écarts.
2017-09-26_180540.png
2017-09-26_180540.png (2.3 Kio) Vu 199 fois
La cellule jaune est la cellule active de référence...
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message