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 :

Additionner des cellules en vba [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 343
    Par défaut Additionner des cellules en vba
    Bonsoir

    Je suis à la recherche d'un code pour additionner des cellules

    J'ai les cellules "G3 : J3 a additionner avec le résultat en "K3"
    "G4 : J4 a additionner avec le résultat en "K4"
    Jusqu’aux cellules G200 :K200.

    J'ai mis comme code ceci, mais sa donne des réponse fausse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
          Private Sub Worksheet_Change(ByVal Target As Range)
     
     
      'Calculer point en VBA dans la colonne "K"
    [K3:K200].FormulaR1C1 = "=IF(COUNT(RC7:RC10),SUM(RC7:RC10),"""")"
    [K3:K200] = [K3:K200].Value
     
    Exit Sub
    End Sub
    Merci d'avance pour votre aide

    Max

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pourquoi cette ligne [K3:K200] = [K3:K200].Value ?
    C'est elle qui pose problème.
    Voici un code qui fonctionne parfaitement pour les cellule de F2 à F28
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub T2()
     Dim rng As Range, Formula As String
     Set rng = ThisWorkbook.Worksheets("Feuil2").Range("F2:F31")
     Formula = "=IF(COUNT(RC7:RC10),SUM(RC7:RC10),"""")"
     rng.Formula = Formula
     ' [F2:F28].Formula = Formula ' <-- Cette syntaxe fonctionne aussi mais je ne l'utilise jamais
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut Erratum
    Bonjour,
    Désolé pour ma réponse un peu hâtive et sur le test que j'ai fait dans une simple procédure alors que la question portait sur un problème provenant d'un code présent dans une procédure événementielle.
    Dans la question posée , je n'ai vu que ceci
    J'ai mis comme code ceci, mais sa donne des réponse fausse
    Il n'était pas fait mention d'une fermeture d'excel.
    J'ai compris aussi que dans cette ligne [K3:K200] = [K3:K200].Value, tu voulais remplacer la formule par les valeurs retournées.

    Ton problème provient du fait que la procédure s'enclenche dès que l'on change la valeur d'une cellule dans la feuille. Or, le fait d'écrire dans une ou plusieurs cellules de cette feuille a pour effet de provoquer un nouvel événement et cela part en boucle et provoque une erreur.
    Il y a donc lieu de rendre momentanément inopérant les événements.
    Il faut donc pour cela utiliser l'instruction Application.EnableEvents = False en début de procédure et ne pas oublier de remettre à True la valeur de cette propriété.
    Voici donc le code qui fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Range)
     Application.EnableEvents = False
     [K3:K200].FormulaR1C1 = "=IF(COUNT(RC7:RC10),SUM(RC7:RC10),"""")"
     [K3:K200] = [K3:K200].Value
     Application.EnableEvents = True
    End Sub
    Bien que je ne comprenne pas vraiment le but de cette procédure, j'ajouterais un test pour ne procéder à ce calcul que dans le cas où l'on a modifié une cellule de la plage G3:J200.
    Avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Intersect(Target, Range("G3:J200")) Is Nothing Then
      Application.EnableEvents = False
      [K3:K200].FormulaR1C1 = "=IF(COUNT(RC7:RC10),SUM(RC7:RC10),"""")"
      [K3:K200] = [K3:K200].Value
      Application.EnableEvents = True
     End If
    End Sub
    Comme tu n'as besoin que du résultat final, tu pourrais aussi utiliser la fonction SUM de VBA et uniquement sur la ligne en question. Cela me semble plus efficace.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
     If Not Intersect(Target, Range("G3:J200")) Is Nothing Then
      Application.EnableEvents = False
      Range("K" & Target.Row) = Application.WorksheetFunction.Sum(Range(Cells(Target.Row, "G"), Cells(Target.Row, "J")))
      Application.EnableEvents = True
     End If
    End Sub
    Ici, je ne teste pas si les cellules de la plage Grow:Jrow sont remplies mais il suffit d'ajouter un test avec Application.WorksheetFunction.CountA
    Cependant, je suppose que si tu places une chaîne vide, c'est pour ne pas voir les zéros éventuels dans la colonne K.
    Il existe alors d'autres moyens de ne pas les visualiser (Mise en Forme Conditionnelle, Format personnalisé ou Option d'excel).
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 343
    Par défaut
    Bonjour Philippe,

    Je te remercie avec tout sa je vais bien m’en sortir.

    Merci et bonne soirée


    Max

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

Discussions similaires

  1. [XL-2000] Additionner des cellules de plusieurs fichiers
    Par shenmicke dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2014, 00h43
  2. [XL-2010] Additionner des cellules suivant 2 critères
    Par elsabio dans le forum Excel
    Réponses: 2
    Dernier message: 08/01/2013, 22h42
  3. Problème envoi par mail des cellules filtrées VBA
    Par Miguel973 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/03/2011, 11h12
  4. Additionner des cellules
    Par dzorg dans le forum Excel
    Réponses: 3
    Dernier message: 20/09/2008, 19h00
  5. mettre des n° dans des cellules avec VBA
    Par naitgo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/11/2007, 20h48

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