Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Boucle sur des données filtrées

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 !

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
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

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

- 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
5
Affichages
235
Réponses
4
Affichages
177
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
3
Affichages
193
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…