événement lors du changement de largeur d'une colonne
Le
Jean-Claude

(Excel 2003)
Bonjour,
en VBA, existe-t-il un événement qui permette de détecter le changement de
largeur d'une colonne ?
Mon but est d'avoir un classeur dans lequel les colonnes A à H aient, au
total, une largeur fixée. Ainsi, si j'arrive à détecter le changement de
largeur d'une colonne, je peux recalculer les autres largeurs pour rester
sur le total fixé.
Il ne s'agit pas de verrouiller les colonnes (le pb général est un peu plus
compliqué, mais je le simplifie pour cette question). Ou une autre manière
que par les événements ?
J'ai cherché sur internet et dans l'aide Excel, mais en vain
Merci bien.
Jean-Claude
Bonjour,
en VBA, existe-t-il un événement qui permette de détecter le changement de
largeur d'une colonne ?
Mon but est d'avoir un classeur dans lequel les colonnes A à H aient, au
total, une largeur fixée. Ainsi, si j'arrive à détecter le changement de
largeur d'une colonne, je peux recalculer les autres largeurs pour rester
sur le total fixé.
Il ne s'agit pas de verrouiller les colonnes (le pb général est un peu plus
compliqué, mais je le simplifie pour cette question). Ou une autre manière
que par les événements ?
J'ai cherché sur internet et dans l'aide Excel, mais en vain
Merci bien.
Jean-Claude
Il n'existe aucun événement qui fait précisément ce que tu désires, mais
tu peux utiliser l'une ou l'autre ou les 2 procédures suivantes pour vérifier que la largeur
des colonnes n'excède pas celle déterminée par la valeur de la constante.
Tu insères le code dans le module Feuille où l'action se déroule.
'Dans le haut du module
Const LargeurDesColonnes = 400
'-------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("A1:H1").Width > LargeurDesColonnes Then
'procédure de redimensionnement des colonnes
End If
End Sub
'-------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A1:H1").Width > LargeurDesColonnes Then
'procédure de redimensionnement des colonnes
End If
End Sub
'-------------------------------------
MichD
--------------------------------------------
"Jean-Claude" a écrit dans le message de groupe de discussion : 4e4a5059$0$18778$
(Excel 2003)
Bonjour,
en VBA, existe-t-il un événement qui permette de détecter le changement de
largeur d'une colonne ?
Mon but est d'avoir un classeur dans lequel les colonnes A à H aient, au
total, une largeur fixée. Ainsi, si j'arrive à détecter le changement de
largeur d'une colonne, je peux recalculer les autres largeurs pour rester
sur le total fixé.
Il ne s'agit pas de verrouiller les colonnes (le pb général est un peu plus
compliqué, mais je le simplifie pour cette question). Ou une autre manière
que par les événements ?
J'ai cherché sur internet et dans l'aide Excel, mais en vain...
Merci bien.
Jean-Claude
j'avais déjà essayé cette solution, mais elle n'est valable que si on change
la sélection ou si on modifie une cellule.
Si je me contente de changer la largeur d'une colonne, cela ne déclenche pas
ces 2 événements.
Ou peut-être gérer un timer pour vérifier les largeurs de colonnes toutes
les 1/2 seconde ?
Pour être plus précis, je cherche à transformer automatiquement le contenu
d'un classeur en fond d'écran (avec adresses, mails, téléphones de
correspondants habituels et autres infos) de la manière suivante :
- utiliser le CopyPicture pour générer une image de la taille de l'écran (je
sais faire)
- la sauvegarder sous forme d'un fichier bmp (je sais faire)
- gérer la bordure de 1 pixel générée à tort (je sais faire)
- la mettre en fond d'écran (je sais faire)
Mais l'idéal est que la zone du CopyPicture ait la même taille que l'écran
(je sais gérer les tailles points/pixels).
Donc je cherche, lorsqu'on change la taille d'une colonne, à caler la
dernière colonne sur la bonne taille.
Jean-Claude
Cependant, tu peux créer un processus sans fin qui vérifie à chaque x secondes la largeur totale
d'une plage de cellule. Pour ce faire, emploie la méthode OnTime de l'objet Application
Par exemple, tu utilises l'événement "Workbook_Open" dans le ThisWorkbook pour lancer la
procédure Test qui à son tour va lancer la procédure "Largeur_Colonne". Cela va former une
boucle qui va s'exécuter dès l'ouverture du fichier jusqu'à la fermeture de ce dernier...
Tu as un exemple complet de la méthode sur le site internet de Chip Pearson
http://www.cpearson.com/excel/OnTime.aspx
À mettre dans un module standard :
'----------------------------
Sub test()
Application.OnTime Now + (TimeValue("00:00:01") / 2), "Largeur_Colonne"
End Sub
'------------------------------------
Sub Largeur_Colonne()
'Code de vérification de la largeur des cellules
Call Test
End Sub
'------------------------------------
MichD
--------------------------------------------
"Jean-Claude" a écrit dans le message de groupe de discussion : 4e4a93d6$0$30781$
Merci,
j'avais déjà essayé cette solution, mais elle n'est valable que si on change
la sélection ou si on modifie une cellule.
Si je me contente de changer la largeur d'une colonne, cela ne déclenche pas
ces 2 événements.
Ou peut-être gérer un timer pour vérifier les largeurs de colonnes toutes
les 1/2 seconde ?
Pour être plus précis, je cherche à transformer automatiquement le contenu
d'un classeur en fond d'écran (avec adresses, mails, téléphones de
correspondants habituels et autres infos) de la manière suivante :
- utiliser le CopyPicture pour générer une image de la taille de l'écran (je
sais faire)
- la sauvegarder sous forme d'un fichier bmp (je sais faire)
- gérer la bordure de 1 pixel générée à tort (je sais faire)
- la mettre en fond d'écran (je sais faire)
Mais l'idéal est que la zone du CopyPicture ait la même taille que l'écran
(je sais gérer les tailles points/pixels).
Donc je cherche, lorsqu'on change la taille d'une colonne, à caler la
dernière colonne sur la bonne taille.
Jean-Claude
Tu appelles cette procédure avec l'événement "Workbook_open" dans le Thisworkbook
Dans le haut du module standard, déclaration de la variable
Dim Arrêt As Boolean
'-------------------------
Sub Largeur_Colonne()
Dim T As Double
T = Timer + 1 / 2
Do While Timer <= T
DoEvents
If Arrêt = True then Exit sub
' Appel du code largeur des cellules
Loop
End Sub
'------------------------------
Sub Largeur_Cellules()
'ton code
End Sub
'-------------------------------
Et tu utilises la procédure événementielle suivante du ThisWorkbook
pour arrêter l'exécution de la procédure et fermer le classeur
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Arrêt = True
End Sub
'-------------------------
MichD
--------------------------------------------
"Jean-Claude" a écrit dans le message de groupe de discussion : 4e4a93d6$0$30781$
Merci,
j'avais déjà essayé cette solution, mais elle n'est valable que si on change
la sélection ou si on modifie une cellule.
Si je me contente de changer la largeur d'une colonne, cela ne déclenche pas
ces 2 événements.
Ou peut-être gérer un timer pour vérifier les largeurs de colonnes toutes
les 1/2 seconde ?
Pour être plus précis, je cherche à transformer automatiquement le contenu
d'un classeur en fond d'écran (avec adresses, mails, téléphones de
correspondants habituels et autres infos) de la manière suivante :
- utiliser le CopyPicture pour générer une image de la taille de l'écran (je
sais faire)
- la sauvegarder sous forme d'un fichier bmp (je sais faire)
- gérer la bordure de 1 pixel générée à tort (je sais faire)
- la mettre en fond d'écran (je sais faire)
Mais l'idéal est que la zone du CopyPicture ait la même taille que l'écran
(je sais gérer les tailles points/pixels).
Donc je cherche, lorsqu'on change la taille d'une colonne, à caler la
dernière colonne sur la bonne taille.
Jean-Claude
Jean-Claude
'---------------------------------
Sub Largeur_Colonne()
Dim T As Double
Do While Arrêt = False
T = Timer + 1 / 2
Do While Timer <= T
DoEvents
If Arrêt = True Then Exit Sub
Loop
' Appel du code largeur des cellules
Call Largeur_Cellules
Loop
End Sub
'---------------------------------
MichD
--------------------------------------------