Syntaxe calcul valeur et la renvoyer dans une autre feuille

fab250 Messages postés 5 Statut Membre -  
fab250 Messages postés 5 Statut Membre -
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

  1. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
     
    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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 785
       
      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
    2. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      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
    3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 785
       
      ça fonctionne avec 2002, et après
      et certainement avant
      0
    4. skk201 Messages postés 942 Date d'inscription   Statut Membre Dernière intervention   55
       
      Donc c'est que la fonction Cells() renvoie un Range. Je ne savais pas :)

      Merci beaucoup pour cette découverte
      0
  2. Iama Messages postés 324 Statut Membre 14
     
    Salut

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

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

      Bien cordialement
      0
  4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 785
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fab250 Messages postés 5 Statut Membre
     
    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