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 :

Methode consolidate et array source


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Par défaut Methode consolidate et array source
    Bonjour,

    je précise avant toute chose être nouveau à la fois en VBA et sur ce forum donc je m'excuse par avance si je ne respecte pas certaines règles ou pose une question stupide.

    mon problème est le suivant : j'essaye d'automatiser une consolidation de plusieurs plage nommées qui se fait via la fonction "consolider données" d'excel (il existe surement un meilleur moyen de faire mais passer par cette méthode est une contrainte qui m'est imposée).
    L'enregistreur de macro m'indique la méthode .consolidate Sources:=array("plage1", "plage2", etc).
    Mon but est de pouvoir changer les plages prises en compte selon certaines conditions dans le code (checkboxes pour choisir les éléments à consolider), mais je ne sais pas comment y parvenir.
    J'ai essayé de créer de passer par un code qui m'écrit le nom des plages à consolider dans une colonne, pour créer un array dynamique qui contiendrait les éléments que je veux avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sheets("donnees").range("A1").Select
    Dim rowcount As Integer
    Dim arrayconso() As Variant, i As Integer
    rowcount = 0
    Do Until IsEmpty(ActiveCell)
    Selection.Offset(1, 0).Select
    rowcount = rowcount + 1
    Loop
    ReDim arrayconso(rowcount)
    For i = 1 To rowcount
         arrayconso(i) = Cells(i, 1).Value
    Next i
    celui-ci semble fonctionner mais je n'arrive pas à intégrer mon arrayconso créé dans la méthode consolidate avec tous ses éléments (dont le nombre est variable).
    Puis-je intégrer un array prédéfini par avance à la méthode consolidate et si oui comment ? Si non, comment puis-je consolider des plages via cette méthode tout en sachant que le nombre de plage à consolider est variable ?

    Merci par avance si certains peuvent m'aider.

  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
    Ca ne va pas répondre à ta question mais ton code peut s'écrire plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim arrayconso() As Variant, i As Integer
    ReDim arrayconso(Sheets("donnees").Range("A1").End(xlDown).Row)
    For i = 1 To Sheets("donnees").Range("A1").End(xlDown).Row
        arrayconso(i) = Cells(i, 1).Value
    Next i
    La propriété End de l'objet Range t'évite d'avoir à faire une boucle pour chercher la première cellule vide.
    https://msdn.microsoft.com/fr-fr/lib.../ff839539.aspx

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Par défaut
    Merci, en effet ça sera un peu moins laborieux.

    Je bloque toujours sur mon problème par contre

  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
    Je pense que si tu n'as pas reçu de réponse, c'est sans doute parce que ta question n'a pas été comprise.
    C'est le cas pour ce qui me concerne. Je ne comprends pas ce que tu cherches à faire dans la partie de ta question située après ton code.

    Donc, de deux choses l'une :
    - Soit il s'agit d'un exercice dans lequel tu dois absolument utiliser la méthode Consolidate et, dans ce cas, commence par lire ça ( http://club.developpez.com/regles/#LIV-N ) et propose une première version de code qu'il sera possible de corriger.
    - Soit ce n'est pas le cas et essaye d'expliquer ce que tu souhaites faire en terme de finalité de ton code et non en terme de méthode (cad sans parler de Consolidate).

    Parce que là, je ne vois vraiment pas la finalité : mettre le contenu de cellules successives dans une variable tableau pour ensuite mettre le contenu de cette variable tableau dans des cellules, sans traitement intermédiaire, c'est un peu comme si un chirurgien opérait des amygdales en passant par le rectum.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Par défaut
    Oui je m'y prends probablement mal. Il ne s'agit pas d'un exercice (mais je dois malheureusement absolument utiliser la méthode consolidate "parce que tout le monde fait comme ça et il faut que ça reste comme ça").


    Mais je vais essayer d'oublier ce que j'ai fait et partir du besoin :

    Je travaille sur des chiffres via un fichier qui consolide plusieurs autres fichiers via la fonction "consolider des données" d'excel. Je dois entrer tous les jours les plages à consolider (une centaine) mais pas toujours toutes (sachant que les fichiers sources changent de nom en partie et de chemin d'accès tous les jours, en fonction de la date ce qui m'oblige à le refaire tous les jours).

    Je cherche donc à automatiser ce process. Les cellules successives contiennent les références des plages que j'ai besoin de consolider.

    La méthode consolidate (qui est une contrainte imposée) semble n'accepter qu'une source au format array(plage1, plage2, plage3). Mon problème étant que le nombre de plage à consolider est variable, je ne sais pas comment m'y prendre.

  6. #6
    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,

    comme indiqué dans l'aide VBA interne, la méthode Range.Consolidate prend pour source une matrice texte des plages à traiter …
    Créer une variable tableau du nombre de plages.
    Alimenter cette variable tableau pour chaque plage via la propriété Range.Address en activant son argument External


    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/05/2014, 13h53
  2. [Templates] Invalid method Mage_Catalog_Block_Navigation::drawCustomMenuItem(Array
    Par ismael25 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 29/03/2013, 16h42
  3. [Débutant] Methode renvoyant un array
    Par mickmix69 dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/11/2011, 13h01
  4. [PHP 5.2] class::method() : réorthographié comme array ?
    Par paragoge dans le forum Langage
    Réponses: 8
    Dernier message: 17/08/2010, 11h13
  5. [Tableaux] methode post et array ..
    Par Adren dans le forum Langage
    Réponses: 10
    Dernier message: 29/07/2006, 00h41

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