Copier cellules contenant "B" et les colonnes adjacentes

Cestmoi007 -  
cestmoi007 Messages postés 4 Statut Membre -

Bonjour,

J'ai une feuille de calcul ayant plusieurs colonnes. Ce sont les colonnes B,C et D qui m'intéressent. Je veux sélectionner toutes les cellules de la colonne C qui contiennent la lettre B genre ("C:C","B"&"*") puis ensuite copier toutes ces cellules mais également les cellules B et D aussi sur la feuille 2 plage A2:C20 par exemple.

Merci d'avance


Windows / Firefox 112.0

2 réponses

  1. ozone_ Messages postés 1823 Statut Membre 511
     

    Bonjour,

    Une approche possible en VBA :

    Sub CopierCellules()
        Dim ws1 As Worksheet
        Dim ws2 As Worksheet
        Dim i As Long
        Dim j As Long
        Dim k As Long
        
        ' Définir les noms de feuilles de calcul
        Set ws1 = ThisWorkbook.Sheets("Feuille1")
        Set ws2 = ThisWorkbook.Sheets("Feuille2")
        
        ' Activer le filtre automatique
        ws1.Range("B1:D1").AutoFilter
        
        ' Filtrer les cellules de la colonne C qui contiennent la lettre "B"
        ws1.Range("B1:D1").AutoFilter Field:=3, Criteria1:="=*B*"
        
        ' Copier les cellules filtrées vers la feuille 2
        j = 2 ' Ligne de début sur la feuille 2
        For i = 2 To ws1.Range("C" & ws1.Rows.Count).End(xlUp).Row ' Parcourir les cellules filtrées
            If ws1.Range("C" & i).EntireRow.Hidden = False Then ' Vérifier si la ligne n'est pas masquée par le filtre
                ws2.Range("A" & j).Value = ws1.Range("B" & i).Value ' Copier la cellule de la colonne B
                ws2.Range("B" & j).Value = ws1.Range("C" & i).Value ' Copier la cellule de la colonne C
                ws2.Range("C" & j).Value = ws1.Range("D" & i).Value ' Copier la cellule de la colonne D
                j = j + 1 ' Passer à la ligne suivante sur la feuille 2
            End If
        Next i
        
        ' Désactiver le filtre automatique
        ws1.Range("B1:D1").AutoFilter
        
        ' Sélectionner la plage copiée sur la feuille 2
        ws2.Range("A2:C" & j - 1).Select
    End Sub
    

    0
  2. cestmoi007 Messages postés 4 Statut Membre
     

    Merci

    mais à la dernière ligne :

    ws2.Range("A2:C" & j-1).Select il me dit:

    Erreur d'exécution '1004' La méthode Select de la classe Range a échoué

    Ou pourrais-je trouver les définitions des codes (genre autofilter...Field....) en français

    Merci encore

    0