Microsoft 365 Largeur de colonne automatique selon le contenu des cellules

Exceluser2022

XLDnaute Nouveau
Bonjour à vous tous;
bonne année 2023
je desire faire un code vba pour ajuster la largeur d'une colonne selon le contenu de l'une des cellules. Mon code marche seulement pour la derniere ligne c3 que j'ai choisis comme exemple. En effet une fois une des cellules de range("a1:c3") est non nulle la largeur doit etre 18 mais une fois elle est vide elle doit revenir à la taille 8. ca marche seulement dans la ligne 3:
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
 Application.EnableEvents = False
Application.ScreenUpdating = False

Dim rg As Range
Set rg = Range("a1:c3")
For Each c In rg

If c.Value <> "" Then
           
            c.ColumnWidth = 18
 

 
ElseIf c.Value = "" Then

   c.ColumnWidth = 8

 
End If
Next
   Application.EnableEvents = True
Application.ScreenUpdating = True


End Sub
avez-vous une idée
merci d'avance
 
Dernière édition:
Solution
avec ceci.. tout simplement..?
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.ScreenUpdating = False

Dim rg As Range
Set rg = Range("a1:c3")

For Each c In rg.Columns 'pour chaque colonne de la range
    'c.Select
    If WorksheetFunction.CountA(c) <> 0 Then 'on compte le nombre de cellule NON vide
        c.ColumnWidth = 18
    Else
        c.ColumnWidth = 8
    End If
Next c
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Exceluser2022

XLDnaute Nouveau
Bonjour

tu as effectivement l'impression que ca ne marche que pour la ligne 3
en fait

ca marche pour toutes les lignes.. mais ce qui est fait pour les lignes 1 et 2 est écrasé par la ce qui est appliqué pour la ligne 3

pourquoi ne pas utiliser l'autofit??
autofit garde la derniere largeur de la cellule une fois vide: une fois une donnée est entrée la largeur s'adapte automatiquement, mais une fois vide elle garde la derniere largeur au lieu de revenir par exemple à 8
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Re

As tu activé les macros ?

Car avec mon fichier
Etape par étape

1)
1675177333774.png

2)
1675177368535.png

3)
1675177400245.png

4)Et cela donne
1675177449318.png


@Phil69970
 

Exceluser2022

XLDnaute Nouveau
maintenant ca bouge, je vois les changements. Cependant: si range("a1") est non vide et range("a3") est aussi non vide puis je vide range("a1") la largeur de la cellule revient à 8 alors elle devrait rester à 18 puisque a1 et a3 c'Est la meme colonne et a3 et non vide
 

Phil69970

XLDnaute Barbatruc
Re

Donc avec le même fichier ce qui ne marchait pas marche ! :oops:

Pour ce que tu décris il faut faire un choix si dans une colonne A par exemple :
-En A1 un mot d'une largeur de 15
-Et en A3 un mot d'une largeur de 10
puis tu retournes en A1 et tu effaces la cellule A1 (reste toujours A3 de 10 de large)

Quel résultat tu veux ?

@Phil69970
 

Exceluser2022

XLDnaute Nouveau
Re

Donc avec le même fichier ce qui ne marchait pas marche ! :oops:

Pour ce que tu décris il faut faire un choix si dans une colonne A par exemple :
-En A1 un mot d'une largeur de 15
-Et en A3 un mot d'une largeur de 10
puis tu retournes en A1 et tu effaces la cellule A1 (reste toujours A3 de 10 de large)

Quel résultat tu veux ?

@Phil69970
si on efface a1 il faut que ca reste 15 car a3 est non vide
 

vgendron

XLDnaute Barbatruc
avec ceci.. tout simplement..?
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.ScreenUpdating = False

Dim rg As Range
Set rg = Range("a1:c3")

For Each c In rg.Columns 'pour chaque colonne de la range
    'c.Select
    If WorksheetFunction.CountA(c) <> 0 Then 'on compte le nombre de cellule NON vide
        c.ColumnWidth = 18
    Else
        c.ColumnWidth = 8
    End If
Next c
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 036
Messages
2 084 812
Membres
102 676
dernier inscrit
LN6