Syntaxe calcul valeur et la renvoyer dans une autre feuille

fab250 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
fab250 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

5 réponses

skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   54
 
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 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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 942 Date d'inscription   Statut Membre Dernière intervention   54
 
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 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
ça fonctionne avec 2002, et après
et certainement avant
0
skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   54
 
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   Statut Membre Dernière intervention   14
 
Salut


LstRw = Il te manque peut-être qq chose devant les points ou il manque un "With ... end with"
0
via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
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 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
Bonjour patrice

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

Bien cordialement
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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   Statut Membre Dernière intervention  
 
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