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 :

SOMME.SI.ENS en VBA avec utilisation de 3 classeurs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de MolikDLuffy
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2017
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 158
    Billets dans le blog
    1
    Par défaut SOMME.SI.ENS en VBA avec utilisation de 3 classeurs
    Bonjour,

    J'ai un petit problème concernant le vba et l'utilisation de la fonction SOMME.SI.ENS (SUMIFS).

    Comme vous pouvez le voir ci-dessous en image, j'utilise 3 feuilles (2016 / 2017 / ecart). Mon classeur actif est "ecart" sur la feuille "TYPE A".

    Nom : problemedeveloppez_sommesiensenvba.jpg
Affichages : 1196
Taille : 246,0 Ko

    Mon calcul est tout simple, je dois récupérer la somme total 2016 dans le classeur 2016 en fonction du type et du nom. De même pour 2017. Cela me permettra de calcul les écarts.

    Le problème c'est que je ne sais pas comment jongler entre les classeur en VBA...

    Pourriez-vous m'aider?

    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
    Sub test()
    Dim ligne As Long
    Dim wb16 As Workbook
    Dim wb17 As Workbook
    Dim ecart As Workbook
     
    Set wb16 = Workbooks("2016.xlsx")
    Set wb17 = Workbooks("2017.xlsx")
    Set ecart = ActiveWorkbook
     
    For ligne = 2 To 10000
    Cells(ligne, 3) = Application.WorksheetFunction.SumIfs(wb16.Sheets("2016").Range("C:C"), wb16.Sheets("2016").Range("B:B"), "A", wb16.Sheets("2016").Range("A:A"), Sheets("TYPE A").Cells(ligne, 1))
    Next ligne
     
     
     
    End Sub

    Pour information : Je dois utiliser une boucle car le vrai fichier comporte plus de 400 000 lignes.

  2. #2
    Expert éminent 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
    Par défaut
    Pour information : Je dois utiliser une boucle car le vrai fichier comporte plus de 400 000 lignes.
    C'est un point de vue que je ne partage pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Range("C2:C10000").FormulaLocal = "=SOMME.SI.ENS([2016]2016!C:C;[2016]2016!A:A;$A2;[2016]2016!B:B;$B2)"
    Range("D2:D10000").FormulaLocal = "=SOMME.SI.ENS([2017]2017!C:C;[2017]2017!A:A;$A2;[2017]2017!B:B;$B2)"
    ActiveSheet.Calculate   ' on ne sait jamais...
    Range("C2:D10000").Copy
    Range("C2:D10000").PasteSpecial(xlPasteValues)
    Il doit sans doute être possible de faire les deux premières lignes en une mais j'ai un peu la flemme de faire des tests.

  3. #3
    Membre expérimenté
    Avatar de MolikDLuffy
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Mars 2017
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 158
    Billets dans le blog
    1
    Par défaut
    Merci Menhir pour ta rapidité d'exécution (comme d'habitude).

    Je vois par A plus B que ton point de vue concernant la non obligation d'utiliser une boucle peut marche.

    Merci

  4. #4
    Expert éminent 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
    Par défaut
    Il faudrait quand même que tu fasses en sorte de faire disparaitre ces disgracieux "10000".
    Par exemple, tu peux copier en A:B du fichier destination les A:B des deux fichiers sources et supprimer les doublons avec un RemoveDuplicates.
    Comme ça tu pourras connaitre le nombre de lignes à renseigner et le mettre à la place des 10000.

Discussions similaires

  1. [XL-2010] Somme.si.ens et conditions avec OU
    Par pubbins dans le forum Conception
    Réponses: 3
    Dernier message: 22/11/2015, 19h18
  2. [XL-2007] Somme Prod & Somme Si Ens - Moyenne pondérée avec Critères
    Par Elie G dans le forum Excel
    Réponses: 0
    Dernier message: 03/07/2015, 10h15
  3. somme.si.ens en vba
    Par stagiairecg dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/03/2015, 14h44
  4. [XL-2010] Somme si ens en vba
    Par tompom3108 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/05/2012, 18h01

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