Syntaxe calcul valeur et la renvoyer dans une autre feuille

Fermé
fab250 Messages postés 5 Date d'inscription mercredi 4 juin 2014 Statut Membre Dernière intervention 24 juillet 2014 - 23 juil. 2014 à 15:57
fab250 Messages postés 5 Date d'inscription mercredi 4 juin 2014 Statut Membre Dernière intervention 24 juillet 2014 - 24 juil. 2014 à 11:06
Bonjour,

Je suis novice en écriture de macros avec VB et j'aimerai avoir de l'aide par rapport au problème suivant. J'ai des données qui « tombent » toutes les semaines et j'aimerai les traiter.
Ici, mon but est de calculer une valeur issue d'une colonne de nombre. Cette valeur, j'aimerai la mettre dans une autre feuille.
J'ai essayé d'écrire une macro mais elle ne marche pas encore.

Voici l'ébauche de ma macro:
Sub Calculs()
Dim F_analyse As Worksheet
Dim F_resultats As Worksheet
Dim LstRw As Long
Dim provisoire As Double


Set F_analyse = ActiveWorkbook.Sheets(1) 'lieu des données= "Analyse "
Set F_resultats = ActiveWorkbook.Sheets(2)


F_analyse.Select 'passage dans la feuille des données
LstRw = .Cells(.Rows.Count, 1).End(xlUp).Row => erreur de compilation : référence incorrecte ou non qualifié (mais je ne vois pas pourquoi car pour moi cette variable qui me sert à aller jusqu'à la dernière valeur de la colonne)
provisoire = "=SOMME(&CT$4:$CT$ & LstRw)/(60*1000)" 'somme de la case A4 à la dernière valeure de cette colonne'

F_resultats.Select 'passage dans la feuille des résultats
provisoire = Range("A2") 'provisoire contient la valeur de la case A2'


End Sub


Ici, mon but est d'acquérir la bonne syntaxe pour ensuite la transposer pour beaucoup d'autres calculs.
Merci d'avance pour votre aide.
Cordialement,

Fabien

5 réponses

skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
Modifié par skk201 le 23/07/2014 à 16:26
C'est parce que .End(xlUp) ne s'applique qu'à des range.

Plus d'info : https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa214585(v=office.11)?redirectedfrom=MSDN

Et le . ne se met devant un objet que si tu utilise un "With"

*Pensez mettre vos messages en [Résolu] et cliquer sur le + des conseil qui vous ont été utils"
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
23 juil. 2014 à 16:41
D'accord pour le With, mais d''après toi, le Cells(R,C) ne serait pas un Range ???
Pourtant,
Cells(1, 1).End(xlUp)
fonctionne bien.
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
Modifié par skk201 le 23/07/2014 à 17:10
Tu m'apprends un truc la :)
Je savait pas que Cells() renvoyait un range. ^^
Merci

A moins que ce n'est que sous la version 2003 que End(xlUp) ne fonctionne que avec des range ?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 23/07/2014 à 20:29
ça fonctionne avec 2002, et après
et certainement avant
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
24 juil. 2014 à 09:58
Donc c'est que la fonction Cells() renvoie un Range. Je ne savais pas :)

Merci beaucoup pour cette découverte
0
Iama Messages postés 319 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 27 mars 2020 14
23 juil. 2014 à 16:18
Salut


LstRw = Il te manque peut-être qq chose devant les points ou il manque un "With ... end with"
0
via55 Messages postés 14408 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 5 mai 2024 2 706
Modifié par via55 le 23/07/2014 à 16:38
Bonjour Fabien

1) inutile de selectioner les feuilles pour y lire ou placer des valeurs

2) tes lignes de macros ne sont pas correctement écrites, il faut mettre :

Lstrw = F_analyse.Range("A" & Rows.Count).End(xlUp).Row 'derniere ligne npn vide de la colonne A

somme = Application.WorksheetFunction.Sum(F_analyse.Range("A4:A" & Lstrw)) 'calcul de la somme de A4 à A derniereligne

f_resultats.Range("A2") = somme ' inscription de la somme en A2 de la 2nde feuille

Cdlmnt

"L'imagination est plus importante que le savoir." A. Einstein
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
23 juil. 2014 à 16:52
Bonjour via55

Attention, l'utilisation de Rows.count, sans préciser la feuille peut générer une erreur, notamment lorsque la feuille active n'est pas une feuille de calcul, il vaut mieux écrire F_analyse..Rows.Count

Très cordialement
Patrice
0
via55 Messages postés 14408 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 5 mai 2024 2 706
23 juil. 2014 à 17:01
Bonjour patrice

Exact, je suis allé un peu vite, merci d'avoir rectifié

Bien cordialement
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
23 juil. 2014 à 16:35
Bonjour,
En général, les Select sont inutiles, voire néfastes !

Tu peux écrire :
Sub Calculs()
Dim F_analyse As Worksheet
Dim F_resultats As Worksheet
Dim LstRw As Long

  Set F_analyse = ActiveWorkbook.Sheets(1) 'lieu des données= "Analyse "
  Set F_resultats = ActiveWorkbook.Sheets(2)
  LstRw = F_analyse.Cells(F_analyse.Rows.Count, 1).End(xlUp).Row
  F_resultats.Range("A2").FormulaLocal = "=SOMME('" & _
        F_analyse.Name & "'!$CT$4:$CT$" & LstRw & ")/(60*1000)"
  'et éventuellement, pour remplacer la formule par sa valeur :
  F_resultats.Range("A2").Value = F_resultats.Range("A2").Value

End Sub

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fab250 Messages postés 5 Date d'inscription mercredi 4 juin 2014 Statut Membre Dernière intervention 24 juillet 2014
24 juil. 2014 à 11:06
Bonjour à tous!

Merci beaucoup pour toutes ces explications. C'est vraiment sympa de pouvoir compter sur vous!
Grâce à vous, mon programme avance bien.

Cordialement,


Fabien
0