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 :

Union de range [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 65
    Par défaut Union de range
    Bonjour à tous,

    Je reviens vers vous avec un problème que je n'arrive pas à résoudre :

    Je veux rassembler plusieurs lignes d'un classeur dans un range sur lequel je vais travailler ensuite. J'ai tout d'abord rassemblé les lignes qui m'intéresse dans un tableau Tblo composé des index des lignes à inclure dans le range. Ensuite j'utilise la fonction union pour créer ma range :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Set PlageSelect = Nothing
    For k = 1 To UBound(TbloFin, 1)
    Set PlageSelect = Application.Union(PlageSelect, FeuilA.Rows(Tblo(k, 3)))
    Next k
    Mais quoi que je fasse, mon range PlageSelect reste "Nothing" et je ne comprends absolument pas pourquoi. Pouvez-vous m'éclairer ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut
    Bonjour,

    Que donnerait ce code ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set PlageSelect = Nothing
    For k = 1 To UBound(TbloFin, 1)
    Set PlageSelect = Application.Union(FeuilA.Rows(Tblo(k, 3)))
    Next k

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 65
    Par défaut
    Ca ne marche pas parce que Union nécessite deux arguments obligatoires (sinon pas d'union : ce qui parait en somme plutôt logique !). En revanche, en faisant cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                            Set PlageSelect = Nothing
                            For k = 1 To UBound(Tblo, 1)
                                If k = 1 Then
                                    Set PlageSelect = FeuilA.Rows(Tblo(k, 3))
                                Else
                                    Set PlageSelect = Application.Union(PlageSelect, FeuilA.Rows(Tblo(k, 3)))
                                End If
                            Next k
    Ca marche ! Mais je trouve cela complètement moche. Si vous avez une suggestion plus élégante, je suis preneur !

    Merci en tout cas pour votre aide,

    Pubbins.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Soit u concatène les numéros de ligne puis tu le passe en argument à Range() :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Sub Test()
     
        Dim PlageSelect As Range
        Dim TbloFin(1 To 5) As Long
        Dim K As Integer
        Dim Lignes As String
     
        TbloFin(1) = 3
        TbloFin(2) = 5
        TbloFin(3) = 8
        TbloFin(4) = 15
        TbloFin(5) = 22
     
        For K = 1 To UBound(TbloFin)
            Lignes = Lignes & TbloFin(K) & ":" & TbloFin(K) & ","
        Next K
     
        'supprime la virgule de fin
        Lignes = Left(Lignes, Len(Lignes) - 1)
     
        Set PlageSelect = Range(Lignes)
     
        PlageSelect.Select
     
    End Sub
    Soit il te faut définir la première plage avant de boucler :
    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
    18
    19
    20
    21
    22
    23
    24
    25
     
    Sub Test()
     
        Dim PlageSelect As Range
        Dim TbloFin(1 To 1, 1 To 5) As Long
        Dim K As Integer
     
        TbloFin(1, 1) = 3
        TbloFin(1, 2) = 5
        TbloFin(1, 3) = 8
        TbloFin(1, 4) = 15
        TbloFin(1, 5) = 22
     
        'défini la première plage
        Set PlageSelect = Rows(TbloFin(1, 1))
     
        'boucle sur les autres
        For K = 2 To UBound(TbloFin, 2)
            Set PlageSelect = Application.Union(PlageSelect, Rows(TbloFin(1, K)))
        Next K
     
        'sur la feuille active
        PlageSelect.Select
     
    End Sub
    et puis, tu obliges la déclaration des variables de façon explicite et tu trouvera plus facilement les erreurs !
    "For k = 1 To UBound(TbloFin, 1)"-->"Application.Union(PlageSelect, FeuilA.Rows(Tblo(k, 3)))"

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

Discussions similaires

  1. Selection et construction Range avec union
    Par tamtam64 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/06/2015, 08h34
  2. [XL-2007] Union(range(Tb1),range(Tb2)).find => la méthode 'Union' a échoué
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 27/05/2015, 21h20
  3. [XL-2000] Union de plage Range renvoie un Range à moitié vide ou #N/A
    Par aurelien.g dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 21/04/2011, 13h51
  4. union range arguments variables
    Par seb4182 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/10/2009, 14h48
  5. [VBA][Excel] Range & Union
    Par sat478 dans le forum Access
    Réponses: 4
    Dernier message: 16/12/2005, 09h59

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