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 :

Appliquer une formule de calcul impliquant les mêmes colonnes dans plusieurs feuilles


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Appliquer une formule de calcul impliquant les mêmes colonnes dans plusieurs feuilles
    Bonjour à tous,

    J'ai donc un fichier avec 28 feuilles de calcul nommées Fich1, Fich2, etc.. jusqu'à Fich28.

    Dans la cellule L13 de la feuille "Recap" j'ai cette formule de calcul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SOMME.SI(Fich1!$I$8:$I$36;"<2";Fich1!$E$8:$E$36)
    Là, elle ne s'applique qu'à la fich1, mais je dois faire la somme de toutes les colonnes identiques des 28 feuilles et faire une addition de Somme.si me paraît fastidieux.

    Difficultés supplémentaires, en L14 de la feuille "Recap" la même formule s'applique mais le "<2" est remplacé par "<3", en L15 "<4", ainsi de suite jusqu'à la cellule L24 "<13".

    Existe t-il un moyen de passer par une macro et comment faire ?

    Merci par avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, oui ce serait possible.

    Mais avant d'attaquer du code, vaut mieux envisager une solution interne aux feuilles de calcul bien plus rapide que le VBA …

    Regarde dans ta version l'aide pour la référence 3D,
    et voir si la fonction SOMME.SI est incluse dans les fonctions pouvant être utilisées dans une référence 3D.

    SI elle n'est pas incluse comme celle - ancienne - depuis le poste actuel où je me trouve,
    il suffit de faire tes SOMME.SI dans chaque feuille à la même adresse de cellule
    puis dans ta feuille de récap effectuer une SOMME en référence 3D.


  3. #3
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour

    Ceci devrait faire cela
    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
    Private Sub somme_si()
    Dim condition As Byte, c As Byte
    Dim x As Double
    condition = 2
    For c = 13 To 24
        For i = 2 To ActiveWorkbook.Sheets.Count 'si recap est la premiere feuille, sinon à adapté
            With Sheets(i)
            x = Application.SumIf(.Range("i:i"), "<" & condition, .Range("e:e"))
            End With
        Sheets("recap").Cells(c, 12) = Sheets("recap").Cells(c, 12) + x
        Next i
    condition = condition + 1
    Next c
     
    End Sub

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour Keygen38 et merci pour ton aide.

    Dois-je mettre cette macro dans un module ou directement dans la feuille ?

    J'ai mis le code dans un module. Ensuite je l'appelle. Mais les sommes restent à 0

    Dans la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Worksheet_Activate()
    somme_si
    End Sub
    Dans le module
    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
    Sub somme_si()
    Dim condition As Byte, c As Byte
    Dim x As Double
    condition = 2
    For c = 13 To 24
        For i = 29 To ActiveWorkbook.Sheets.Count 'Recap est la 29ème feuille        
    With Sheets(i)
            x = Application.SumIf(.Range("i:i"), "<" & condition, .Range("e:e"))
            End With
        Sheets("recap").Cells(c, 12) = Sheets("recap").Cells(c, 12) + x
        Next i
    condition = condition + 1
    Next c
     End Sub

  5. #5
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    A modifier comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 1  To ActiveWorkbook.Sheets.Count -1 ' si Recap est la derniere feuille
    Ou comme ceci
    Avec for, on initie une boucle qui va faire le calcul sur toutes les feuilles. Donc les feuilles 1 à 28.

    Dois-je mettre cette macro dans un module ou directement dans la feuille ?
    L'un ou l'autre, dans un module, c'est bien le temps de verifier qu'elle fonctionne, puis la deplacer dans le worksheet_activate.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Merci, ça marche. Cependant j'ai un soucis, J'ai mis le code dans la feuille "Recap" comme ceci :

    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
     
    Private Sub Worksheet_Activate()
    Dim condition As Byte, c As Byte
    Dim x As Double
    condition = 2
    For c = 13 To 24
        For i = 1 To ActiveWorkbook.Sheets.Count 'Recap est la 29ème feuille
            With Sheets(i)
            x = Application.SumIf(.Range("i:i"), "<" & condition, .Range("e:e"))
            End With
        Sheets("Recap").Cells(c, 12) = Sheets("Recap").Cells(c, 12) + x
        Next i
    condition = condition + 1
    Next c
    End Sub
    Mais à chaque fois que j'active la feuille, il y a un cumul des sommes. Si par exemple il y a 100, alors à la prochaine activation il y 200, puis 300.

    Où est le problème ?

  7. #7
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Oui bien sur.

    Il faut evidemment vider la plage avant d'effectuer le calcul
    donc mettre ceci en ligne 5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets("recap").range("l13:l24").clearcontents
    ou ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sheets("recap").range("l13:l24")=0

  8. #8
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Ok merci, c'est beaucoup mieux. J'ai cherché alors que cela était évident.
    Certainement la fin de semaine, le cerveau est au ralentit en préparation du weekend.

    Tu m'as enlevé une épine du pied.

    Encore merci et bon weekend
    René

  9. #9
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 56
    Par défaut
    Bonjour,

    Il n'y a pas besoin de VBA pour une chose aussi simple

    =SOMMEPROD(SOMME.SI(INDIRECT("Fich"&LIGNE(1:28)&"!I8:I36");"<2";INDIRECT("Fich"&LIGNE(1:28)&"!E8:E36")))

    Ceuzin
    Fichiers attachés Fichiers attachés

  10. #10
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour,

    J"avais essayé cette formule, mais elle ne fonctionnait pas, pourquoi ? je ne sais pas. C'est pour cette raison que je suis passé par du VBA.

    De plus, cela a l'avantage de ne pas être effacé par erreur lors d'un passage sur la cellule, car je ne peux pas, pour des raisons pratiques mettre une protection sur la feuille (ordre du chef).

    Merci toutefois pour la réponse, je la garde sous le coude pour une prochaine fois.
    Cordialement
    René

  11. #11
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 56
    Par défaut
    >J"avais essayé cette formule, mais elle ne fonctionnait pas, pourquoi ? je ne sais pas.
    Ce n'était pas cette formule qui fonctionne (cf PJ)

    >De plus, cela a l'avantage de ne pas être effacé par erreur lors d'un passage sur la cellule, car je ne peux pas, pour des raisons pratiques mettre une protection sur la feuille (ordre du chef).
    ??!!!

    Ceuzin

  12. #12
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    J'ai bien vu que dans ton fichier cela fonctionnait. Mais dans mon cas, j'ai du oublié quelque chose car elle ne fonctionnait pas.

    Malheureusement, certain ne font pas attention aux formules et les effacent par erreur. Il est évident qu'ensuite cela marche beaucoup moins bien.

    Mais bon, mon fichier fonctionne et c'est cela le plus important, non ?

    Merci encore pour ton intervention.

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

Discussions similaires

  1. [AC-2003] Une formule pour calculer les in et out d une table de pointage
    Par taz devil dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 29/06/2015, 12h46
  2. [XL-2003] Appliquer une formule à toutes les lignes d'une colonne sans en connaitre le nombre à l'avance
    Par Chevrefeuille dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 08/04/2010, 14h43
  3. Insérer les mêmes valeurs dans plusieurs tables
    Par hsoussou dans le forum SQL*Loader
    Réponses: 8
    Dernier message: 29/03/2010, 17h14
  4. utiliser les mêmes variable dans plusieurs class
    Par hterrolle dans le forum Langage
    Réponses: 2
    Dernier message: 16/11/2007, 21h11
  5. Mauvais résultat aprés une formule de calcul complexe
    Par poufouille dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/12/2004, 00h12

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