Vba-cacheinfos

Celeda

XLDnaute Barbatruc
Bonjour,

Je vous soumets mon petit souci visuel : j'ai récupéré un fichier avec lequel je vais devoir vivre pendant 24 mois et qui comporte bien trop de couleurs, de données qui ne m'interessent pas mais c'est ainsi.
J'ai donc pensé le "aérer" quelque peu, juste en cachant des infos qui ne me concernent pas, c'est la feuille BD
Dans la feuille status, en colonne C14, je récupère des données de ce tableau qui sont en colonne B de chaque tableau de la feuille BD - cette feuille n'évoluera pas, elle restera avec le nombre de données qu'elle a (en réalité, la feuille commence en B3 -Y38 et on ne peut pas changer la structure).

Je récupère donc certains nombres dans chaque colonne B que je place dans la feuille status et je souhaite que tous les autres numéros ainsi que les données s'y rapportant (c'est-à-dire les infos qui se trouvent sur la même ligne en A,C,D) soient "cachées".
Par cacher, j'entends, soit elles disparaissent, soient elles deviennent invisibles en couleur blanche par exemple.Mais que l'on puisse les faire réapparaître si j'ai besoin de consulter les autres nos.
Et donc il restera uniquement les numéros placés dans la feuille status ainsi que les données A,C,D qui les concernent.
Le tableau ne doit pas bouger et il y aura des trous blancs ou ....à la place des infos cachées : ainsi d'un seul coup d'oeil, je pourrais voir évoluer l'avancement de mes travaux.

J'espère que j'ai été claire sinon n'hesitez pas.
Je vous remercie à l'avance pour votre aide.:)
 

Pièces jointes

  • CacheInfos.zip
    5.9 KB · Affichages: 37

david84

XLDnaute Barbatruc
Re : Vba-cacheinfos

Bonsoir tout le monde,
un 1er test incomplet à tester pour voir si j'ai compris le principe :
Code:
Sub Test()
Dim Numero, Col As Range, Premier, DerLigne1&, DerLigne2&, DerCol%, Resultat
DerLigne1 = Worksheets("STATUS").Range("C" & Rows.Count).End(xlUp).Row
DerLigne2 = Worksheets("BD").Range("B" & Rows.Count).End(xlUp).Row
DerCol = Worksheets("BD").Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Numero = Worksheets("STATUS").Range("C15:C" & DerLigne1)
Worksheets("BD").Activate
With Worksheets("BD").Range(Cells(4, 2), Cells(4, DerCol))
    Set c = .Find("B", LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        Premier = c.Address
        Do
            For j = 5 To DerLigne2
                Resultat = Application.WorksheetFunction.CountIf _
                (Worksheets("STATUS").Range("C15:C" & DerLigne1), _
                Worksheets("BD").Cells(j, c.Column))
                If Resultat = 0 Then
                   Worksheets("BD").Range(Cells(j, c.Column - 1), _
                   Cells(j, c.Column + 2)).Font.ColorIndex = 2
                End If
            Next j
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> Premier
    End If
End With
End Sub
Concernant les MFC (que je n'ai pas traité dans le code, est-ce toi qui les a placées où récupères-tu les tableaux tels quels ?
A+
 

Celeda

XLDnaute Barbatruc
Re : Vba-cacheinfos

Bonjour,

Merci David :

1- pour un premier test, cela fonctionne bien en partie : il n'y a que les données de colonne D qui ne se cachent pas mais qui devraient aussi se cacher.

2- il n'y a pas de MFC, ce sont des couleurs qui sont là manuellement et effectivement, les updates de ce fichier m'arrivent toujours avec toutes ces couleurs que je ne maitrise pas; donc je pense qu'on peut les effacer en même temps qu'on cache les données

3-je pense qu'il est possible d'inverser ensuite le process : c'est-à-dire de tout faire apparaître : données et couleurs non ????

Merci beaucoup David pour ton aide.
 

david84

XLDnaute Barbatruc
Re : Vba-cacheinfos

Re Celeda,
Ok, je crois que j'ai compris ce que tu veux et je me demande si ce ne serait pas plus simple si cela est possible de masquer les lignes des cellules non présentes dans la feuille2 plutôt que de jouer sur les couleurs de police les MFC, etc.
-je pense qu'il est possible d'inverser ensuite le process : c'est-à-dire de tout faire apparaître : données et couleurs non ????
j'ai compris que c'était le but.
Pas trop le temps ce matin mais je verrai en fin d'après-midi. Ceci-dit le VBA c'est récent pour moi donc l'aide de kjin et d'autres VBAistes chevronnés serait la bienvenue:).
Mais bon, je vais voir ce que je peux te proposer.
A+
 

Celeda

XLDnaute Barbatruc
Re : Vba-cacheinfos

Bonjour,

David, pas de stress, tu sais je vais vivre avec cela pendant 24 mois alors je ne suis pas à un jour près; si on arrive à macrotiser cela me facilitera la compréhension de la feuille et j'aurai une photo instantannée, donc cool.

"masquer les lignes des cellules non présentes dans la feuille2 "
j'y avais pensé mais pas possible compte tenu de la structure du fichier; le fait de les cacher m'apparaissaient plus simple.

Merci mais te précipite pas et merci à ceux qui voudront se joindre à ce fil.
 

Fo_rum

XLDnaute Accro
Re : Vba-cacheinfos

Bonjour,

une autre façon de faire à adapter à ton fichier (nombre de lignes, de colonnes, formats ...).
J'ai ajouté une feuille afin de récupérer les informations cachées.
 

Pièces jointes

  • CacherInfos.xls
    44.5 KB · Affichages: 64

david84

XLDnaute Barbatruc
Re : Vba-cacheinfos

Re Cedela, bonjour Fo_rum,
J'en étais venu à la même idée que Fo_rum,...sauf que lui l'avait fait:rolleyes: !
Je pense qu'il est en effet plus simple de procéder de la sorte.
En conséquence, ci-joint mon code actualisé avec la partie liée à l'effacement des données empruntée à Fo_rum :
Code:
Sub Cacher()
Dim Numero, Col As Range, Premier, DerLigne1&, DerLigne2&, DerCol%, Resultat
DerLigne1 = Worksheets("STATUS").Range("C" & Rows.Count).End(xlUp).Row
DerLigne2 = Worksheets("BD").Range("B" & Rows.Count).End(xlUp).Row
DerCol = Worksheets("BD").Cells.Find("*", , , , xlByColumns, xlPrevious).Column
    With Worksheets("BD")
        .UsedRange.FormatConditions.Delete
        .UsedRange.Font.ColorIndex = xlNone
        .UsedRange.Interior.ColorIndex = 0
    End With
With Worksheets("BD").Range(Cells(4, 2), Cells(4, DerCol))
    Set c = .Find("B", LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        Premier = c.Address
        Do
            For j = 5 To DerLigne2
                Resultat = Application.WorksheetFunction.CountIf _
                (Worksheets("STATUS").Range("C15:C" & DerLigne1), _
                Worksheets("BD").Cells(j, c.Column))
                If Resultat = 0 Then
                   Worksheets("BD").Range(Cells(j, c.Column - 1), _
                   Cells(j, c.Column + 2)).Font.ColorIndex = 2
                End If
            Next j
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> Premier
    End If
End With
End Sub
Sub afficher()
Worksheets("BD_Copie").UsedRange.Copy Destination:=Worksheets("BD").[A3]
End Sub
Je te le communique surtout pour info vu que celui de Fo_rum fonctionne:cool:.
Après, je ne connais pas l'organisation de ton fichier ni la manière dont tu récupères tes tableaux mais il faudra peut-être prévoir un code te permettant de copier ces tableaux directement dans la feuille hébergeant la copie (je l'ai appelé "BD_Copie" dans mon code et Fo_rum l'a appelé "copie"), et peut-être même de protéger ou masquer cette copie si tu en ressens l'utilité.
A+
 

Celeda

XLDnaute Barbatruc
Re : Vba-cacheinfos

Bonjour,

Oh oh joli kjin!!!

on peut dire qu'il y en a pour tout le monde et de toutes les couleurs!!!

Super toutes ces différentes versions : je vous en remercie grandement.

Et que la force reste en vous!!:)
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35