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

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    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 sénior 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
    Points : 31 877
    Points
    31 877
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    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 sénior 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
    Points : 31 877
    Points
    31 877
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    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 sénior 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
    Points : 31 877
    Points
    31 877
    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

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Je vais regarder ton code, par contre que dois-je voir sur la ligne que tu me demandes de regarder (il est possible que j'ai loupé ce que tu voulais me montrer...).

    Autre questions tu me dis d'éviter les activesheet et select, quels problèmes posent ils?

    Merci pour ton aide.

  8. #8
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Compare cette ligne avec la tienne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                .Range(.Cells(5, Col), .Cells(DL, Col)).SpecialCells(xlCellTypeVisible).Copy Sheets("Eléments").Range("C9")  '#####ICI

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Au fait le code ne fonctionne pas (pour le moment il n'y a qu'une ligne dans le tableau de la feuille résultats...

    J'essaye de voir ou ça bloque mais je vois pas il y a un pb à ce niveau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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
    Il bloque sur la colonne Z (je ne vois pas pourquoi).

    De plus je m'aperçois que la variable DL n'est pas bonne il faut que je définisse le nombre de ligne après le filtrage, mais l'aide je ne vois pas comment le faire (je dois mal chercher).

    Question subsidiaire j'ai vu que tu a renommé mes variables avec des majuscules, est-ce mieux pour la typo, pour s'y retrouver?

  10. #10
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu peux mettre une copie ou un extrait (sans données confidentielles) de ton fichier pour test?

    Pour la nomination des variables, le fait d'avoir au moins une lettre en majuscule aide pendant l'écriture du code.

    En effet, si on a Option Explicit en début et après déclaration des variables (avec au moins une majuscule), quand j'écris le code, j'écris tout en minuscule; si vba me corrige, c'est que c'est le bon nom.

    Bref, question d'habitude.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    voila le fichier
    Fichiers attachés Fichiers attachés

  12. #12
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Et voila le problème des cellules fusionnées (colonne D,E et F) de feuille Éléments.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Voici une autre version que je viens de pondre mais j'ai quelques soucis:

    - Même si j'ai des valeurs après l'importation il me met pas de correspondances, or je veux ce message que si il n'y a pas de valeurs

    - si je mets une année (2010) où il n'y pas de valeurs j'ai un bug

    sinon je trouve le code pas mal.

    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 Ldateini As Long, Ldatefin As Long, DL As Long
    Dim Dateini As Date, Datefin As Date
    Dim Annee As Integer, Col As Integer, cr As Integer
    Dim Cible As String
    Dim c As Range, r 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"
            Set Rng = .Cells(4, 2).CurrentRegion
                On Error GoTo EmptyFilter
                    Set Rng = Rng.Offset(1, 0).Resize(Rng.Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
                On Error GoTo 0
     
                For Each r In Rng
     
                If Not r.Row = 4 Then
                    Sheets("Eléments").Range("A9") = r.Offset(0, 0)
                    Sheets("Eléments").Range("B9") = r.Offset(0, 1)
                    Sheets("Eléments").Range("D9") = r.Offset(0, 25)
                    Sheets("Eléments").Range("C9") = r.Offset(0, Col - 1)
                cr = cr + 1
                End If
                Next r
         .AutoFilterMode = False
        End If
    End With
    EmptyFilter:
    MsgBox "pas de correspondance"
    End Sub

  14. #14
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    C'est parce que tu copie le code sans l'étudier minutieusement

    1. Annule la fusion des cellules de la colonne D,E et F de feuille Eléments

    2. Voilà la code à étudier
    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
    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
     
    With Sheets("Résultats")
        .AutoFilterMode = False
        DL = .Range("A" & .Rows.Count).End(xlUp).Row                     'définition de la variable "dl" (dernière ligne)
        If DL > 4 Then
            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
                .Range("A4:Z" & 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 If
    End With
    End Sub

    EDIT

    Evite les Select/ActiveSheet...

    Pour ton code de l'usf:
    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
    Private Sub UserForm_Activate()
    Dim DC As Integer, i As Integer
     
    Application.ScreenUpdating = False                                   'mise à jour de l'écran bloquée
    choix_raie.ComboBox1.Clear                                           'Suppression des données existantes dans le ComboBox
    With Sheets("Résultats")
        DC = .Cells(4, .Columns.Count).End(xlToLeft).Column              'définition de la dernière colonne non vide de la ligne 4, variable dc
        If DC > 3 Then
            For i = 3 To DC - 1                                          'défnition de l'intervalle de colonne de la troisième à la dernière non vide pour la ligne 4
                choix_raie.ComboBox1 = .Cells(4, i)                      'définition des valeurs à intégrer dans la combobox
                If choix_raie.ComboBox1.ListIndex = -1 Then              'remplissage sans doublon de la combobox
                    choix_raie.ComboBox1.AddItem .Cells(4, i)
                End If
            Next i
            choix_raie.ComboBox1.ListIndex = -1
        End If
    End With
    End Sub

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Merci pour le code de l'usf.

    Sinon pour le dernier code que je t'ai posté par rapport à ta version que tu m'as donné tu en pense quoi?

    Je veux dire efficacité, codage, etc...

  16. #16
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Une simple question, pourquoi faire une boucle si on a la possibilité de faire directement.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    effectivement vu comme ça ton code est plus "correct" merci pour ton aide

+ 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