IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Syntaxe pour calculer une valeur et la renvoyer dans une autre feuille [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Syntaxe pour calculer une valeur et la renvoyer dans une autre feuille
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    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

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    LstRw = .Cells(.Rows.Count, 1).End(xlUp).Row
    Tu dois spécifier le nom de la feuille devant .Cells

    Comme tu as déjà sélectionné la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LstRw = ActiveSheet.Cells(.Rows.Count, 1).End(xlUp).Row
    Autrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LstRw = Sheets(2).Cells(.Rows.Count, 1).End(xlUp).Row 'ou autre
    MPi²

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Cela ne marche pas quand même.
    La fenêtre d'erreur me surligne le .Rows (qui est dans la parenthèse)
    LstRw = ActiveSheet.Cells(.Rows.Count, 1).End(xlUp).Row

    Sais tu pourquoi?

    Merci d'avance.

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Même motif que pour le Cells : tu ne spécifies pas l'objet parent.

    Quand on commence un nom d'objet (ou une chaîne d'objet) par un ".", il faut qu'il soit encadrer d'un With pour que l'objet parent soit définit.

    Sinon, si l'objet parent est implicite, il ne faut pas mettre de "." au début.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ActiveSheet
       LstRw = .Cells(.Rows.Count, 1).End(xlUp).Row
    End With
    permet d'appliquer le ActiveSheet à tous les objet commençant par un "." entre With et End With.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Je suis allé un peu trop vite...
    J'aurais dû enlever aussi le point de .Rows
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LstRw = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    Mais Menhir a bien expliqué l'histoire des points
    MPi²

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par parmi Voir le message
    J'aurais dû enlever aussi le point de .Rows
    Je pense qu'il aurait plutôt fallu ajouter une Sheet (ActiveSheet ou une des variables renseignée juste avant).
    Parce que s'il n'y a pas besoin de référence à une feuille pour le Rows, il n'y en a pas non plus besoin pour le Cells (et inversement).
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Pas nécessairement.
    Si tu mets le code suivant dans Feuil1, Rows est reconnu comme faisant partie de Feuil2 implicitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nblignes = Sheets("Feuil2").Cells(Rows.Count, "A").End(xlUp).Row
    MPi²

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Effectivement, dans la mesure où toutes les feuilles Excel ont le même nombre maximum de lignes, Rows.Count ne dépend pas de la feuille sur laquelle on pointe et on peut se contenter de la feuille active, quelle qu'elle soit.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonsoir,

    Citation Envoyé par parmi Voir le message
    Pas nécessairement.
    Si tu mets le code suivant dans Feuil1, Rows est reconnu comme faisant partie de Feuil2 implicitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nblignes = Sheets("Feuil2").Cells(Rows.Count, "A").End(xlUp).Row
    ben non .. rows sans rien devant concerne la feuille active ... et donc pas forcément la feuil2 ... ton code marche parce-que tu as la chance que la feuille active possède le même nombre de ligne que ta feuille 2 ..

    c'est facilement vérifiable en plaçant ton code dans un classeur 2003... et en modifiant légèrement ton code pour être sur d'utiliser la feuille 2 du classeur contenant ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nblignes = ThisWorkbook.Sheets("Feuil2").Cells(Rows.Count, "A").End(xlUp).Row
    ce code bugge si la feuille active est dans un classeur xlsx (ou xlsm) ...



    Une autre façon de voir que ton code à un problème est de l’exécuter sans avoir de feuille de calcul active ... rajoute par exemple une feuille graphique active la dans ton calcul est exécute ton code ...


    tout cela montre que mieux vaut TOUJOURS précisé devant les objets Rows, range, Cells la feuille concerné et éviter de laisser excel se débrouiller avec la feuille active car il est facile de trouver un cas ou le code foire ...

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bien vu Messieurs
    MPi²

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Renvoyer une valeur sans la choisir dans une liste deroulante
    Par maclolo2 dans le forum IHM
    Réponses: 1
    Dernier message: 03/08/2012, 10h37
  2. Réponses: 12
    Dernier message: 21/08/2006, 16h25
  3. Utiliser une valeur d'un formulaire dans un autre ?
    Par jessy212 dans le forum Access
    Réponses: 3
    Dernier message: 21/08/2006, 13h05
  4. insérer une valeur de type float dans une abse de données
    Par Stephane_br dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/11/2005, 10h47
  5. [MySQL] Pb d'insertion d'une valeur de champ select dans une Bdd
    Par Mimisator dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 20/10/2005, 18h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo