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 :

[VBA-E] Question sur les Array de plages


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Points : 36
    Points
    36
    Par défaut [VBA-E] Question sur les Array de plages
    hello !

    Je travaille actuellement au traitement d'un document et j'ai besoin de reformatter une série de plages non contigües, avec le même format.
    J'utilise un Array pour regrouper mes plages de travail, avec un code qui ressemble à ça :
    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
    Workbooks("rato.xls").Activate
     
    Dim monarray as variant
    Dim dernLigneD  as integer
    Dim dernLigneP  as integer
     
    dernLigneD = Sheets("Demands").Range("A1").CurrentRegion.Rows.Count
    dernLigneP = Sheets("Projects").Range("A1").CurrentRegion.Rows.Count
     
    '' Re formatage des zones de dates pour rendre celles au format texte, calculables
     
    monarray = Array(ActiveWorkbook.Sheets("Demands").Range(Cells(2, 9), Cells(dernLigneD, 12)), _
                ActiveWorkbook.Sheets("Demands").Range(Cells(2, 24), Cells(dernLigneD, 32)), _
                ActiveWorkbook.Sheets("Projects").Range(Cells(2, 12), Cells(dernLigneP, 24)))
     
    ... traitement des plages contenues dans l'Array...
    Ce monarray pose problème : avec les 2 premières valeurs l'exécution se passe comme un charme, mais avec l'ajout de la 3ème valeur (ActiveWorkbook.Sheets("Projects").Range(Cells(2, 12), Cells(dernLigneP, 24))) elle plante avec une erreur 1004.

    Où est le problème ?? Un tableau ne peut-il contenir que des références au sein d'une même feuille ? Le classeur reste le même cependant.

    Merci de votre aide à ma compréhension.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    N'as-tu pas des lignes ou des colonnes entièrement vides dans ta plage ?
    Si tu as une ligne vide, cette syntaxe va limiter ta plage.
    dernLigneP = Sheets("Projects").Range("A1").CurrentRegion.Rows.Count
    Teste ce que tu as dans dernière ligne en mettant un point d'arrêt sur la ligne qui suit.
    Tu dis
    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    Alors, déjà, merci pour ta réponse.

    J'ai effectivement des colonnes presque vides, où seuls les en-tête de colonne apparaissent. J'ai modifié mon paramétrage (au lieu de Cells(2, x) j'ai pris Cells(1, x)) et l'erreur se reproduit.
    Par contre, je n'ai jamais de lignes totalement vides, et le ActiveRange.Rows me renvoie un résultat cohérent.

    A force de tests, il semble que l'erreur 1004 apparaît à chaque fois lorsque je crée un Array avec des plages qui ne sont pas sur la même feuille.

    Quelqu'un aurait un contournement à proposer ??? Sinon, je vais certainement finir avec 1 array par feuille...

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je n'avais pas remarqué que tu créais des plages situées sur différentes feuilles. En effet, tu peux sélectionner une plage identiques sur des feuilles différentes mais je ne pense pas que tu puisses le faire a la fois sur des plages différentes pour des feuilles diffrentes. A vérifier.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    Au final, je ne comprends plus :
    Chacune de mes plages, lorsqu'elle est seule dans l'array, est fonctionnelle.
    Lorsqu'au sein d'un seul array, j'ai des plages sur plusieurs feuilles, ça marche pas (erreur 1004, la fameuse !)

    Alors, j'ai changé de stratégie, et j'utilise des Range de type A1 au lieu de Range de type Cells, et ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Workbooks(my_shit).Activate
    ' recherche de la dernière ligne de chaque feuille
    dernLigneD = Sheets("Demands").Range("A1").CurrentRegion.Rows.Count
    dernlignep = Sheets("Projects").Range("A1").CurrentRegion.Rows.Count
    ' Plages de cellules à formater
    monarray = Array(ActiveWorkbook.Sheets("Demands").Range("B2:AF" & dernLigneD), _
            ActiveWorkbook.Sheets("Projects").Range("L2:AX" & dernlignep))

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Oui, en créant un tableau des différentes plages, tu peux faire ça mais comment tu utilises ton tableau ? Ce n'est pas un range... C'est un tableau (...)
    A+

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 50
    Points : 36
    Points
    36
    Par défaut
    ben, je sais pas trop... Je l'utilise comme un tableau, en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim myarray as Variant
    Dim i as Integer
     
    myarray = array(rangeA, rangeB, ...)
     
    for i = 0 to Ubound(myarray)
    set maplage = myarray(i)
    for each cell in maplage
    bla bla bla...
    next cell
    next i
    Tout en étant convaincu que c'est pas catholique comme méthode, au moins ça marche...

    Pour moi en tout cas, c'est résolu !

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

Discussions similaires

  1. Question sur les Array
    Par Silerys dans le forum Débuter
    Réponses: 4
    Dernier message: 16/08/2012, 10h29
  2. une question sur les array list
    Par yacin87 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 09/04/2010, 22h56
  3. Réponses: 7
    Dernier message: 09/05/2007, 19h35
  4. Réponses: 7
    Dernier message: 10/01/2007, 00h37
  5. [VBA-Excel] Question sur les Treeview
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/12/2006, 16h21

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