Comparer des valeurs de cellules visibles après un filtre

Bonjour la communauté

Malgré de nombreuses recherches, je ne parviens pas à mes fins.

Explications, que je vais tenter de faire simples.

Des solutions manuelles existent, mais si je veux traiter la masse, je voudrais passer par une macro VBA ; langage que je ne maitrise pas

J'ai bien trouvé :

Dim Plage As Range, Area As Range, Cell As Range

Set Plage = ActiveSheet.AutoFilter.Range.Offset(1).Resize(ActiveSheet.AutoFilter.Range.Offset(1).Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
    For Each Area In Plage.Areas
        For Each Cell In Area
            MsgBox "Ligne : " & Cell.Row
        Next Cell
    Next Area

J'ai tenté une adaptation

Dim Plage As Range, Area As Range, Cell As Range

Set Plage = ActiveSheet.AutoFilter.Range.Offset(1).Resize(ActiveSheet.AutoFilter.Range.Offset(1).Rows.Count - 1, 1).SpecialCells(xlCellTypeVisible)
    Range("A1").Select
    For Each Area In Plage.Areas
        For Each Cell In Area
            Range("I" & Cell.Row).Select
            If Range("I" & Cell.Row).Value <> Range("I" & Cell.Row + 1).Value Then
                Range("I" & Cell.Row + 1).Select
                MsgBox "Erreur en " & "I-" & Cell.Row + 1 & Chr(10) & "Controlez le filtre, et la colonne I", vbCritical
            Exit Sub
            End If
        Next Cell
    Next Area
MsgBox "Contrôle terminé sans erreur détectée"

Mais cela ne réponds pas à mes attentes : cela contrôle la valeur masquée (lorsqu'il y en a une), ce qui n'est pas le but justement.

De plus le contrôle, a cause du "+1" sort de la plage

On me fournit un tableau filtré

Parfois, le filtre est mal appliqué.

C'est pour cela que je souhaiterais comparer la valeur de la cellule à celle immédiatement en-dessous, que ce soit en colonne A, C, E, F

Tant que A2 = A3 = A6 = A178 = ...... = A183 alors tout va bien, on passe à la colonne suivante.

Si une inégalité est présente on stoppe (on affiche éventuellement un message indiquant la cellule concernée, que l'on sélectionne pour un repérage plus facile) afin de faire la correction puis refaire le "test"

Je peux, suivant le filtre, tout aussi bien avoir 10 lignes visibles que 250.

A noter que la ligne 1 sera toujours visible puisqu'elle contient les titres des colonnes

J'espère avoir été explicite.

Merci pour votre aide

Salut Snipper-Ice,

voyons si j'ai bien compris!

Tu reçois donc un tableau de X lignes et de X colonnes mais avec des lignes masquées et tu dois vérifier que TOUTES (?) les cellules visibles de chaque colonne soient bien identiques entre elles ?

Même si ce n'est pas essentiel, à quel genre de contenu avons-nous affaire?

Si tu as un fichier pour confirmer ou apporter des précisions, ce serait hautement apprécié!

A+

Bonjour curulis57.

Navré pour l'oubli du fichier.

Mais effectivement, tu as presque compris.

J'ai à faire à un "simple" tableau de 721 lignes et de 34 colonnes (max) qui recense, par colonne : le nom d'une baie, la "position" des connecteurs, les nom des câbles, les noms des boites, les adresses...

Ce n'est pas sur toutes les cellules que je dois comparer, mais uniquement dans certaines colonnes.

Exemple (après filtrage en colonne I, ce qui, entre nous soit dit, est une erreur de base,; vu l'usage habituel) :

  • toutes mes cellules visibles de la colonne A doivent avoir la même valeur.
  • toutes mes cellules visibles de la colonne B doivent avoir la même valeur.
  • je ne contrôle pas les colonnes C - D & E
  • toutes mes cellules visibles de la colonne F doivent avoir la même valeur.
  • je ne contrôle pas (obligatoirement) les colonnes G- H
  • toutes mes cellules visibles de la colonne I doivent avoir la même valeur (normal => colonne ou le filtre est appliqué).

Le but est de contrôler, quoi qu'il arrive, les colonnes A - E - F - I (et accessoirement les colonnes G & H pour encore plus de sécurité)

Je joint 2 fichiers d'exemple, tel que fournis, où le filtre est appliqué sur la colonne I (alors qu'il devrait être appliqué en colonne F puisque c'est le nom du câble que je cherche).

L'un à une erreur, (23 J. JAURES) l'autre pas (10 COLOMES)

Ensuite j'applique une mise en forme (couleur), un enregistrement dans un autre fichier *.xlsx et fait un export pdf (pour impression).

Mais ça je pense que je sais faire (peut-être pas pour la copie des cellules visibles seulement, avec la même mise en forme précédemment appliqué

Espérant avoir été plus "clair".

Merci pour le temps consacré

Salut.

Après quelques jours, je "up" quelque peu le sujet...

Bonjour,

Pas très clair tout çà...

Un début de proposition à étudier (Excel 2013+).

Cdlt.

Bonjour.

Merci Jean Eric pour ta participation.

Effectivement je ne dois pas être assez clair.

Personnellement, je ne comprends pas l'utilité de ce tableau croisé dynamique.

Je vais essayé d'expliquer encore plus simplement.

Je filtre mon tableau.

Je voudrais juste pouvoir contrôler, via une macro, que toute mes valeurs restantes et affichée dans la colonne I (ou K ou peu importe, mais dans une seule et unique colonne que je choisirai dans ma macro) sont bien identiques

Le résultat de la macro est "simple"

Si elle s'exécute sans détecter de différence, je passe à l'étape suivante (mise en forme).

Si elle détecte une erreur, fin de la macro

msgbox "erreur détectée en " & [reférence de la cellule]

exit sub.

Lorsque je reçois le tableau, il est préfiltré.

Je dois donc manuellement vérifier que les autres colonne "clés" contiennent bien une seule et même valeur identiques entre elles.

La colonne contrôlée sera souvent la même.

Les lignes différeront en fonction du filtre appliqué en I

Je ne sais pas comment expliquer plus simplement

Re,

Ton message a été lu par 34 personnes.

Quel est le nombre de réponses ?

ll est peut être le temps pour toi de reformuler correctement la question.

Cdlt.

Salut Snipper-Ice,

Bonjour l'équipe,

après quelques excursions dans d'autres projets et si j'ai bien compris... un petit bouton rouge à cliquer!

Tu encodes les colonnes à scanner séparées d'un '/' sans espace et tu vois ce que ça donne.

J'ai modifié des valeurs en colonne A et B pour tester!

Dim tTab
'
sScan = InputBox("Veuillez entrer les colonnes à scanner séparées par un '/' !", "Scanning", vbOK)
If sScan = "" Or IsNumeric(sScan) Then Exit Sub
tTab = Split(UCase(sScan), "/")
'
For x = 0 To UBound(tTab)
    iRow = Range(tTab(x) & Rows.Count).End(xlUp).Row
    iLig = 0
    For y = 2 To iRow
        If Rows(y).Hidden = False Then
            Select Case iLig
                Case 0
                    iLig = y
                Case Else
                    If Range(tTab(x) & y) <> Range(tTab(x) & iLig) Then
                        sMsg = "Valeurs différentes : colonne " & tTab(x) & Chr(10) & Chr(10)
                        sMsg = sMsg & "Lignes : " & iLig & " (" & Range(tTab(x) & iLig) & ") - " & y & " (" & Range(tTab(x) & y) & ")"
                        MsgBox sMsg
                        Exit For
                    End If
                    iLig = y
            End Select
        End If
    Next
Next

Bon travail!

A+

31hiddenrows.xlsm (42.78 Ko)

Edité...

Je vais tester curulis57.

Merci

Re tout le monde.

Merci à curulis57

Le code fonctionne à merveille.

Je l'ai adapté pour qu'il colle encore plus à l'utilisation (que vont en faire certains feignants)

Grâce à ça j'en ai appris encore plus que demandé

Option Explicit

Sub Color_ROP()

Dim x As Long, y As Long
Dim sMsg, tTab, iRow
Dim iLig As Long

'-*-*-*-
Range("A1").Select

'definition des colonnes A, E, F, G, H, I comme colonnes "Clé" à contrôler - A modifier si besoin
tTab = Split("A-E-F-G-H-I", "-")

For x = 0 To UBound(tTab)
    iRow = Range(tTab(x) & Rows.Count).End(xlUp).Row
    iLig = 0
    'La ligne 1 étant la ligne des noms de colonne, on compte à partir de la suivante affichée, soit la 2, jusqu'à la dernière visible
    For y = 2 To iRow
        If Rows(y).Hidden = False Then
            Select Case iLig
                Case 0
                    iLig = y
                Case Else
                    If Range(tTab(x) & y) <> Range(tTab(x) & iLig) Then
                        sMsg = "Valeurs différentes en colonne " & tTab(x) & Chr(10) & Chr(10)
                        sMsg = sMsg & tTab(x) & iLig & " => " & Range(tTab(x) & iLig) & Chr(10)
                        sMsg = sMsg & tTab(x) & y & " => " & Range(tTab(x) & y) & Chr(10) & Chr(10)
                        MsgBox sMsg & "Contrôlez, rectifiez et relancer le contrôle", vbCritical
                        Range(tTab(x) & y).Select
                        Exit Sub
                    End If
                    iLig = y
            End Select
        End If
    Next
Next
MsgBox "Contrôle effectué" & Chr(10) & Chr(10) & "Aucune erreur détectée" & Chr(10) & "Poursuivons", vbInformation

Pour ma culture générale, je serais preneur des explications détaillée, même si j'ai compris les grandes lignes.

Encore une fois : grand merci.

Je caresse le doux espoir de pouvoir apporter ma contribution un jour

Rechercher des sujets similaires à "comparer valeurs visibles filtre"