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 :

Selection de cellules non contigues avec une variable sur le n°ligne [XL-2007]


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
    retraité
    Inscrit en
    Mars 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2017
    Messages : 69
    Par défaut Selection de cellules non contigues avec une variable sur le n°ligne
    Bonjour à tous,
    Je voudrais selectionner des cellules non contiguës dans une même ligne définie par une variable.

    Exemple :
    J'utilise la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    selig = Selection.row
    Range(cells(selig,5)).select
    Je voudrais selectionner dans la même ligne (selig) les cellules de la colonne A,E,F,G,H,I,M,N par exemple.
    Je voudrais écrire ce code sur une seule ligne: comment écrire ce code ?

    Merci !

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en les unissant une par une

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub toto()
    Dim Colonne(), Ligne As Long, Plage As Range
    Colonne = Array("A", "E", "B")
    Ligne = 3
        For Each c In Colonne
            If Not Plage Is Nothing Then
                Set Plage = Application.Union(Plage, Range(c & Ligne)) ' rattacher une feuille au Range()
            Else
                Set Plage = Range(c & Ligne) ' rattacher une feuille au Range()
            End If
        Next c
    Plage.Select
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2017
    Messages : 69
    Par défaut
    Cela me parait bien compliqué, je pensais aussi à
    Range(cells(selig,1,5-9)).select mais la syntaxe est incorecte
    ou
    Range("A1;E1").select mais cela ne marche pas comme je voudrais

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    il n'y a rien de compliqué, c'est le strict minimum si tu veux que ta procédure soit dynamique et facile à maintenir, puisque tout se passe dans tes deux variables Colonne et Ligne

    mais si c'est pas ton objectif, avec uniquement la ligne 7 de ma proposition, tu peux écrire une looooongue ligne de code qui remplace tout le reste et qui inclus tout tes Range(Colonne & Ligne) dans le Application.Union (attention aux limites, regarde bien l'aide ), une méthode pour unir des plages qui est impérative.


    tu peux même en faire une fonction de base, tu lui passes les colonnes et la ligne où faire l'union, très facile à 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
    Sub toto()
    Dim MaPlage As Range
    Set MaPlage = Unis(Array("A", "E", "B"), 3)
        MaPlage.Select
    End Sub
     
    Function Unis(Colonne As Variant, Ligne As Long) As Range
    Dim Plage As Range
        For Each c In Colonne
            If Not Plage Is Nothing Then
                Set Plage = Application.Union(Plage, Range(c & Ligne))
            Else
                Set Plage = Range(c & Ligne)
            End If
        Next c
    Set Unis = Plage
    End Function

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    en une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set pl = Intersect(Selection.EntireRow, [A:A, E:I, M:N])
    eric

  6. #6
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2017
    Messages : 69
    Par défaut
    Bonjour Eriic et merci pour ta réponse.
    Vu les réponses que vous me faites, çà ne répond pas à mes attentes, ou,j'ai du mal présenter mon problème.

    J'ai une liste d'adhérents dans un classeur classée par ordre alpha, avec sur la même ligne, le nom, prénom,adresse, code postal ,tel, catégorie, fonction, @mail, etc ...
    Je voudrais extraire un certain nombre de données concernant 1 adhèrent (donc sur la même ligne).
    Je sélectionne la cellule contenant le nom et en appuyant sur un bouton j'exécute une macro qui va extraire certaines données (pas toutes)de cet adhèrent.
    Copier ces données et les coller dans une autre feuille de calcul toujours sur une même ligne et sans "blancs".
    Début de la macro:
    (me donne le n° ligne de la cellule sélectionnée)
    Si je lance un apprentissage de la macro çà donne çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A66,D66:I66,P66,S66:T66,W66").Select
    (selection manuelle des données à extraire de la ligne 66))
    Je voudrais écrire cette fonction en lui incluant la variable "selig" pour le n° de ligne.
    J'ai essayer avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(cells(selig,1),cells(selig,5),cells(selig,6))
    mais suis très vite limité par le nombre d'élément et je ne sais comment m'y prendre pour inclure des éléments qui se suivent et/ou qui ne se suivent pas. la commande doit être envoyée en une seule fois pour avoir une sélection simultanée de ces cellules.
    En fin de compte je cherche la syntaxe de cette commande.
    Merci

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 12/09/2014, 15h02
  2. Réponses: 2
    Dernier message: 13/02/2007, 17h40
  3. [debutant] get image avec une variable non static
    Par laguna dans le forum Langage
    Réponses: 2
    Dernier message: 06/03/2006, 15h57
  4. Requête selection avec une variable de date
    Par kahmsin dans le forum Access
    Réponses: 7
    Dernier message: 20/11/2005, 19h38
  5. Couleur de cellule XSL dynamique avec une variable
    Par Steff1985 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 27/10/2005, 11h10

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