Copier cellules contenant "B" et les colonnes adjacentes

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. 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
    1. 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