Macro pour copier tableau qui contient mot clé de Word vers Excel

Merci beaucoup Gérard pour ton aide inestimable.

Je ne sais pas si tu voudra m'aider pour la dernière fois mais je tente ma chance vu que je dois rendre mon projet lundi:

j'ai essayé de rajouter un bout de code pour supprimer les lignes où est ecrit "A supp" mais ça beug

    'On filtre la plage
    oRange.AutoFilter Field:=lCol, Criteria1:="=*A supp*"
    'On supprime toutes les lignes filtr?es
    Application.DisplayAlerts = False
    oSheet.Range(oSheet.Cells(3, 1), oSheet.Cells(oSheet.UsedRange.Rows.Count, oSheet.UsedRange.Columns.Count)).SpecialCells(xlCellTypeVisible).Delete
    Application.DisplayAlerts = True

    'On supprime le filtre
    On Error Resume Next
    oSheet.ShowAllData
    On Error GoTo 0

    Set oRange = Nothing

j'envoi le fichier excel ce sera plus simple. (le code est à la fin de la macro)

Merci d'avance

Bonjour Hajar,

Plusieurs problèmes avec le code que tu as ajouté :

- Tu fais référence à la variable oRange dans le code :

   'On filtre la plage
    oRange.AutoFilter Field:=lCol, Criteria1:="=*A supp*"

alors que juste au dessus tu a libéré la variable oRange :

Set oRange = Nothing

-Toujours dans la même ligne de code :

   'On filtre la plage
    oRange.AutoFilter Field:=lCol, Criteria1:="=*A supp*"

tu filtres sur la colonne fournie en paramètre "lCol" alors que la valeur que tu recherches se trouve dans une autre colonne : dans "MPCA" la colonne suivante.

-N'oublies pas que la procédure "clearSheet" est appelée 2 fois, une fois pour la feuille "MPCA", une autre pour la feuille "Prelevement" . C'est la raison pour laquelle le numéro de la colonne sur laquelle le filtre est posé est passé en paramètre (lCol) puisque dans ces 2 feuilles, le positionnement de la colonne sur laquelle filtrer n'est pas identique (17 pour l'une, 7 pour l'autre).

Ce qui amène une autre remarque : dans cette même procédure, tu as ajouté la séquence :

'chercher et supprime ".docx" et "OUI"
    Dim feuil As Worksheet
For Each feuil In ThisWorkbook.Worksheets
    feuil.Cells.Replace What:=".docx", Replacement:=""
    feuil.Cells.Replace What:="OUI ", Replacement:=""
Next feuil

qui s'exécutera donc à 2 reprises, ce qui ne génèrera pas d'erreur mais n'est pas optimal. Il vaudrait mieux sortir cette séquence de la procédure pour ne l'exécuter qu'une fois.

Plus généralement, il me semble que, plutôt que le procédé qui consiste à copier puis supprimer des lignes, il serait plus efficace de ne copier que les lignes "utiles" sans avoir à y revenir après coup.

En tout cas, je renvois le classeur corrigé pour évider que ça "bogue".

Bonjour, merci beaucoup mais mais ligne avec A supp ne se suppriment tjs pas.

Hajar,

pourtant, sur ma version les lignes "A Supp" sont bien supprimées :

asupp

Désolée mais pas dans ma version

capture

Re, j'ai regardé le code de la version 3 et j'ai l'impression que c'est le même de la version 2

Voila la version 3 :

capture

Hadja,

Tu n'as certainement compris mes dernières explications :

Tu dois remplacer :

 'On filtre la plage
    oRange.AutoFilter Field:=lCol, Criteria1:="=*A supp*"

Par :

 'On filtre la plage
    oRange.AutoFilter Field:=lCol+1, Criteria1:="=*A supp*"

c vrai que je n'ai pas compris grand chose mais même avec cette modification j'ai ça

capture

Tu dois aussi supprimer la ligne :

Set oRange = Nothing

Devant la séquence de filtre. Ce qui donne :

    
    'Set oRange = Nothing 'On met cette ligne en commentaire pour l'annuler son effet
'******************************************************************************************
      ' supprimer les lignes avec "A supp"
'******************************************************************************************
    'On filtre la plage
    oRange.AutoFilter Field:=lCol, Criteria1:="=*A supp*"
    'On supprime toutes les lignes filtrées
    Application.DisplayAlerts = False
    oSheet.Range(oSheet.Cells(3, 1), oSheet.Cells(oSheet.UsedRange.Rows.Count, oSheet.UsedRange.Columns.Count)).SpecialCells(xlCellTypeVisible).Delete
    Application.DisplayAlerts = True

    'On supprime le filtre
    On Error Resume Next
    oSheet.ShowAllData
    On Error GoTo 0

    Set oRange = Nothing

Merci Merci Merci je vous ai fait perdre beaucoup de temps et vous l'avez fait avec beaucoup de patience .

MERCI

Rechercher des sujets similaires à "macro copier tableau qui contient mot cle word"