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 :

Copie la selection d'une plage de celle visible


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut Copie la selection d'une plage de celle visible
    bonjour
    j'aimerais savoir si c'est possible de copier dans la colonne A la selection active dans le bloc de cellule visible vers la ligne suivante du bloc de la cellule active et non vers la ligne suivante standard
    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub copy_cellule_visible()
      For Each c In Range("A2", [A65000].End(xlUp)).SpecialCells(xlCellTypeVisible)
         If c.Value = Selection.Value Then
         c.Offset(i + 1, 0).Value = c.Value
         'MsgBox c.Offset(i + 1, 0).Value
         End If
      Next c
    End Sub
    je vous ai aussi envoyé un fichier joint en test
    merci d'avavnce
    Fichiers attachés Fichiers attachés

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Je n'ai bien évidemment pas ouvert ton classeur (lis ma signature).
    L'examen du code que tu montres appelle déjà l'observation suivante :
    on y voit l'utilisation d'une variable i dont on ne sait pas d'où elle sort.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    ah oui désolé .meme sans i ca ne marche pas .
    je voulais récupérer dans un tableau tab(i) mais ca ne marche pas non plus
    en fait je sais comment transférer les lignes visibles vers une nouvelles feuilles mais modifier directement les cellules visibles c'est un peu compliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub copy_cellule_visible()
      For Each c In Range("A2", [A65000].End(xlUp)).SpecialCells(xlCellTypeVisible)
         If c.Value = Selection.Value Then
         c.Offset(1, 0).Value = c.Value
         End If
      Next c
    End Sub

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    ah oui désolé .meme sans i ca ne marche pas .
    Tu as l'air de "savoir" ce que tu fais, toi ...
    Bonne chance.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    peu etre mais là je n'ai pas d'idées

    personne n'a rencontré ce genre de problème?Merci pour votre aide

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    si car je ne comprends rien à ta présentation initiale, ce genre de problème étant récurrent sur les forums !

    Sinon envisager l'utilisation d'un filtre avancé …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    je ne sais pas comment expliquer plus .le but est de copier une ligne visible vers une autre ligne visible juste suivante et la ligne visible est celle selectionnée par la souris avec la méthode selection ou activecell.
    c'est clair que le plus simple est de regarder mon petit fichier test.mais bon je comprends que certains ont peur des spams avec des fichiers excels mais je suis sur le forum depuis (6 ans) des années .je ne suis pas du tout un hacker ect..

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Déjà je dévoile un secret :  la méthode Copy comme la méthode Delete s'occupent uniquement des cellules visibles !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    j'essaie de stocké dans un tableau mais il y erreur sur ligne li_array(i) = c.Value
    je ne comprends pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub copy_cellule_visible()
    Dim li_array()
      For Each c In Range("A2", [A65000].End(xlUp)).SpecialCells(xlCellTypeVisible)
         i = i + 1
         li_array(i) = c.Value
         If c.Value = Selection.Value Then
         li = i
         End If
       Next c
          txt = li_array(li + 1)
         MsgBox txt
    End Sub

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Logique car la variable tableau n'est pas initialisée !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    merci Marc je ne maitrise pas super bien les tableaux en vba
    il faut faire quoi dans ce cas?

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Soit la dimensionner dans l'instruction Dim initiale soit via l'instruction ReDim au sein du code,
    consulter l'aide VBA interne, tout y est !   Sans compter les tutoriels de ce forum sur les variables tableau …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    j'ai fait ca en tableau dynamique mais toujours bug
    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
    Option Base 1
    Sub copy_cellule_visible()
    Dim li_array()
    Dim i As Integer
    ReDim li_array(i)
      For Each c In Range("A2", [A65000].End(xlUp)).SpecialCells(xlCellTypeVisible)
         i = i + 1
         li_array(i) = c.Value
         If c.Value = Selection.Value Then
         li = i
         End If
       Next c
          txt = li_array(li + 1)
         MsgBox txt
    End Sub

  14. #14
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Toujours un problème de logique …

    Comme pourtant expliqué dans l'aide VBA interne et dans les tutoriels de ce forum,
    lors d'une dimension d'une variable tableau via ReDim la dimension doit être numérique
    et donc, que vaut la variable i dans la ligne de code ReDim ?   Et que vaut i plus tard dans le code ?‼

    Même une fois cette variable tableau enfin bien initialisée je n'en vois pas l'utilité car
    pour copier une plage visible comme pourtant déjà indiqué seule l'instruction Copy est nécessaire,
    pas besoin ni d'une boucle ni de SpecialCells ni même d'une variable tableau !
    En attendant la preuve du contraire avec enfin une présentation digne de ce nom, claire & exhaustive …

    Car il n'est vraiment pas difficile pour quelqu'un ayant au moins réfléchi à son besoin
    de l'expliquer avec tenants & aboutissants, une simple description technique de l'existant vers le désiré !

    ___________________________________________________________________________________________________________
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.   (Nicolas Boileau)
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    quand je dis visible .ce sont des lignes filtrées et visibles .on peut tourner autour du problème longtemps si on ne regarde pas le fichier excel d'exemple mais bon je crois avoir trouvé ma solution .ca fait exactement ce que je voudrais .
    merci pour votre aide
    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 copy_cellule_visible()
    Dim li_array()
    Dim nb As Integer
    col = "a"
    derlig = Range(col & Rows.Count).End(xlUp).Row
    ReDim li_array(derlig)
      For Each c In Range("A2", [A65000].End(xlUp)).SpecialCells(xlCellTypeVisible)
         i = i + 1
         li_array(i) = c.Value
         If c.Value = Selection.Value Then
         li = i
         End If
       Next c
          txt = li_array(li + 1)
         MsgBox txt
    End Sub

  16. #16
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Ce classeur ayant pourtant été ouvert plusieurs fois et comme personne n'a répondu, le constat est simple :
    il est aussi peu éclairant comme le titre de cette discussion et la "présentation initiale", toi seul peut décoder …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    pour aider les autres voici le code définitif qui marche impeccable
    c'est la méthode la plus simple que j'ai trouvé mais bon il y a surement d'autres méthodes plus simple
    merci à tout le monde
    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
    Sub copy_cellule_visible()
    Dim li_array()
    Dim nb As Integer
    col = "a"
    derlig = Range(col & Rows.Count).End(xlUp).Row
    ReDim li_array(derlig)
    For Each c In Range("A2", [A65000].End(xlUp)).SpecialCells(xlCellTypeVisible)
    i = i + 1
    li_array(i) = c.Address
    If c.Value = Selection.Value Then
    li = i
    End If
    Next c
    Range(li_array(li + 1)) = Range(li_array(li))
    End Sub

  18. #18
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Dire qu'il m'a fallu décoder ce code alors que cela demandait pourtant une explication enfantine ‼

    Il y a donc bien plus simple en partant de Selection avec juste un peu de jugeote !
    Via une boucle conditionnelle sur la visibilité d'une ligne sans avoir besoin de connaitre la dernière ligne
    ni utiliser SpecialCells et encore moins une variable tableau !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Demo()
            R& = Selection.Row + 1
        While Rows(R).Hidden
            R = R + 1
        Wend
            Cells(R, 1).Value = Selection(1).Value
    End Sub
    ___________________________________________________________________________________________________________

          Merci de cliquer sur en bas à droite de chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    merci marc c'est intéressante comme méthode
    j'ai adapté votre méthode pour qu'il copie sur la ligne suivante de la colonne en cours
    par contre le & à coté de R je ne connais pas R&=
    si vous pouvez expliquer
    j'ai remarqué aussi que la méthode hidden est nettement plus lent quand il y a beaucoup de ligne relativement au tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub aa_Demo()
            R& = Selection.Row + 1
        While Rows(R).Hidden
            R = R + 1
        Wend
            Cells(R, 2).Value = Selection.Value
    End Sub
    par contre si je voudrais copier la sélection active vers le bas jusqu'à la fin de la ligne filtrée et visible ,je ne sais pas si c'est possible avec votre méthode

  20. #20
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    par contre le & à coté de R je ne connais pas R&=
    si vous pouvez expliquer
    Explication là :
    Rubrique Long, type de données de ton aide interne VBA
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

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

Discussions similaires

  1. Selection d'une plage de cellules variables
    Par bykeman dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/06/2008, 10h20
  2. Selection d'une plage
    Par buhrne dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/03/2008, 13h29
  3. Selection d'une plage avec ligne variable
    Par ginkas31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/01/2008, 07h04
  4. Réponses: 1
    Dernier message: 30/07/2007, 19h37
  5. [VBA-E] Selection d'une plage de données problématique
    Par Fab117 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/01/2007, 14h41

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