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 :

Afficher / masquer des colonnes


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 44
    Points : 15
    Points
    15
    Par défaut Copier cellules y compris de colonnes masquées
    Bonjour,

    Dans un fichier Excel, j'ai des colonnes qui peuvent êtres affichées ou masquées selon les informations à connaitre.

    J'utilise une macro qui recopie toute une ligne pour les copier dans une autre feuille.
    Le problème c'est que je dois activer avant toutes les colonnes pour que toutes les informations soit copiées.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub Essai()
    Sheets("Feuil1").Select
    Set Aselectionner = Application.InputBox _
         (prompt:="selectionner la ligne >>> ", _
         Title:=" Valeurs à reprendre", Type:=8)
      Aselectionner.Select 'Selection de la plage souhaitée
        Selection.Copy
        Sheets("Feuil2").Select
        Rows("6:6").Select
        ActiveSheet.Paste
      Sheets("Feuil1").Select
     End Sub
    Via la macro, je souhaiterais :
    que les colonnes qui sont masquées soient affichées,
    je fais la copie de ma ligne,
    que les colonnes concernées soient de nouveau masquées comme à l'origine.

    merci de votre aide

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Il n'est pas nécessaire d'afficher les colonnes pour en copier les données.
    Il suffit de cliquer dans une des cellules de la ligne que l'on souhaite copier et de dire "copier toute la ligne de la cellule active"
    Tout ton code peut se résumer à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.EntireRow.Copy Sheets(2).Rows(6)
    Tu pourras constater également que l'on peut éviter les "select"
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 44
    Points : 15
    Points
    15
    Par défaut
    Super !
    Merci

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 44
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Tu ne ferais pas un petit clic sur Résolu pour nous sigaler que c'est résolu ?
    pas encore, car finalement j'ai encore un problème

    En effet, cela marche bien mais si des lignes sont masquées via l'utilisation des filtres, cela ne fonctionne pas.
    Seules les colonnes affichées seront copiées.

    D'ailleurs c'est un peu bizarre comme situation !

    Encore une idée ?

  5. #5
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    ouais mais...ouais mais...selon ta première macro, tu sélectionnes une ligne manuellement et tu la copie, c'est bien ça ?
    J'utilise une macro qui recopie toute une ligne pour les copier dans une autre feuille
    Et tu fais comment pour sélectionner ta ligne si elle est masquée ?
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 44
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par fring Voir le message
    ouais mais...ouais mais...selon ta première macro, tu sélectionnes une ligne manuellement et tu la copie, c'est bien ça ?


    Et tu fais comment pour sélectionner ta ligne si elle est masquée ?
    j'utilise les filtres pour afficher mes lignes souhaitées et ensuite j'utilise ma macro pour copier la ligne que je veux.

    Je m'explique :
    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Essai()
     
    Set Aselectionner = Application.InputBox _
         (prompt:="selectionner la ligne >>> ", _
         Title:=" Valeurs à reprendre", Type:=8)
      Aselectionner.Select 'Selection de la plage souhaitée
        Selection.Copy
        ActiveCell.EntireRow.Copy Sheets(2).Rows(6)
     
     End Sub

    Dans cet exemple toutes les lignes sont visibles. Quand j'utilise la macro pour copier par exemple la ligne 4, toutes les cellules de la ligne 4 seront copiés dans la feuil2, y compris celles des colonnes E et F qui sont masquées.


    Dans cet autre exemple, le filtre est activé.
    Quand j'utilise la macro pour copier la ligne 7, seules les cellules B, C, D, G et H de la ligne 7 seront copiés dans la feuil2
    les cellules des colonnes E et F, qui sont masquées, n'ont pas été copiées !

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Les up sont défendus.
    Pour avoir testé ton truc, je n'ai trouvé qu'une méthode et c'est bien pour que tu aies quelque chose.
    J'espère que tu désires bien copier toutes les lignes, masquées ou non de la plage une fois filtrée parce que sinon, ce n'est pas ce qu'il te faut.
    Mais c'est ce que j'avais compris de tes explications. C'est un vrai bricolage !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Machin()
    Dim Letruc As Range
    Dim Plage As String, i As Long
        Worksheets("Feuil1").Activate
        Set Letruc = Application.InputBox("Sélectionner les lignes filtrées complètes", Type:=8)
        Plage = Replace(Letruc.Address, ":", "") 'Worksheets("Feuil1").Range("A2").CurrentRegion.Address
        PremLig = Val(Split(Plage, "$")(1))
        derlig = Val(Split(Plage, "$")(2))
        For i = PremLig To derlig
            Worksheets("Feuil1").Cells(i, 1).EntireRow.Copy Worksheets("Feuil4").Cells(Worksheets("Feuil4").Range("A65536").End(xlUp).Row, 1)
        Next
        Worksheets("Feuil4").Cells.EntireRow.Hidden = False
    End Sub
    Tu testes en adaptant ?
    A+

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 44
    Points : 15
    Points
    15
    Par défaut
    Heu non.
    Je ne choisis qu'une seule ligne à la fois.

    J'active mon filtre uniquement que pour un confort d'affichage vu que j'en ai pas mal !

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Alors que veut dire
    Citation Envoyé par didier.aucun
    En effet, cela marche bien mais si des lignes sont masquées via l'utilisation des filtres, cela ne fonctionne pas.
    Seules les colonnes affichées seront copiées.
    Tu veux copier des lignes masquées par le filtre ? Tu veux les sélectionner avec Application.input ?
    Essaie d'expliquer clairement ce que tu veux parce que copier UNE ligne visible ne me paraît pas insurmontable.
    A+

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Comme je n'ai pas envie de tout ré-écrire, voici toujours un code qui permet de copier aussi les colonnes masquée.
    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 Machin()
    Dim Letruc As Range
    Dim Plage As String, i As Long, NoLig As Long
        Worksheets("Feuil1").Activate
        Set Letruc = Application.InputBox("Sélectionner les lignes filtrées complètes", Type:=8)
        Plage = Replace(Letruc.Address, ":", "") 'Worksheets("Feuil1").Range("A2").CurrentRegion.Address
        PremLig = Val(Split(Plage, "$")(1))
        derlig = Val(Split(Plage, "$")(2))
        For i = PremLig To derlig
            NoLig = NoLig + 1
            For j = 1 To Worksheets("Feuil1").Cells(i, 255).End(xlToLeft).Column
                Worksheets("Feuil1").Cells(i, j).Copy Worksheets("Feuil4").Cells(NoLig, j)
            Next
        Next
        Worksheets("Feuil4").Cells.EntireRow.Hidden = False
    End Sub

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 44
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Alors que veut dire
    Tu veux copier des lignes masquées par le filtre ? Tu veux les sélectionner avec Application.input ?
    Essaie d'expliquer clairement ce que tu veux parce que copier UNE ligne visible ne me paraît pas insurmontable.
    A+
    Je pense avoir été assez clair dans mes messages précédent !
    j'utilise souvent le terme UNE ligne !

    Citation Envoyé par ouskel'n'or Voir le message
    Comme je n'ai pas envie de tout ré-écrire, voici toujours un code qui permet de copier aussi les colonnes masquée.
    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 Machin()
    Dim Letruc As Range
    Dim Plage As String, i As Long, NoLig As Long
        Worksheets("Feuil1").Activate
        Set Letruc = Application.InputBox("Sélectionner les lignes filtrées complètes", Type:=8)
        Plage = Replace(Letruc.Address, ":", "") 'Worksheets("Feuil1").Range("A2").CurrentRegion.Address
        PremLig = Val(Split(Plage, "$")(1))
        derlig = Val(Split(Plage, "$")(2))
        For i = PremLig To derlig
            NoLig = NoLig + 1
            For j = 1 To Worksheets("Feuil1").Cells(i, 255).End(xlToLeft).Column
                Worksheets("Feuil1").Cells(i, j).Copy Worksheets("Feuil4").Cells(NoLig, j)
            Next
        Next
        Worksheets("Feuil4").Cells.EntireRow.Hidden = False
    End Sub
    Yes ça marche. Merci

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ok. On ne va pas polémiquer. As-tu testé mon dernier code, tu pourras l'adapter, tel quel il copie aussi bien une ligne que plusieurs.
    Bonne soirée.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 44
    Points : 15
    Points
    15
    Par défaut
    Oui ça marche nickel
    Grand merci

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

Discussions similaires

  1. [LibreOffice][Tableur] Afficher/Masquer des colonnes
    Par elodiemart dans le forum OpenOffice & LibreOffice
    Réponses: 11
    Dernier message: 19/07/2013, 20h32
  2. [JTable] Afficher / Masquer des colonnes
    Par Dark_TeToN dans le forum Composants
    Réponses: 9
    Dernier message: 15/11/2010, 15h31
  3. afficher/masquer des colonnes nommées
    Par chouchouboy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/10/2010, 13h17
  4. Afficher/masquer des colonnes d'un tableau
    Par fre3d0m dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/07/2009, 19h09
  5. Afficher/masquer des colonnes : VBA vs Claire
    Par mouaa dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/08/2007, 09h11

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