Exporter tableau Excel vers Tableau dynamique VBA et inversement

Bonjour à tous,

J'ai des manipulations à effectuer sur un tableau excel à l'aide d'une macro: supprimer des lignes qui ne contiennent pas telle mot dans telle colonne.

Pour cela j'ai effectué une boucle for, mais le souci c'est que mon tableau est variable et peut contenir des dizaines de milliers de lignes, ce qui est extrêmement long!

Je voulais savoir comment je pourrais exporter le contenu de ce tableau (dont je ne connais pas la taille à l'avance) vers un tableau VBA, dans lequel je pourrai effectuer mes manipulations à l'aide de ma boucle for, puis une fois les manipulations effectuées, copier ce tableau VBA et le coller à la place de l'ancien sur Excel.

Merci pour votre aide!

Nat

Bonjour Nathou120,

Pourrais-tu donner un exemple ou fournir un fichier sans données sensible car là, cela me parait plutôt vague ?

Merci

Bonne journée

Bonjour,

Voila, j'ai joint un fichier dont j'ai modifié les données pour des raisons de confidentialité.

Ce que je voudrais faire c'est donc supprimer les lignes qui ne contiennent pas "Released to market" en colonne W, à partir de la ligne 2 et en suite supprimer toutes les lignes qui contiennent "Free deal" en colonne R.

Je voulais savoir s'il était possible d'exporter ces données vers un tableau VBA variable, d'effectuer les modifications nécessaires via des boucles puis de réintégrer ces données dans mon tableau excel.

Merci

22tableau.xlsx (170.77 Ko)

Bonjour,

Dans ton exemple, si je filtre la colonne W pour ne conserver que les Released to market, je n'ai que de des Free deal en colonne R.

Donc supprimer tout ce qui n'est pas Released to market en colonne W, puis supprimer tout ce qui est Free deal en colonne R, revient à tout supprimer.

Cdlt.

Oui ceci est un exemple, j'ai sans doute mal rempli les cellules aléatoirement, mais normalement ça ne reviendrait pas à tout supprimer

Re,

Tu peux envisager de filtrer :

1 - La colonne W avec = Released to market

2 - La colonne R avec <> Free to deal

3 - Copier la plage filtrée sur une nouvelle feuille.

Nul besoin de VBA.

Cdlt.

Hello Jean-Eric,

En fait je souhaiterais automatiser cela par une macro

Bonjour Nathou210,

Est-ce que cela te convient ?

  • Il vérifie si un filtrage est appliqué
  • Il filtre sur La colonne W = Released to market
  • Il filtre sur la colonne R <> Free to deal
  • Il copie la plage filtrée sur la feuille n°2.

En attente de ton retour.

17tableau.xlsm (150.82 Ko)

Bonjour,

Merci, en fait les filtres semblent être la solution la mieux adaptée.

Est-il possible d'ajouter une fonction "OU" du coup? En gros filtrer avec une condition dans chaque colonne

Ex:

Filtre sur la colonne R: <> Released to market

OU

Filtre sur la colonne W: = Free deal

Et en suite je supprime les lignes qui apparaissent via ces 2 conditions

Re,

Les filtres ont été la solution vu par Jean-Eric et moi ainsi, à qui t'adresses-tu ?

A toi Pat,

Je voudrais automatiser ces filtres

Ok,

J'ai rajouté la macro FiltreUniquement qui :

Filtre sur la colonne R: <> Released to market

Filtre sur la colonne W: = Free deal

Pour la partie du OU, j'espère que cela était bien cela ?

10tableau.xlsm (152.55 Ko)

Re,

Ci-dessous une proposition à étudier.

Cdlt.

Option Explicit

Public Sub Filter_Data()
Dim wb As Workbook
Dim ws As Worksheet, ws2 As Worksheet
Dim lo As ListObject, lo2 As ListObject
Dim rng As Range, rng2 As Range

    Application.ScreenUpdating = False

    Set wb = ActiveWorkbook
    Set ws = wb.Worksheets("Feuil1")
    Set ws2 = wb.Worksheets("Feuil2")

    ws2.Cells.Clear

    With ws
        If .Cells(1).ListObject Is Nothing Then
            Set lo = .ListObjects.Add(xlSrcRange, .Cells(1).CurrentRegion, , xlYes)
        Else
            Set lo = .ListObjects(1)
        End If
    End With

    If lo.ShowAutoFilter Then lo.AutoFilter.ShowAllData

    lo.Range.AutoFilter Field:=23, Criteria1:="Released to market"
    lo.Range.AutoFilter Field:=18, Criteria1:="<>Free deal"

    With lo.AutoFilter.Range
        On Error Resume Next
        Set rng = .Offset(1).Resize(.Rows.Count - 1, .Columns.Count).SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
    End With

    If rng Is Nothing Then
        MsgBox "Il n'y a pas de données à copier!...", vbInformation, "Information"
    Else
     Set rng2 = lo.AutoFilter.Range
        rng2.SpecialCells(xlCellTypeVisible).Copy
        ws2.Cells(1).PasteSpecial xlPasteValuesAndNumberFormats
        Application.CutCopyMode = 0
    End If

    Set lo2 = ws2.ListObjects.Add(xlSrcRange, ws2.Cells(1).CurrentRegion, , xlYes)

End Sub

Bonjour à tous

Une solution par filtre Avancé

11fltreavance.xlsm (220.99 Ko)
Rechercher des sujets similaires à "exporter tableau dynamique vba inversement"