VBA largeur de colonnes

Bonjour à tous,

Je travaille sur un Tcd mais pour l'affichage je souhaiterais modifier la largeur de certaines colonnes,

Je vous joint le fichier test avec les explications,

Merci d'avance pour votre aide,

Cordialement,

Bonjour,

Je ne comprends pas ton code

Dim i  As Integer, dl As Integer
Application.ScreenUpdating = False
Cells.EntireRow.Hidden = False
For i = 13 To 500
    If Cells(i, 3) Like " " Then
      Rows(i).EntireRow.Hidden = True
      Rows(i + 1).EntireRow.Hidden = True
   End If
 Next i

Selon ce que je lis, tu désires cacher certaines lignes en fonction du contenu de leur troisième cellule, et je ne comprends pas non plus l'utilisation de like " "

Bonjour Jacky,

Non ce code fait autre chose que ma demande, c'est juste qu'il est présent afin de masquer les lignes si la colonne C contient un espace ainsi que la ligne suivante.

Ma demande concerne le masquage de colonnes, mais c'est pour présenter le code présent sur la feuille lors du changement de sélection du filtre,

Je voudrais compléter celui ci avec la demande jointe du fichier,

Suis je plus clair ou pas du tout?

Cordialement,

OK, c'est bien compris

Maintenant, selon ta demande

Je travaille sur un Tcd mais pour l'affichage je souhaiterais modifier la largeur de certaines colonnes,

Pourquoi ne pas utiliser l'instructiion

Columns("E").ColumnWidth = 3

sous condiition ?

Bonsoir Jacky,

Parce que les colonnes à réduire sont variables et pas toujours placées au même endroit,

Sur mon fichier, il est indiqué que je souhaite :

réduire à 0,1 les colonnes ou l'on rencontre R, B ou P de la ligne 14 mais également la colonne suivante ces trois indications

Je pense qu'il faudrait donc parcourir toutes les colonnes de la cinquième à la dernière colonne qui serait définit comme ceci

dercol = Cells(16, Columns.Count).End(xlToLeft).Column

Et de les réduire si la cellule de la ligne 14 est différente de vide (mais également la colonne suivante)

Merci d'avance pour votre aide,

Cordialement,

bonjour masssari59264, salut Jacky,

Sub Cacher()
     Dim c, s
     With Sheets("Feuil1")
          With .UsedRange.EntireColumn
               .ColumnWidth = 5
               .AutoFit
          End With                           'montrer toutes les colonnes

          If WorksheetFunction.CountA(.Rows(14)) > 0 Then     'il y a des cellules non-vides dans la ligne 14
               For Each c In .Rows(14).SpecialCells(xlConstants)     'boucler ces cellules
                    Select Case c.Value
                         Case "R", "P", "B": s = s & "," & c.Resize(, 2).EntireColumn.Address(0, 0)     'ajouter cette colonne + colonne suivante à s
                    End Select
               Next

               s = Mid(s, 2)                 'supprimer la première virgule
               Do While Len(s) > 0           'boucler jusqu'au moment où tout est traité
                    i = InStrRev(s, ",", 255)     'dernière virgule avant position 255
                    s1 = Left(s, IIf(i = 0, Len(s), i - 1))     'cette partie de s
                    .Range(s1).EntireColumn.ColumnWidth = 0.1     'pseudo cacher ces colonnes = largeur à 0.1
                    If i > 0 Then s = Mid(s, i + 1) Else s = ""     'supprimer ce partie de s
               Loop
          End If
     End With
End Sub

Bonsoir BsAlv,

C'est parfait il va falloir que je m'y plonge pour en comprendre les subtilités et vous remercie pour les commentaires indiquées,

cependant comment pourrais-je intégrer à votre code celui ci :

     Dim i As Integer, dl As Integer

     Application.ScreenUpdating = False

     Cells.EntireRow.Hidden = False

     For i = 13 To 500

          If Cells(i, 3) Like " " Then

               Rows(i).EntireRow.Hidden = True
               Rows(i + 1).EntireRow.Hidden = True

          End If

     Next i

Je souhaiterai intégrer l'ensembe à une procédure événementielle : Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

Merci d'avance,

Cordialement,

bonjou, vous pouvez le faire comme ceci.

Si vous utilisez la plage "tablerange1", vous n'êtes pas obligé de parcourir toutes ces lignes et colonnes ...

Bonsoir BsAlv,

Merci c'est parfait, qu’entendez vous par si j'utilise la plage "tablerange1"?,

En fait il s'agit dans mon fichier de travail d'un TCD qu'on peut nommer tcd1,

Merci d'avance,

Cordialement,

re,

TCD1.tablerange1 est la plage du TCD (s'il n'a pas de champs de page).

Donc, si on connait cette plage, ce n'est plus nécessaire de'utiliser un loop de 13 à 500 pour les lignes et pareil pour les colonnes.

Bonsoir BsAlv,

Pourriez vous me proposer ce code ? Qu’avez vous besoin ?,

Merci d’avance,

Cordialement

re, sans fichier, pffffffffff ...

Mais vous pouvez aussi jouer avec les paramètres du TCD concernant ces lignes vides ...

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
     Dim i, c

     Application.ScreenUpdating = False
     With Target                             'le TCD modifié
          If StrComp(.Name, "TCD1", 1) = 0 Then     'le nom est correct

               With .TableRange1             'la plage du TCD
                    MsgBox "le Tablerange1 est " & .Address     'pour vous montrer la plage !
                    .EntireRow.Hidden = False     'montrer toutes les lignes et colonnes
                    .EntireColumn.Hidden = False
                    .EntireColumn.AutoFit
               End With

               With .RowRange                'cacher certaines lignes
                    MsgBox "le RowRange est " & .Address     'pour vous montrer la plage
                    For i = 1 To .Rows.Count
                         If .Cells(i, 1).Value = " " Then .Cells(i, 1).Resize(2).EntireRow.Hidden = True     'eventuellement cacher 2 lignes
                    Next i
               End With

               With .ColumnRange             'cacher certaines colonnes
                    MsgBox "le ColumnRange est " & .Address
                    For i = 1 To .Columns.Count
                         Select Case UCase(.Cells(2, i).Value)
                              Case "R", "P", "B": .Cells(2, i).Resize(, 2).EntireColumn.Hidden = True     'eventuellement cacher 2 colonnes
                         End Select
                    Next i
               End With

          End If
     End With
End Sub

Bonjour BsAlv,

Merci pour votre retour,

Par contre je ne souhaite pas masquer les colonnes définies mais mettre à 0,1 leur largeur,

Je teste votre code ce soir et reviendrai vers vous dés que je peux,

Merci pour tout,

Cordialement,

re

Case "R", "P", "B": .Cells(2, i).Resize(, 2).EntireColumn.Hidden = True

deviendra

Case "R", "P", "B": .Cells(2, i).Resize(, 2).EntireColumn.columnwidth=0.1

Bonsoir BsAlv,

Grâce a toutes les indications sur votre code, j'ai très facilement pu adapter celui ci à mon fichier de travail,

Merci pour tout,

Cordialement,

Rechercher des sujets similaires à "vba largeur colonnes"