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 :

VBA : Récupérer les valeurs d'un objet dans un autre objet


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Par défaut VBA : Récupérer les valeurs d'un objet dans un autre objet
    Bonjour tout le monde,
    Je galère un peu (beaucoup) sur une récupération de valeur d'un objet et les mettre dans un second objet.

    Point de départ :
    Les 10 valeurs de E1 à E10 E1 à N1:
    AAA BBB CCC DDD EEE FFF GGG HHH III JJJ

    Je récupère ces 10 valeurs dans l'objet Plage01, ce qui doit donner ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage01=Cells(1,5).Resize(1,10)
    Je voudrais récupérer 4 valeurs de Plage01 (dont certaines non contiguës) et les mettre dans un seconde objet,
    puis les "coller" sur H10:H13 H10:K10
    Si possible en utilisant que Cells et pas Range

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Plage02= ???
    Sheets("feuille").Cells(10,10).Resize(1,3) = Plage02.Value
    Résultat attendu sur H10:H13 H10:K10 :
    BBB FFF GGG III


    J'ai fait des tests avec Union mais ça n'a rien donné...

    Auriez-vous une idée ?
    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Le plus simple, sélectionnez les cellules de votre choix et cliquez sur le bouton pour recopier sur l'autre feuille.
    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Selectionner_coller()
        Lig = 10 'première ligne vide de la feuille de destination
        For Each cell In Selection
            Sheets("Dest").Cells(Lig, "H") = cell
            Lig = Lig + 1
        Next
        Sheets("Dest").Select
    End Sub
    autre code possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Selectionner_coller_2()
        Lig = 10 'première ligne vide de la feuille de destination
        Nbre = Selection.Count
        ReDim valeur(Nbre) As String
        i = 1
        For Each cell In Selection
            valeur(i) = cell
            i = i + 1
        Next
        Sheets("Dest").Select
        Cells(Lig - 1, "H").Resize(Nbre + 1, 1) = Application.Transpose(valeur)
    End Sub

    le fichier en exemple (avec le premier code)
    Pièce jointe 573510

    le rendu
    Pièce jointe 573511

    Cdlt

  3. #3
    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 184
    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 184
    Billets dans le blog
    53
    Par défaut
    Bonjour Arturo,
    Pourquoi un boucle ?
    La simple méthode Copy avec l'argument Destination suffit amplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.Copy Destination:=Range("L2")
    Ce que l'on peut faire manuellement est possible avec VBA
    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

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par WiwiBear Voir le message
    J'ai fait des tests avec Union mais ça n'a rien donné...
    Je ne sais pas comment tu as utilisé Union mais ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Plage02 = Union(Plage01.Cells(2, 1), Plage01.Cells(6, 1), Plage01.Cells(7, 1), Plage01.Cells(9, 1))
    Plage02.Copy Sheets("feuille").Cells(10, "H")

  5. #5
    Membre habitué
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Par défaut
    Merci pour vos réponses.
    Je teins à m'excuser j'ai fais une erreur dans mon énoncé (corrigé) j'ai confondu ligne et colonne (il était tard et je devais plus avoir les idée très claires)

    @ARTURO83 vraiment désolé pour mon erreur , du coup ton code n'est plus valide (en plus t'as fait une réponse super claire)

    @Philippe Tulliez je préfère éviter cette méthode, il me semble qu'elle est moins rapide (et pas adapté à mon besoin)

    @Menhir lors de mes tests j'avais fait quelque chose qui ressemblait grandement à ce que tu as fait, mais ça fonctionnait pas, je vais retester

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Les 2 codes modifiés (au choix)
    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
    Sub Selectionner_coller()
        Col = 8 'première ligne vide de la feuille de destination
        For Each cell In Selection
            Sheets("Dest").Cells(10, Col) = cell
            Col = Col + 1
        Next
        Sheets("Dest").Select
    End Sub
     
    Sub Selectionner_coller_2()
        Col = 8 = 10 'première ligne vide de la feuille de destination
        Nbre = Selection.Count
        ReDim valeur(Nbre) As String
        i = 1
        For Each cell In Selection
            valeur(i) = cell
            i = i + 1
        Next
        Sheets("Dest").Select
        Cells(10, 7).Resize(1, Nbre + 1) = valeur()
    End Sub

  7. #7
    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 184
    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 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    @Philippe Tulliez je préfère éviter cette méthode, il me semble qu'elle est moins rapide (et pas adapté à mon besoin)
    Copy moins rapide ? il faudra m'expliquer
    Pas adapté à vos besoins ? Difficile à confirmer avec les informations que l'on a reçues
    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

  8. #8
    Membre habitué
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Par défaut
    Histoire d'être moins brouillon, je vous ai fourni le fichier avec la macro : Macro_Union.xlsm

    ARTURO83 je vais regarder ta proposition (encore merci)

    Mon test avec Union qui ne fonctionne pas :

    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
    Sub test()
     
    Dim Plage01 As Range
    Dim Plage02 As Range
     
     
    Set Plage01 = Sheets("Feuille").Cells(1, 5).Resize(1, 10)
     
    Set Plage02 = Union(Plage01.Cells(1, 2), Plage01.Cells(1, 6), Plage01.Cells(1, 7), Plage01.Cells(1, 9))
     
    ThisWorkbook.Sheets("Feuille").Cells(10, 8).Resize(1, 4) = Plage02.Value
     
    Set Plage01 = Nothing
    Set Plage02 = Nothing
     
    End Sub
    Renvoi :
    BBB BBB BBB BBB

    Au lieu de :
    BBB FFF GGG III

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/11/2017, 16h58
  2. Réponses: 1
    Dernier message: 10/04/2010, 20h04
  3. Réponses: 5
    Dernier message: 09/04/2010, 17h49
  4. Récupérer les valeurs d'un noeud dans un fichier XML
    Par yosthegost dans le forum Delphi
    Réponses: 1
    Dernier message: 30/05/2006, 18h38
  5. Récupérer les valeur d'un énuméré dans une string
    Par Oliv_75 dans le forum SL & STL
    Réponses: 5
    Dernier message: 28/09/2005, 01h55

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