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 :

range copy sélection multiple


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    manager
    Inscrit en
    Août 2021
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : manager

    Informations forums :
    Inscription : Août 2021
    Messages : 10
    Par défaut range copy sélection multiple
    bonjour,

    sur un feuille j'ai une petite centaine de cellule en discontinues a copier sur une autre feuille.
    Dans un premier temps, j'utilise un boucle, mais comme toute les boucles, l'exécution n'est pas rapide, et les ligne de code s'accumule.

    J'aimerais utiliser un RANGE.COPY (ou un équivalent en tout cas quelque chose de plus rapide qu'une boucle), mais cette procédure ne fonctionne pas sur des sélections multiples.
    J'ai essayé en utilisant UNION, j'ai le même résultat que ce soit en écrivant union (range("A1:A10,B5:B10...") ) ou en écrivant union(maplage1,maplage2,...) : impossible sur sélection multiple.

    Merci de votre aide

    Cordialement

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sub exemple
    Dim maplage1, maplage2, multipleplage as range
    set maplage1 = sheets("feuil1").range ("A10:A25")
    set maplage2 = sheets("feuil1").range("F15:F35")
    set multipleplage = union (maplage1,maplage2)
     
    multipleplage.copy ' ***** c'est ici qu'il me refuse la sélection multiple *****
    sheets("feuil2").range("A1")
     
    end sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sauf si la hauteur et la largeur des plages ainsi que les n° de lignes et/ou colonnes sont identiques, manuellement cela ne fonctionne pas non plus

    Ce qui fonctionne : les plages "A3:E9" avec "A13:E15" ainsi que "A7:C9" et "H7:J9"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Il y a plusieurs solutions, des simples (plus lentes) et des plus compliquées (plus rapides).

    Parmi les plus simple, une fois la sélection effective, tu peux boucler sur range.areas. Chaque area représente un bloque d'une ou plusieurs cellules contigues. Dans ton exemple "multipleplage" contient 2 areas (A10:A25 et F15:F35).
    Tu peux ensuite boucler sur les cellules de chaque area ou faire un Range.areas(x).copy

    Pour rendre l'exécution plus rapide, tu peux gérer la mise à jour de l'affichage de la feuille avec application.screenupdating.

    A la volée ça donnerait un truc comme ç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
    17
    18
    19
    20
    21
    22
    Sub test2()
    'Attention aux déclaration, il faut répéter As Range, sinon les variables sont déclarées comme étant des Variants
    Dim maplage1 As Range, maplage2 As Range, multipleplage As Range
    Dim anArea As Range
     
        Set maplage1 = Sheets("feuil1").Range("A10:A25")
        Set maplage2 = Sheets("feuil1").Range("F15:F35")
        Set multipleplage = Union(maplage1, maplage2)
     
        'On bloque le rafraichissmeent
        Application.ScreenUpdating = False
     
        'On boucle sur les areas
        For Each anArea In multipleplage.Areas
            'On copy vers la feuille2
            anArea.Copy Sheets("feuil2").Range(anArea.Address) 'anArea.address retourne pour le premier area "$A$10:$A$25"
     
        Next
     
        'On réactive le rafraichissement
        Application.ScreenUpdating = True
    End Sub

    Si le traitement concerne un très grand nombre de données, il faut passer par des tableaux internes mais c'est plus compliqué à gérer.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Sélection multiple dans un sous formulaire ?
    Par _developpeur_ dans le forum Access
    Réponses: 2
    Dernier message: 09/03/2019, 01h05
  2. Réponses: 2
    Dernier message: 20/06/2016, 10h42
  3. [Débutant] Sélection multiples dans une Listbox
    Par eraim dans le forum Access
    Réponses: 4
    Dernier message: 15/10/2005, 03h21
  4. créer un [ComboBox ??? ] à sélection multiple ?
    Par chasseur37 dans le forum Bases de données
    Réponses: 7
    Dernier message: 20/07/2005, 07h52
  5. [JList] bloquer la sélection multiple
    Par soad dans le forum Composants
    Réponses: 2
    Dernier message: 05/08/2004, 22h28

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