[RESOLU] Masquer colonne selon contenu cellule VBA

Aurianelm

XLDnaute Nouveau
Bonjour tout le monde !

Voilà, je voudrai masquer les colonnes si une certaine cellule contient (et non est égal) le mot "Total" sachant que les colonnes ne sont pas toujours les mêmes.

Merci !

Bonne journée.
Auriane
 
Dernière édition:

Orodreth

XLDnaute Impliqué
Re : Masquer colonne selon contenu cellule VBA

Bonjour,

A jouer avec, mais il faut que:
1) tu testes dans ta cellule si le mot qui t'intéresse est dedans (fonction InStr)
2) Si le mot est dedans, tu masques la colonne qui t'intéresse

En gros, ça donne quelque chose comme ça
Code:
If InStr(0,Sheets("Feuil1").Range("A1").value, "Total") > 0 Then
    Columns("B:C").EntireColumn.Hidden = True
End if
Le code ci-dessus teste si "Total" se trouve dans la valeur de la cellule A1 de la Feuil1, et si oui, il masque les colonnes B et C.

La fonction InStr renvoie un entier supérieur à 0 si le texte recherché se trouve dans le texte à fouiller.
Si la fonction renvoie 0, ça signifie que le texte recherché ne se trouve pas dans le texte à fouiller.

EDIT: bonjour Pierrot, bonne remarque concernant les colonnes à masquer. Je lis trop vite pour mon pauvre cerveau :(

Cordialement,
Orodreth
 
Dernière édition:

Aurianelm

XLDnaute Nouveau
Re : Masquer colonne selon contenu cellule VBA

Ben disons que quand je dis que les colonnes ne sont pas toujours les mêmes c'est qu'aujourd'hui elles sont en colonne D et G par exemple mais demain elles peuvent être en B et J par exemple. Par contre elles contiennent toujours le mot "Total" (+ autre mot c'est pour ça que je souligne bine contient ) sur le même ligne (4).
 

Pierrot93

XLDnaute Barbatruc
Re : Masquer colonne selon contenu cellule VBA

Re, bonjour Orodreth

A noter que l'on peut tester également en utilisant l'opérateur "Like" et les caractères "joker" :
Code:
If Sheets("Feuil1").Range("A1").Value Like "*Total*" Then
 

Aurianelm

XLDnaute Nouveau
Re : Masquer colonne selon contenu cellule VBA

Ce code est pas mal mais je voudrai masquer la colonne où est la cellule qui contient le mot "total" sans savoir laquelle c'est (enfin je suppose qu'il est possible de le savoir avec la cellule qui contient le mot "total").

Désolée mais je débute en VBA donc je suis pas hyper à l'aise...

Merci !
 

Orodreth

XLDnaute Impliqué
Re : Masquer colonne selon contenu cellule VBA

Re,

Donc petit correctif du code:

Code:
Dim fin_Col as integer
fin_Col = ActiveSheet.Range("IV4").end(xltoleft).column
Dim pcs_col as integer
'parcours des colonnes
for pcs_col = 1 to fin_col
    'si le texte "Total" est trouvé dans la cellule
    if InStr(0,Activesheet.cells(4,pcs_col).value, "Total") > 0 then
        Dim col as string
        'Si l'index de la colonne est inférieur ou égal à 26
        if pcs_col <= 26 then
             'On ne récupère qu'une seule lettre
             col = right(left(Activesheet.cells(4,pcs_col).address,2),1)
        else
             'Sinon, on en récupère 2
             col = right(left(Activesheet.cells(4,pcs_col).address,3),2)
        end if
        'On masque la colonne
        Columns(col).EntireColumn.Hidden = True
    end if
next pcs_col

EDIT: ah, sympa le coup du like, je connaissais pas du tout (du moins sur VBA excel) :) Merci pour l'astuce Pierrot
Le code ci-dessus répond à ton besoin Auriane, tu peux le copier tel quel.

Cordialement,
Orodreth
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Masquer colonne selon contenu cellule VBA

Re,

Une autre approche avec la méthode "Find" :

Code:
Option Explicit
Sub test()
Dim c As Range
With Sheets("Base").Cells
    Set c = .Find("Total", , xlValues, xlPart, , , False)
    If Not c Is Nothing Then
        Do
            c.EntireColumn.Hidden = True
            Set c = .FindNext(c)
        Loop While Not c Is Nothing
    End If
End With
End Sub
 

Discussions similaires

Réponses
2
Affichages
158

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 210
Membres
103 158
dernier inscrit
laufin