Ignorer cellules vides dans plage de cellules

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Nico44044

XLDnaute Nouveau
Bonsoir à tous,

Je souhaiterais pouvoir effectuer une recherche dans une feuille excel en effectuant une comparaison entre plusieur plage de cellules, en ignorant les cellules vide.(le tout en VBA)

J'ai un début de piste mais je bloque pour la suite.

Je joint un fichier avec plus de precisions ...

Ce code fonctionne il ne me reste plus qu'a trouver comment ignorer les criteres vide dans Range("A1:C1")


Option Explicit Sub es()
Dim a, b, c, d As Variant, i As Long, j As Long, t As Long, J1 As Long
Application.ScreenUpdating = False
With ActiveSheet.UsedRange For t = 2 To 15
a = Range("A1:C1").Value
b = Range("A" & t & ":C" & t).Value
c = Range("D" & t & ":F" & t).Value
d = Range("G" & t & ":I" & t).Value
For i = LBound(a, 2) To UBound(b, 2)
For j = LBound(a, 1) To UBound(a, 1)
If a(j, i) = b(j, i) Or a(j, i) = c(j, i) Or a(j, i) = d(j, i) Then
Else
Rows(t).Hidden = True
End If
Next j
Next i
Next t
End With
End Sub

Merci d'avance à celui qui pourra m'aider
 

Pièces jointes

tblBD = Range("F23:Z" & [F65000].End(xlUp).Row).Value

Boisgontier

Je viens de rencontrer un petit bug, a priori le code n'aime pas trop le mélange Lettre / Chiffre dans le meme critères.
Dans le tableau il y a plusieurs fois la ref "F500" dans la colonne Type et si je cherche juste "500" et bien il ne trouve rien ... alors les valeurs 500 et F500 sont bien présente

Une idée ??

Merci
 
Bonjour Nico44044, JB, le forum,

La formule de mon post #29 est compliquée, j'ai donc créé la fonction personnalisée Comparer :
Code:
Dim crit$() 'mémorise la variable

Function Comparer(plage As Range) As Boolean
Dim i%
Comparer = True
For i = 1 To UBound(crit)
If Not LCase(plage(i)) Like crit(i) Then Comparer = False: Exit Function
Next
End Function

Sub Filtrer()
Dim deb As Range, ncol%, critere As Range, fin As Range, i%
Set deb = Feuil1.[F22] '1ère cellule, à adapter
ncol = 21 'à adapter
Set critere = Feuil1.[F22:I22] 'plage à adapter
Set fin = deb.Resize(, ncol).EntireColumn.Find("*", , xlValues, , xlByRows, xlPrevious)
If fin Is Nothing Then Exit Sub 'sécurité
If fin.Row < deb.Row + 1 Then Exit Sub 'tableau vide
ReDim crit(1 To critere.Count) 'tableau, plus rapide
For i = 1 To UBound(crit): crit(i) = "*" & IIf(critere(i) = "", "", LCase(critere(i)) & "*"): Next
Application.ScreenUpdating = False
With deb.Resize(fin.Row - deb.Row + 1, ncol)
    .Rows(2).EntireRow.Insert
    .Cells(2, 1) = "c1": .Cells(2, 1).AutoFill .Cells(2, 1).Resize(, ncol) 'titres provisoires
    .Cells(3, ncol + 1) = "=Comparer(F24:I24)+Comparer(M24:P24)+Comparer(T24:W24)"
    .Offset(1).AdvancedFilter xlFilterInPlace, .Cells(2, ncol + 1).Resize(2) 'filtre avancé
    .Cells(3, ncol + 1) = ""
    .Rows(2).EntireRow.Delete
End With
End Sub
Sub RAZ()
If Feuil1.FilterMode Then Feuil1.ShowAllData
End Sub
En contrepartie la durée d'exécution est un peu augmentée : 3,4 secondes sur 60 000 lignes.

Fichier (2).

Bonne journée.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
223
Réponses
5
Affichages
718
Réponses
4
Affichages
586
Réponses
8
Affichages
276
Réponses
10
Affichages
539
Réponses
5
Affichages
491
  • Question Question
Microsoft 365 Erreur UBound
Réponses
4
Affichages
223
Réponses
8
Affichages
656
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
812
Retour