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 :

Problème de copier coller VBA Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut Problème de copier coller VBA Excel
    Bonjour à tous,

    Je débute sur VBA et je n'ai pas trouvé de problème identique sur ce forum (A priori)
    J'ai pour but de coder la fonction "unique".

    Je cherche à faire une fonction "Recopie" de façon universelle qui recopie une plage dans une autre, en débutant dans la recopie dans la plage sous la cellule appellante. J'ai un problème avec la fonction Copy de VBA.
    J'ai essayé 3 façons :
    1) recopie à la mano avec un for each : marche, mais c'est moche et "pas efficace"
    2) recopie la plage (variable) grâce à la fonction copy : ne marche pas
    3) recopie la plage (entrée manuellement) grâce à la fonction copy : ne marche tjs pas

    Ce qui me bute, c'est que dans une procédure "Sub" les 3 techniques marchent... Je reste quoi. Des explications? Soyez Constructif svp ! :-)
    Si jamais vous voyez le problème, pourriez-vous m'indiquer comment corriger mon code (version 2). ) svp ?
    Voici le 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    ' Recopie une plage (titre dans la case d'appel puis les valeur) à partir de la case qui appelle la fonction
    Function Recopie3(plage As Range) As String
     
    ' Variables
    Dim cellule As Range
    Dim ligneCaller As Integer
    Dim colonneCaller As Integer
    Dim i As Integer: i = 1
     
    ' Corps de la fonction
    Set cellule = Application.Caller
    ligneCaller = cellule.Row
    colonneCaller = cellule.Column
     
    ' Version Disgrâcieuse qui marche
    For Each cellule In plage
        'MsgBox (" i = " & i & " valeur du résultat " & cellule.Value)
        Cells(ligneCaller + i, colonneCaller).Value = cellule.Value
        i = i + 1
    Next cellule
     
    ' Détail
    Recopie3 = "Titre"
     
    ' Problème et qui n'effectue pas le taff 
    plage.Copy Range("H15")
    MsgBox ("Clean")
     
    ' Code qui ne marche pas non plus... 
    Range("A8:B11").Copy Range("I15")
     
    End Function

  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 179
    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 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je débute sur VBA et je n'ai pas trouvé de problème identique sur ce forum (A priori)
    Vous n'avez sans doute pas bien cherché car c'est une question récurrente sur ce forum.

    Pour vous apporter une réponse pertinente, il faudrait savoir exactement ce que vous voulez réaliser comme copie et quelles sont les plages sources et cibles (Plages classiques ou tableaux structurés (ListObject)). Merci de préciser la nature des plages "source" et "cible"
    Le collage doit être en valeur seulement ou bien Format, Formules, etc.
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut Réponse
    Je vous remerice de votre réponse, et j'avais l'impression que les questions ne couvraient pas tout à fait mon cas, car je travaille dans une fonction et que j'avais cru comprendre qu'une fonction ne pouvait seulement modifier la case appelante de la fonction.

    Je vous avoue ne pas savoir réellement la différence entre "plages classiques" et "tableaux structurés".
    Je travaille en VBA depuis vendredi midi. :-/

    L'usage n'est pour l'instant que des données d'une colonne vers "au pire" une autre feuille (possiblement d'une feuille différente), mais tout en restant dans le même classeur.
    La mise en forme m'est absolument inutile haha, qui est déjà traités par des macros automatiques. Toutefois à terme, pouvoir copier des formules de la plage de cellules, ce serait cool.

    Merci à vous pour votre réactivité !
    Bien à vous,

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut
    Je plus inquiétant, c'est que mon code marche dans une procédure, mais pas dans une fonction, alors que l'alternative 1) fonction dans une fonction.

    Je ne comprends pas pourquoi.
    Ce matin j'ai refait des tests archi simple :

    - Recopier affiche la chaîne mais n'affecte pas le tableau
    - Copie & copie2 marchent très bien...

    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
    Function Recopier(plage As Range) As String
     
    Recopier = "test"
    Range("A1:C3").Copy ActiveSheet.Range("F5")
     
    End Function
     
    Sub copie()
     
    Range("A1:C3").Copy ActiveSheet.Range("F5")
     
    End Sub
     
     
    Sub copie2()
    Dim Recopie As Range
     
    Set Recopie = Range("A1:C3")
    Recopie.Copy Range("E5")
    End Sub

  5. #5
    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 179
    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 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si vous expliquiez clairement ce que vous voulez faire ce serait plus simple
    Que ce sot une procédure "Fonction" ou une "Sub", elle peuvent effectuer le même travail. La première peut être utilisée comme une sub ou comme une fonction on peut alors en récupérer une valeur

    En revanche, il est impossible d'utiliser une fonction personnalisée utilisable comme une fonction classique dans excel si l'on effectue une opération telle qu'une copie
    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

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut
    Bonjour,

    Merci pour votre réponse. À terme, j'aimerais recoder la fonction "unique" et "filter"
    J'aimerais faire une fonction qui prend en argument une plage (par exemple une colonne) et qui recopie cette plage sous la case qui appelle la fonction (même classeur, même feuille).

    On ne peut pas utiliser copy dans une fonction personnalisée ? Comment cela ce fait-il ?
    Je suis donc obligé de parcourir la colonne et recopier les valeurs à la main pour faire ma fonction personnalisée ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Citation Envoyé par mythx76 Voir le message
    Bonjour,

    Merci pour votre réponse. À terme, j'aimerais recoder la fonction "unique" et "filter"
    J'aimerais faire une fonction qui prend en argument une plage (par exemple une colonne) et qui recopie cette plage sous la case qui appelle la fonction (même classeur, même feuille).

    On ne peut pas utiliser copy dans une fonction personnalisée ? Comment cela ce fait-il ?
    Je suis donc obligé de parcourir la colonne et recopier les valeurs à la main pour faire ma fonction personnalisée ?
    Bonjour,


    Je n'arrive vraiment pas à vous comprendre.

    Pourquoi voulez-vous recoder des fonctions existantes ? Expliquez clairement ce que vous voulez faire sur excel, et vous auriez une aide comme l'a dit Philippe ...

    Pourriez-vous expliquer seulement ce que vous aimeriez faire sur Excel ? Essayez (comme exemple) comme-ceci :

    1 - Je filtre sur ...
    2-je copie ma plage et je le colle ...

    Bien cordialement

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut
    car la fonction n'existe pas sur office, elle existe sur microsoft 365, mais flemme de payer pour ça.

    Je veux copier une colonne A feuille A sur une colonne A feuille B et supprimer les doublons dans B tout en restant dynamique entre la colonne A et la colonne B pour permettre la MAJ des données.

    Supprimer les doublons, il y a le bouton excel
    Faire une plage dynamique, c'est facile et documenté avec Excel.

    Faire les deux en même temps ... jsp. Du coup je voulais créer une fonction unique(plage) non disponible sur office

  9. #9
    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 179
    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 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'aimerais faire une fonction qui prend en argument une plage (par exemple une colonne) et qui recopie cette plage sous la case qui appelle la fonction (même classeur, même feuille).
    Désolé mais je ne comprends ce que vous écrivez

    La méthode Copy fait exactement ce que vous souhaitez faire
    Exemple
    Ici on copie la plage A2:F16 de la feuille nommée Dossier vers la cellule A5 de la feuille nommée Cible et les deux feuilles se trouvent dans le classeur où se trouve le code VBA (ThisWorkbook)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub t()
      With ThisWorkbook
      .Worksheets("Dossier").Range("A2:F16").Copy Destination:=.Worksheets("Cible").Range("A5")
      End With
    End Sub
    Si vous souhaitez en faire une fonction générique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function CopyRange(RngSource As Range, rngTarget As Range)
      RngSource.Copy rngTarget
    End Function
    Que l'on peut invoquer ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub t()
      With ThisWorkbook
       CopyRange .Worksheets("Dossier").Range("A2:F16"), .Worksheets("Cible").Range("A5")
      End With
    End Sub
    Vous devriez vous intéresser aux tableaux structurés bien plus simple à manier

    On ne peut pas utiliser copy dans une fonction personnalisée ? Comment cela ce fait-il ?
    Je suis donc obligé de parcourir la colonne et recopier les valeurs à la main pour faire ma fonction personnalisée ?
    Une fonction personnalisée ou personnelle est une fonction que l'on peut utiliser directement dans excel comme une fonction native d'excel

    Un peu de lecture
    Les fonctions personnelles dans Excel
    Apprendre à utiliser les tableaux structurés Excel : création, manipulations et avantages(1)
    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

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut
    C'est bien tout le problème : sur mon excel la fonction CopyRange(plage1; plage2) ne fonctionnne pas

    Par contre l'appel à la macro fonctionne et produit le résultat je ne comprends pas.
    J'aimerais faire un appel à une fonction, je trouve plus pratique de pouvoir appeller une fonction et sélectionner la plage plutôt que de devoir constamment changer ma macro

  11. #11
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Citation Envoyé par mythx76 Voir le message
    C'est bien tout le problème : sur mon excel la fonction CopyRange(plage1; plage2) ne fonctionnne pas
    Si elle ne fonctionne pas, c'est que vous l'écrivez mal ...

    Vous ne faites aucun adressage ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    'Il faut préciser d'où vient les cellules que vous voulez utiliser, il y a des milliers de cellules (Range) et d'onglets (Worksheets) dans un classeur Excel
     
    Thiworkbook.worksheets("Nom de l'onglet").Range("A2:C4").copy   Thiworkbook.worksheets("Nom de l'onglet").Range("D5")
    Bien cordialement,

  12. #12
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Citation Envoyé par mythx76 Voir le message
    Par contre l'appel à la macro fonctionne et produit le résultat je ne comprends pas.
    J'aimerais faire un appel à une fonction, je trouve plus pratique de pouvoir appeller une fonction et sélectionner la plage plutôt que de devoir constamment changer ma macro

    Je commence à croire que vous ne voulez pas vraiment de l'aide. On vous demande simplement d'exprimer votre idée.

    D'ailleurs quel est l'intérêt de sélectionner à chaque fois une plage à la main ? N'y a t-il pas un moyen de sélectionner cette plage dans le code ? Un mot clé ? Un numéro de colonne ? Un filtre ?

    Soit vous savez coder et vous le faites vous mêmes, soit vous expliquez clairement ce que vous voulez faire et pourquoi pour que nous puissions vous aider ...

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut
    Cher Aziz,

    La fonction CopyRange marche dans la procédure, mais pas de façon brute.
    Copy marche dans une procédure, de façon brute, mais pas dans une fonction que l'on appel directement.

    Le problème c'est que quand je vais vouloir faire du dynamique, j'ai besoin d'une fonction à appeler et non d'une macro "rigide"

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut
    J'ai besoin d'aide. je vais m'exprimer

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut
    Je veux copier une colonne A feuille A sur une colonne A feuille B et supprimer les doublons dans B tout en restant dynamique entre la colonne A et la colonne B pour permettre la MAJ des données.

    Supprimer les doublons, il y a le bouton excel.
    Faire une plage dynamique, c'est facile et documenté avec Excel.

    Faire les deux en même temps ...
    Mon idée est de faire "=unique ( plages dynamique )" dans mon tableur, ce que je ne peut pas faire une macro "unique"?

    Or quand j'appelle frontalement (depuis mon tableur) une fonction qui contient Copy() la copie n'est pas faite, alors qu'une routine marche.
    Je cherche juste à comprendre pourquoi cela ne fonctionne pas avec la fonction "CopieRange" insérée frontalement dans mon tableur

    L'appel =CopyRange("A1:C3"; "E5") ne copie rien.

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut
    Justement j'aimerais que la sélection reste générique pour pouvoir être ré-utilisée.
    D'où mon besoin d'une "function", mais peut-etre que je me trompe.

  17. #17
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Citation Envoyé par mythx76 Voir le message
    Justement j'aimerais que la sélection reste générique pour pouvoir être ré-utilisée.
    D'où mon besoin d'une "function", mais peut-etre que je me trompe.
    Je ne pense pas qu'on est obligatoirement besoin d'une fonction juste pour ça ! On peut simplement déterminer à chaque fois le nouveau nombre de lignes de la plage à sélectionner.

    Enfin, c'est pour ça que je pense qu'il faut simplement expliquer ce que tu veux ... Tu peux aussi mettre un classeur Test dans le pire des cas.

    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
     
     
    'Un exemple
     
        Dim plage_s As Range
        Dim plage_c As Range
     
    'SI tu es sûre que tes données sont toujours en A:C sinon, il faudrait simplement choisir la plage dynamiquement ...     
        D_ligne = ThisWorkbook.Worksheets("FeuilleA").Range("A" & Rows.Count).End(xlUp).Row
     
     
        Set plage_s = ThisWorkbook.Worksheets("FeuilleA").Range("A1:C" & D_ligne)
     
        'j'efface les données déjà présentes dans la feuille B
        ThisWorkbook.Worksheets("FeuilleB").Range("A1:C3000").ClearContents
        Set plage_c = ThisWorkbook.Worksheets("FeuilleB").Range("A1:C" & D_ligne)
     
        plage_c = plage_s
        plage_c.RemoveDuplicates Columns:=Array(1, plage_s.Columns.Count), Header:=xlYes

  18. #18
    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 179
    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 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je veux copier une colonne A feuille A sur une colonne A feuille B et supprimer les doublons dans B tout en restant dynamique entre la colonne A et la colonne B pour permettre la MAJ des données.
    Bonjour,
    Si vous souhaitez copier la colonne A, d'une plage de données en supprimant les doublons, vous pouvez utiliser la méthode AdvancedFilter (filtre avancé d'excel) de l'objet Range, c'est une ligne d'instruction

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function CopyUniqueRange(areaSource As Range, areaTarget As Range) As Range
      areaTarget.Value = areaSource.Cells(1, 1).Value  ' Ecrit le titre de la colonne
      ' Exporte les données sans doublons
      areaSource.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=areaTarget, Unique:=True
      Set CopyUniqueRange = areaTarget.CurrentRegion
    End Function
    Exemple d'une procédure qui l'invoque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub t()
      Dim rng As Range
      Dim rngColumn As Range
      Set rng = ThisWorkbook.Worksheets("TimeSheet").Range("A11:A161").CurrentRegion
      With rng
       Set rngColumn = .Resize(.Rows.Count) ' Redimensionne la plage pour la colonne 1
      End With
      Set rng = CopyUniqueRange(rngColumn, ThisWorkbook.Worksheets("Cible").Range("B5"))
      MsgBox "Adresse de la plage copiée : " & rng.Address(External:=True)
      Set rng = Nothing:  Set rngColumn = Nothing
    End Sub
    Pour en savoir plus, lire ce tutoriel Les filtres avancés ou élaborés dans Excel
    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

  19. #19
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut
    Merci à tous les deux pour votre aide.
    Je vais regarder votre travail et faire de la documentation pour comprendre les subtilités !

    Il est important pour moi de bien tout comprendre pour apprendre et non copier-coller bêtement !

    Bien à vous,

  20. #20
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Par défaut
    Merci beaucoup pour vos réponses. AdvandedFilter convient très très bien ! haha

    Philippe,
    Une choses que je ne comprends pas très bien. Pourquoi faire resize alors que currentregion détecte déjà la tableau "automatiquement" ? Pourrais-je avoir quelques détails du pourquoi du comment ?

    Les affectations finales ont juste pour but de libérer la mémoire allouée?

    bien à vous,

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème de copier / coller d'Excel à Word
    Par yvidal dans le forum Excel
    Réponses: 10
    Dernier message: 15/02/2019, 15h56
  2. Copier coller vba excel 2007
    Par rthz3100 dans le forum Excel
    Réponses: 10
    Dernier message: 29/09/2013, 15h54
  3. Problème de copier coller en vba à partir d'excel
    Par Psycho185 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/06/2011, 13h47
  4. Problème de copier coller macro VBA
    Par Piernod dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/11/2009, 18h56
  5. VBA-E: Pb copier-coller entre Excel et .csv
    Par tiger118 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 11h08

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