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 :

Combinaison de plusieurs range select [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Mut
    Mut est déconnecté
    Membre éprouvé Avatar de Mut
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2003
    Messages : 931
    Par défaut Combinaison de plusieurs range select
    Bonjour,

    Je souhaiterais savoir comment dépasser/contourner la limitation des 255 caractère dans une méthode range.

    J'ai ce code :

    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
     
    Dim LigneDeb, LigneFin, i As Integer
    Dim MultiRange As String
     
    LigneDeb = 1
    LigneFin = 45
     
     
    For i = LigneDeb To LigneFin
     
    MultiRange = MultiRange & i & ":" & i & ","
     
    Next
    MultiRange = Left(MultiRange, Len(MultiRange) - 1)
    Range(MultiRange).Select
    Cela fait parfaitement ce que je souhaite, c'est à dire de sélectionner les lignes de 1 à 45 de manière dissociée (l'équivalent d'une sélection de ligne avec la touche ctrl)

    Le problème survient lorsque LigneFin dépasse 45 car la variable MultiRange dépasse les 255 caractères et provoque donc une erreur.

    La méthode UNION ne semble pas correspondre car elle ne semble pas sélectionner les lignes unitairement

    Si vous avez une idée...

    Merci

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 246
    Par défaut
    Hello,
    voici un code qui utilise Union et qui sélectionne les 100 premières lignes paires d'un classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub TestRange()
    Dim myArray(1 To 100)
    Dim X As Integer
    Dim RangeToSelect As Range
    For X = 1 To 100
    myArray(X) = X * 2
    Next X
    Set RangeToSelect = Rows(myArray(LBound(myArray)))
    For X = LBound(myArray) + 1 To UBound(myArray)
      Set RangeToSelect = Union(RangeToSelect, Rows(myArray(X)))
    Next
    RangeToSelect.Select
    End Sub
    Ami calmant, J.P

  3. #3
    Mut
    Mut est déconnecté
    Membre éprouvé Avatar de Mut
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2003
    Messages : 931
    Par défaut
    Bonjour Jurassic Pork,

    Merci pour ta réponse.

    Le problème avec ce code c'est qu'il sélectionne les lignes paires.

    J'ai donc commenté le *2 mais le résultat n'est plus pareil car il sélectionne une plage et non les lignes distinctement.

    L'objectif est d'utiliser à la fin de ce code la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Imaginons le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Range("1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:10").Select
        Range("A10").Activate
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Le résultat est différent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub TestRange()
    Dim myArray(1 To 100)
    Dim X As Integer
    Dim RangeToSelect As Range
    For X = 1 To 100
    myArray(X) = X 
    Next X
    Set RangeToSelect = Rows(myArray(LBound(myArray)))
    For X = LBound(myArray) + 1 To UBound(myArray)
      Set RangeToSelect = Union(RangeToSelect, Rows(myArray(X)))
    Next
    RangeToSelect.Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    End Sub

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 246
    Par défaut
    Hello,
    tu peux essayer 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
    16
    17
    18
    Sub TestRange()
    Dim myArray(1 To 10)
    Dim X As Integer
    Dim RangeToSelect As Range
    For X = 1 To 10
    myArray(X) = X
    Next X
    Set RangeToSelect = Cells(1, 1)
    For X = LBound(myArray) + 1 To UBound(myArray)
      If X Mod 2 = 0 Then
      Set RangeToSelect = Union(RangeToSelect, Cells(X, 3))
      Else
      Set RangeToSelect = Union(RangeToSelect, Cells(X, 1))
      End If
    Next
    RangeToSelect.EntireRow.Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    End Sub
    L'astuce consiste à générer une plage avec des cellules non contigues pour chaque ligne et à la fin, on sélectionne la totalité des lignes des cellules de la plage. Union ne va pas dans ce cas "rassembler" les cellules qui sont non contigues.
    Ami calmant, J.P

  5. #5
    Mut
    Mut est déconnecté
    Membre éprouvé Avatar de Mut
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2003
    Messages : 931
    Par défaut
    Désolé pour le retour tardif !

    C'est parfait, merci beaucoup

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/02/2018, 05h56
  2. [VBA-E] selection de plusieurs rangés avec des cellules définies
    Par noir_desir dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 24/02/2007, 14h26
  3. Réponses: 2
    Dernier message: 24/10/2006, 12h42
  4. affichage plusieurs lignes select
    Par Greggggggg dans le forum Langage
    Réponses: 1
    Dernier message: 29/08/2006, 08h46
  5. [LG]Combinaison de plusieurs caractères
    Par krachik dans le forum Langage
    Réponses: 15
    Dernier message: 10/02/2005, 13h18

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