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 :

[E-03] Actualiser somme effectuée par macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut [E-03] Actualiser somme effectuée par macro
    Bonsoir,

    J'ai fait une petite macro pour effectuer le total d'une colonne dont la taille est variable.
    Je n'ai pas de souçi pour trouver la 1ère case libre de la colonne pour et y effectuer le total.
    Le problème c'est que la case prend la valeur du total mais sans que la formule y soit enregistrée (pourtant j'utilise l'attribut .formula).

    Du coup si je change une valeur dans la colonne le résultat ne s'actualise pas et si je réexécute la macro en question elle me refait,en dessous, la somme de l'ancien total qui avait été effectué (puisqu'il se trouve lui aussi dans la colonne à présent) et du nouveau total

    Voici le bout de code concerné avec en gras la ligne ou j'essaye d'affecter la formule de somme à la cellule du total:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sheets("Feuil1").Select
    Range("F2").Select
    While ActiveCell.Text <> ""
        ActiveCell.Offset(1, 0).Activate
    Wend
    
    ActiveSheet.Unprotect
    
    With WorksheetFunction
        ActiveCell.Formula = .Sum(Range(Cells(2, 6), Cells(ActiveCell.Row - 1, 6)))
    End With
    Comment faire pour bien affecter la formule à la cellule et pas seulement le résultat pour que le total s'actualise ?

    Merci d'avance

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Il faut définir la formule, pas écrire son résultat. Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveSheet.Unprotect
     
    ActiveCell.Formula = "=Sum(" & Range(Cells(2, 6), Cells(ActiveCell.Row - 1, 6))).Address & ")"
    A mettre au point.

    PGZ

  3. #3
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut
    Parfait ! La mise au point n'a pas été longue il y avait juste une paranthèse en trop

    Pourrais-tu aussi m'expliquer pourquoi tu utilise des & pour encadrer l'argument de Sum ?

    Merci !

  4. #4
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    Bonjour,

    La propriété Formula de l'objet cellule est de type chaine de caractére, cette formule est calculé par concaténation de chaine, & c'est l'opérateur de concaténation de chaine en VB.

    il permet de concaténer la plage d'addresse renvoyé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(2, 6), Cells(ActiveCell.Row - 1, 6))).Address
    avec le reste de la formule.

  5. #5
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 18
    Par défaut
    La propriété Formula de l'objet cellule est de type chaine de caractére, cette formule est calculé par concaténation de chaine, & c'est l'opérateur de concaténation de chaine en VB.
    Ok je crois que j'ai compris...aurait-il été possible d'utiliser CStr() bien que que la plage d'adresses contienne des nombres ? (Désolé de poser des questions de newbie mais je préfère bien comprendre)


    Merci

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    La propriété Address renvoie une String.
    Inutile, donc, de la convertir.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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

Discussions similaires

  1. [XL-2010] Effectuer la macro sur les onglets commencant par
    Par gilles171 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 24/11/2014, 11h26
  2. [XL-2003] Somme automatique par macro
    Par Domimart dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/04/2011, 11h36
  3. Insérer Formule somme par macro
    Par joums dans le forum Conception
    Réponses: 21
    Dernier message: 21/10/2009, 12h11
  4. probleme actualisation d'une combobox générée par macro.
    Par elombre dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 11/06/2009, 12h38
  5. [VBA-E]actualisation d'un tableau dynamique par macro
    Par illight dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/04/2006, 16h37

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