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 :

Sélection de colonnes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut Sélection de colonnes
    Bonjour,

    je voudrais savoir comment faire pour sélectionner tous les colonnes paires ou impaires à partir d'une colonne jusqu'à une autre colonne.

    Par exemple, pour sélection les colonnes impaires de E à M on ferait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("E:E,G:G,I:I,K:K,M:M").Select
    mais je voudrai le faire en dynamique, sans avoir à entrer tous les colonnes.

    Merci de votre réponse.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Il y a peut-être plus simple. L'idée est de créer la chaine des colonnes par boucle. Il y a la procédure avec les paramètres, et une procédure TEST pour illustrer comment l'utiliser

    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
    Sub SelectionnerColonnes(ColonneDebut As String, ColonneFin As String, ColonnesPaires As Boolean)
        Dim ColNumDebut As Integer
        Dim i As Integer
        Dim Chaine As String
     
        ColNumDebut = Range(ColonneDebut & "1").Column
     
        If ColNumDebut Mod 2 <> 0 And ColonnesPaires Then ColNumDebut = ColNumDebut + 1
     
        For i = ColNumDebut To Range(ColonneFin & "1").Column Step 2
            Chaine = Chaine & Split(Cells(1, i).Address, "$")(1) & ":" & Split(Cells(1, i).Address, "$")(1) & ","
        Next i
        Chaine = Left(Chaine, Len(Chaine) - 1)
        Range(Chaine).Select
    End Sub
     
    Sub Test()
        SelectionnerColonnes "E", "O", True
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim Plage As Range, Liste As String
    Dim PremCol As Integer, DerCol As Integer, NoCol As Integer
        PremCol = 6
        DerCol = 18
        For NoCol = PremCol To DerCol Step 2
             Liste = Liste & Split(Cells(1, NoCol).Address, "$")(1) & ":" & Split(Cells(1, NoCol).Address, "$")(1) & ","
        Next
        Liste = Left(Liste, Len(Liste) - 1)
        Range(Liste).Select
    End Sub
    Tu peux utiliser la même procédure en envoyant PremCol et DerCol en paramètres, auquel cas tu les inclus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub test(PremCol As Integer, DerCol As Integer)
    et auquel cas tu supprimes les déclaration et leurs valeurs dans la sub
    Pour l'appeler
    Bonne soirée

    Edit
    Nettement grillé mais entre temps j'ai diné
    Incroyable ! On croirait que j'ai copié ton code. J'avais même l'option pour différencier le paire de l'impaire en ajoutant un paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If PremCol Mod 2 = Parametre Then PremCol = PremCol + 1

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juin 2007
    Messages : 126
    Par défaut
    MERCI à vous deux pour la rapidité et l'efficacité de réponse.

    j'ai testé et ça marche bien.

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 658
    Par défaut
    Bonjour,

    Ce fil m'intéresse,

    En reprenant le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim Plage As Range, Liste As String
    Dim PremCol As Integer, DerCol As Integer, NoCol As Integer
        PremCol = 6
        DerCol = 18
        For NoCol = PremCol To DerCol Step 2
             Liste = Liste & Split(Cells(1, NoCol).Address, "$")(1) & ":" & Split(Cells(1, NoCol).Address, "$")(1) & ","
        Next
        Liste = Left(Liste, Len(Liste) - 1)
        Range(Liste).Select
    End Sub
    1. 1 remarque, si j'affecte 10 à DerCol, ça fonctionne mais si je mets 734, non. J'ai pensé que cela était dû à la déclaration des variables mais apparemment non.
    2. Comme mes lignes du haut sont fusionnées (je sais, ce n'est pas bien), j'ai besoin de sélectionner une colonne sur deux mais dans une plage donnée ("C7:ABF18"). Est-ce possible ?


    En vous remerciant par avance pour vos lumières,
    Cordialement,
    jp

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Avec Range(Liste), le nombre de plages dans la liste est limité (chez moi à 20).

    Il y a plus simple :
    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
    Option Explicit
    Sub test()
    Dim Zone As Range, Plage As Range, Col As Range
    Const pas As Integer = 2   'pas = 2 soit une colonne sur 2
     
      Set Zone = ActiveSheet.Range("C7:ABF18")
      For Each Col In Zone.Columns
        If Zone.Column Mod pas = Col.Column Mod pas Then
          If Plage Is Nothing Then
            Set Plage = Col
          Else
            Set Plage = Union(Plage, Col)
          End If
        End If
      Next
      'Et si besoin (mais c'est très, très rarement le cas) :
      Plage.Select
     
    End Sub

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 658
    Par défaut
    Bonjour Patrice,

    MERCI !!!!!! Ça fonctionne parfaitement, y compris pour les colonnes impaires. Après avoir "déterré" un fil de 2008 (?), je ne m'attendais pas à une réponse a fortiori si rapide.

    Je vais pouvoir affecter mes listes de validations de données, respectivement sur ces colonnes paires et impaires.

    Ça fait du bien de commencer la journée comme ça

    Cordialement,
    jp

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

Discussions similaires

  1. Editeur de texte qui fait la sélection par colonne
    Par wodel dans le forum Windows XP
    Réponses: 5
    Dernier message: 10/11/2010, 13h45
  2. Sélection de colonnes
    Par luudii dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/04/2007, 15h49
  3. problème de sélection de colonne en VBA
    Par tarmin dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 16/11/2006, 13h28
  4. Réponses: 7
    Dernier message: 11/08/2006, 14h26
  5. [c#/Datagrid] Sélection de colonne
    Par celos dans le forum Windows Forms
    Réponses: 1
    Dernier message: 23/05/2006, 18h09

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