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 :

Copier des cellules après un filtrage [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Par défaut Copier des cellules après un filtrage
    Bonsoir à tous

    J'aimerais avec une macro pouvoir copié une sélection de cellules issues d'un filtrage.

    Je m'explique pour le moment, j'ai une macro qui me filtre un tableau (feuil1) en fonction de la valeur d'une cellule de la feuille 2.

    Après ce filtrage je voudrais copier les cellules qui sont visibles dans la feuille 2.

    Le problème c'est que je ne sais pas comment faire, quelqu'un sait-il comment faire?

    Merci

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range("A1:X100").SpecialCells(xlCellTypeVisible).Copy Sheets("Feuil2").Range("A1")
    Regarde l'aide sur SpecialCells

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Par défaut
    Suis-je dans la bonne voie avec ce type de code (trouvé dans l'aide)?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1:C21").SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("feuil2").Range("D24")

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    En effet, mais attention quand même si tu ne veux pas copier la première ligne des titres et que toutes les lignes ne sont pas visibles suite au filtre.

    Exemple: Titres en ligne 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range("A2:X100").SpecialCells(xlCellTypeVisible).Copy Sheets("Feuil2").Range("A1")
    Si aucune ligne n'est visible, tu auras une erreur sur cette ligne de code.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Par défaut
    Voici mon code mais j'ai le message d'eereur qu'il n'y a aucune correspondante mais pourtant il y en a une...
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Private Sub bouton_validation_Click()
     
    Dim R As Range, Rng As Range, c As Range
    Dim annee As Integer, col As Integer
    Dim dateini As Date, datefin As Date
    Dim ldateini As Long, ldatefin As Long, dl As Long, nblig As Long
    Dim cible As String
     
        choix_raie.Hide 'fermeture de la fiche de coix de la raie
        Range("J1").Value = choix_raie.ComboBox1.Value 'définition de la valeur de la cellule J1 comme résultat du choix de la raie
        Range("C8").Value = choix_raie.ComboBox1.Value 'définition de la valeur de la cellule C8 comme résultat du choix de la raie
        Range("C5").Value = TextBox1.Value 'définition de la valeur de la cellule C5 comme étant le résultat du choix de l'année
        Application.ScreenUpdating = False
     
    '1/définition de la valeur à chercher
     
            With ActiveSheet
                cible = .Range("J1").Value 'définition de la valeur recherchée comme étant la valeur de la cellule J1
                    If cible <> "" Then 'condition non vide pour que la recherche soit faite
                        Set c = Sheets("Résultats").Rows(4).Find(cible, LookIn:=xlValues, LookAt:=xlWhole) 'la recherche se fait dans la ligne 4 de la feuille "Résultats"
                            If Not c Is Nothing Then 'condition si la variable c n'est pas nulle
                                col = c.Column
                                    Set c = Nothing
                            End If
                    End If
            End With
     
    '2/définition des variables
     
        Sheets("Eléments").Select
        Range("A9:F20").ClearContents 'nettoyage des données de la feuille "Eléments"
        annee = Range("C5").Value 'définition de la valeur de la variable "annee"
        dateini = DateSerial(annee, 1, 1) 'définition de la variable "dateini" en fonction de la variable "annee"
        datefin = DateSerial(annee, 12, 31) 'définition de la variable "datefin" en fonction de la variable "annee"
        ldateini = dateini 'définition de la variable "ldateini" (date sous format numérique windows)
        ldatefin = datefin 'définition de la variable "ldatefin" (date sous format numérique windows)
     
    '2/application du filtre sur la feuille "Résultats"
     
        Sheets("Résultats").Select
            With ActiveSheet
                dl = .Range("A" & .Rows.Count).End(xlUp).Row 'définition de la variable "dl" (dernière ligne)
                .Range("A4:Y" & dl).AutoFilter Field:=2, Criteria1:=">=" & ldateini, Operator:=xlAnd, Criteria2:="<=" & ldatefin 'filtre de la zone définie en fonction de la valeur C2 de la feuille "Bulletin"
                    On Error GoTo EmptyFilter 'si le filtre ne renvoie pas de valeur alors une erreur survient, on décide donc de sortir de la procédure
                .Range("A5:B" & dl).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("Eléments").Range("A9")
                .Range("Z5:Z" & dl).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("Eléments").Range("D9")
                .Range(Cells(col, 5).Address & ":" & Cells(col, dl).Address).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("Eléments").Range("C9")
            End With
     
        Sheets("Résultats").AutoFilterMode = False
    Exit Sub
     
        Application.ScreenUpdating = True
     
    EmptyFilter:
        MsgBox "pas de correspondance"
     
    End Sub

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    A quelques exception (éviter les select/activesheet)
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Option Explicit
     
    Private Sub bouton_validation_Click()
    Dim Ldateini As Long, Ldatefin As Long, DL As Long
    Dim Dateini As Date, Datefin As Date
    Dim Annee As Integer, Col As Integer
    Dim cible As String
    Dim c As Range
     
    choix_raie.Hide                                                      'fermeture de la fiche de coix de la raie
    Application.ScreenUpdating = False
    With Sheets("Eléments")
        .Range("A9:F20").ClearContents                                   'nettoyage des données de la feuille "Eléments"
        .Range("J1").Value = choix_raie.ComboBox1.Value                  'définition de la valeur de la cellule J1 comme résultat du choix de la raie
        .Range("C8").Value = choix_raie.ComboBox1.Value                  'définition de la valeur de la cellule C8 comme résultat du choix de la raie
        .Range("C5").Value = TextBox1.Value                              'définition de la valeur de la cellule C5 comme étant le résultat du choix de l'année
        cible = .Range("J1").Value                                       'définition de la valeur recherchée comme étant la valeur de la cellule J1
        Annee = .Range("C5").Value                                       'définition de la valeur de la variable "annee"
        Dateini = DateSerial(Annee, 1, 1)                                'définition de la variable "dateini" en fonction de la variable "annee"
        Datefin = DateSerial(Annee, 12, 31)                              'définition de la variable "datefin" en fonction de la variable "annee"
        Ldateini = CLng(Dateini)                                         'définition de la variable "ldateini" (date sous format numérique windows)
        Ldatefin = CLng(Datefin)                                         'définition de la variable "ldatefin" (date sous format numérique windows)
    End With
     
    '1/définition de la valeur à chercher
    With Sheets("Résultats")
        If cible <> "" Then                                              'condition non vide pour que la recherche soit faite
            Set c = .Rows(4).Find(cible, LookIn:=xlValues, LookAt:=xlWhole)    'la recherche se fait dans la ligne 4 de la feuille "Résultats"
            If Not c Is Nothing Then                                     'condition si la variable c n'est pas nulle
                Col = c.Column
                Set c = Nothing
            End If
        End If
     
        If Col > 0 Then
            '2/application du filtre sur la feuille "Résultats"
            .AutoFilterMode = False
            DL = .Range("A" & .Rows.Count).End(xlUp).Row                 'définition de la variable "dl" (dernière ligne)
            .Range("A4:Y" & DL).AutoFilter Field:=2, Criteria1:=">=" & Ldateini, Operator:=xlAnd, Criteria2:="<=" & Ldatefin    'filtre de la zone définie en fonction de la valeur C2 de la feuille "Bulletin"
            If .Range("A4:A" & DL).SpecialCells(xlCellTypeVisible).Count > 1 Then
                .Range("A5:B" & DL).SpecialCells(xlCellTypeVisible).Copy Sheets("Eléments").Range("A9")
                .Range("Z5:Z" & DL).SpecialCells(xlCellTypeVisible).Copy Sheets("Eléments").Range("D9")
                .Range(.Cells(5, Col), .Cells(DL, Col)).SpecialCells(xlCellTypeVisible).Copy Sheets("Eléments").Range("C9")  '#####ICI
            End If
            .AutoFilterMode = False
        End If
    End With
    End Sub
    Regarde notamment la ligne de code commentée par '#####ICI

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

Discussions similaires

  1. déselectionner des cellules après un copier coller
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/06/2008, 17h45
  2. [VBA-E] Copier des cellules et les coller ?
    Par Trooper2 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/01/2007, 17h29
  3. [VBA-E] copier des cellules filtrées
    Par maud43 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/12/2006, 20h08
  4. [VBA-Excel]Copier des cellules vers un autre classeur
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/10/2006, 18h18
  5. [VBA-E]:copier des cellules en gardant les fomules
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/06/2006, 10h53

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