VBA - Suprimer ligner selon 2 critères .FIND

Bonsoir à tous,

J'avance doucement dans mes différentes macros pour réaliser mon projet grâce à votre aide !

Dans ce fichier j'ai l'onglet "Reporting Consolidé" duquel je souhaite supprimer les lignes pour lesquelles les conditions des cellules F13 et F14 de l'onglet Sommaire sont respectées.

J'ai pensé par la méthode .Find en définissant deux variables.

Puis d'utiliser l'intersection. Ce qui après coup ne semble pas très malin car il n'y a jamais d'intersection entre deux colonnes.. !

'Récupère l'année à supprimer et à copier
Line = OB.Range("F13").Value
Name = OB.Range("F14").Value

'Positionne et supprime l'année Line
CD.Activate
OD.Select
   Set FoundCell = Range("W:W").Find(what:=Line)
   Set FoundCell2 = Range("B:B").Find(what:=Name)
   Set FoundCellIntersection = Application.Intersect(FoundCell.EntireRow, FoundCell2.EntireRow)
   FoundCellIntersection.Select

       Do Until FoundCell Is Nothing
                FoundCellIntersection.EntireRow.Delete Range
       Set FoundCell = Range("W:W").FindNext

   Loop

Je ne suis pas encore très familier avec les loop et j'ai souvent des messages d'erreur quand j'en écris car j'oublie des objets !

Quelqu'un pourrait-il m'aider à débugger cette partie de la macord "Import_Reporting" s'il vous plait?

Avec le fichier d’exemple joint bien évidemment !

Merci d'avance à tous,

Jay

Bonjour,

Option Explicit

Sub sligne()
Application.ScreenUpdating = False

Dim cnt As Long, i As Long
Dim var1 As String
Dim var2 As Integer
cnt = Application.WorksheetFunction.CountA(Sheets(2).Range("a:a"))
var1 = Sheets("Sommaire").Range("f14").Value
var2 = Sheets("Sommaire").Range("f13").Value

For i = cnt To 2 Step -1
If Sheets("Reporting consolidé").Range("b" & i).Value = var1 And Sheets("Reporting consolidé").Range("w" & i) = var2 Then
Sheets("Reporting consolidé").Range("b" & i).EntireRow.Delete
End If
Next
Application.ScreenUpdating = True

End Sub

Se code là fonctionne, peut-être que vous pouvez l'intégrer dans votre code à vous ?

Bonjour,

Oui c'est bien, sachant que c'est conditions peuvent être présentent sur une ligne, tout comme sur une centaine !

IL y a un problème qui je pense va très vite se manifester au niveau des dates. En VBA l'année 2015 et le chiffre 2015 en lui même sont deux choses différentes où du moins, ne se codifie pas de la même manière. Dans votre fichier pour le moment les années sont des chiffres , pas de risque de bug donc mais attention lors de la saisie à ne pas entrer des formats date.

Ensuite dans votre fichier, la variable "Line" ne peut pas fonctionner car elle à une caractéristique de type " texte" alors que ce sont des chiffres qui sont stockées (2015 par exemple).

Pour être honnête je ne sais pas trop ou placer mon code dans le votre car je ne sais pas ce qui doit être effacé ou non :/

Bonjour Frédéric38,

Tout d'abord merci de ta réponse. J'ai pris le temps de tester ton bout code et premier point positif, cela ne bloque plus !

En revanche, le code ne supprime pas les lignes qui respectent les conditions Name & Line.

(ps, VBA n'aime pas quand la var2 est un Integer, mais ne dis rien lorsqu'il s'agit d'un String!?)

J'ai du réadapter un peu le code car j'ai donné des noms à mes onglet (OngletDestination = Sheets Reporting Consolidé).

Ne connaissant pas le code utilisé pour cnt :

cnt = Application.WorksheetFunction.CountA(Sheets(2).Range("A:A"))

Il y a peut être également quelque chose à modifier/adapter?

Voilà donc ce que j'ai repris et qui ne bug pas, mais ne supprime pas non plus :

'Positionne et supprime l'année Line
cnt = Application.WorksheetFunction.CountA(Sheets(2).Range("A:A"))
Line = OB.Range("F13").Value
Name = OB.Range("F14").Value

For i = cnt To 2 Step -1
If OD.Range("B" & i).Value = Line And OD.Range("W" & i) = Name Then
OD.Range("b" & i).EntireRow.Delete
End If

Next

 

Concernant ton point sur l'évolution du fichier, les années saisies ne servent qu'à cela et ne sont/seront pas saisies en format Date. D'autres cellules sont prévues à cet effet !

Merci de ton aide et bonne journée!

Bonjour,

Si vous ouvrez le fichier joins, et que vous cliquez sur le bouton 1 sur la feuille Reporting vous allez vous aperçevoir que mon code fonctionne et elimine bien la ligne 11 (représentant DAMIEN et 2015) comme écrit dans la feuille sommaire.

Et je vous laisse le soin de tester avec d'autres noms

cnt = Application.WorksheetFunction.CountA(Sheets(2).Range("A:A"))

C'est l'équivalent de la fonction nbval() , schématiquement cela compte le nombre de ligne dans la base de donnée puis on se sert de cette coordonnée comme base de départ.

Exemple : si nbval() determine qu'il y a 822 ligne, la macro de traitement commence à la ligne 822 , fait ce qu'elle a à faire puis remonte d'une ligne à chaque fois.

Joignez votre nouveau fichier tel qu'il est pour que l'on puisse trouver d'ou vient le bug

Par avance merci

Ok, merci pour vos explications concernant Count.

J'ai repris votre code depuis votre fichier et l'ai appliqué au mien légèrement modifié... et miracle tout marche !

Donc c'est un sujet résolu de plus !

Merci encore de votre aide !

Merci à vous et je suis content que le problème soit résolu

Rechercher des sujets similaires à "vba suprimer ligner criteres find"