Microsoft 365 Boucle sur des données filtrées

Serotin43

XLDnaute Nouveau
Bonjour à tous,
Je débute en VBA.
Le code ci-dessous permet de comparer deux chaînes de caractères. Le problème est que en travaillant sur "Columns("A:Z")" toutes les lignes sont traitées alors que je travaille sur des données filtrées. J'ai essayé de nombreux autres codes incluant "SpecialCells(xlVisible)" mais aucun ne m'a permit de faire le traitement uniquement sur les données filtrées.
Je pensais avoir trouvé la solution en remplaçant "With Columns("A:Z")" par "With .AutoFilter.Filters" et le code "bug" sur la ligne qui est en rouge ! Pourquoi ???

Merci d'avance pour votre aide.
Bonne journée

VB:
[COLOR=rgb(65, 168, 95)]'DECLARATION et DEFINITION[/COLOR]
    Dim dg As Worksheet
        Set dg = ActiveWorkbook.Worksheets("donnees GRENIER")
    Dim gOcr As Worksheet
        Set gOcr = ActiveWorkbook.Worksheets("GRENIER_scan_OCR")

    Dim phrase1 As Variant      [COLOR=rgb(65, 168, 95)] 'Phrase de la ligne Ocr[/COLOR]
    Dim phrase2 As Variant       [COLOR=rgb(65, 168, 95)]'Phrase de la ligne dg[/COLOR]
    Dim result1 As Range           [COLOR=rgb(65, 168, 95)] 'Cellule d'affichage des résultats[/COLOR]
    Dim dgLign As Integer         [COLOR=rgb(65, 168, 95)]'Ligne de dg[/COLOR]
    Dim gOcrLign As Integer     [COLOR=rgb(65, 168, 95)]'Ligne de gOcr[/COLOR]
    Dim dgDerLign As Integer    '[COLOR=rgb(65, 168, 95)]Dernière ligne à traiter de dg[/COLOR]
    Dim dgMot As Long
    Dim gOcrMot As Long
    Dim dgPremLign As Range
    Dim numCBNMC As String
    Dim dgDerCol As Integer

With .Columns("A:Z")
For dgLign = dgDerLign To 2 Step -1   [COLOR=rgb(65, 168, 95)]'boucle qui commence à partir de la fin[/COLOR]
    dgDerCol = dg.Cells(dgLign, Columns.Count).End(xlToLeft).Column + 1 [COLOR=rgb(65, 168, 95)]'n° de la première colonne vide de la ligne[/COLOR]

           [COLOR=rgb(226, 80, 65)][B] .Cells(dgLign, dgDerCol).Name = "result1"[/B][/COLOR]
            phrase1 = Split(replacecar(.Cells(gOcrLign, 2)), " ") [COLOR=rgb(65, 168, 95)]'Découpage de la phrase en mot, après remplacement des caractères de ponctuation avec la fonction "replacecar"[/COLOR]
            phrase2 = Split(replacecar(.Cells(dgLign, 4)), " ")
            For gOcrMot = LBound(phrase1) To UBound(phrase1) [COLOR=rgb(65, 168, 95)]'Pour chaque mot de la phrase[/COLOR]
                If phrase1(gOcrMot) <> "" Then
                    For dgMot = LBound(phrase2) To UBound(phrase2) [COLOR=rgb(65, 168, 95)]'Pour chaque mot de la phrase[/COLOR]
                        If phrase1(gOcrMot) = phrase2(dgMot) Then  [COLOR=rgb(65, 168, 95)] 'Comparaison[/COLOR]
                            If Len(phrase1(gOcrMot)) > 3 Then[COLOR=rgb(65, 168, 95)] 'si le nombre de caractères est supérieur à 3[/COLOR]
                            .Range("result1").Value = phrase1(gOcrMot) + "_" + numCBNMC
                            .Range("result1").Offset(0, 1).Select
                            .Range("result1").Offset(0, 1).Hyperlinks.Add Anchor:=Selection, Address:="C:\Users\utilisateur\Documents\17_SCAN_HERBIER\06_TRAITEMENT_HERBIER_vba\SCAN_imag\" + numCBNMC + ".jpg", SubAddress:= _
        "", TextToDisplay:=numCBNMC
                            .Range("result1").Offset(0, 1).Name = "result1"
                            End If
                        End If
                    Next dgMot
                End If
            Next gOcrMot
        Next

End With [COLOR=rgb(65, 168, 95)]'Fin du traitement sur .Columns("A:Z")[/COLOR]
 
Solution
Bonjour Serotin 43, le forum

Juste un petit exemple pour travailler sur les cellules masquées.
Dans l'exemple ci-joint, on travaille sur les lignes mais tu peux l'adapter à des colonnes.
Tu filtres sur la colonne C et tu verras que les couleurs s'appliquent uniquement aux valeurs filtrées.

A adapter à ton code
@+

VB:
If ActiveSheet.Rows(i).EntireRow.Hidden Then
    Else
    If Cells(i, 1) > 10 Then
    Cells(i, 1).Font.Color = RGB(0, 200, 0)
End If

zebanx

XLDnaute Accro
Bonjour Serotin 43, le forum

Juste un petit exemple pour travailler sur les cellules masquées.
Dans l'exemple ci-joint, on travaille sur les lignes mais tu peux l'adapter à des colonnes.
Tu filtres sur la colonne C et tu verras que les couleurs s'appliquent uniquement aux valeurs filtrées.

A adapter à ton code
@+

VB:
If ActiveSheet.Rows(i).EntireRow.Hidden Then
    Else
    If Cells(i, 1) > 10 Then
    Cells(i, 1).Font.Color = RGB(0, 200, 0)
End If
 

Pièces jointes

  • fichier visible.xlsm
    18.3 KB · Affichages: 4

cp4

XLDnaute Barbatruc
Bonsoir,

Sans fichier pas évident de t'aider, je te propose ce code (adapte la plage)
VB:
Sub Boucle_Lignes_Filtrées_Plage()
Dim maplage As Range, ligne, numéro As Long
'mon exemple tableau de A1 à Lx avec entete
Set maplage = Range("A2:L" & Range("A" & Rows.Count).End(xlUp).Row)
For Each ligne In maplage.SpecialCells(xlCellTypeVisible).Rows
numéro = ligne.Row
MsgBox numéro 'ici tu fais ce que tu veux'
Next ligne
End Sub

@zebanx ;)
 

Pièces jointes

  • Boucle Lignes Filtrées.xlsm
    85.8 KB · Affichages: 3

Discussions similaires

Réponses
2
Affichages
98
Réponses
2
Affichages
129

Statistiques des forums

Discussions
311 720
Messages
2 081 917
Membres
101 839
dernier inscrit
laurentEstrées