événement lors du changement de largeur d'une colonne
6 réponses
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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Bonjour 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
Bonjour 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$ba4acef3@reader.news.orange.fr...
(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...
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
Jean-Claude
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
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.
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
MichD
Il n'existe aucune procédure événementielle qui réagit à la modification d'une largeur de colonne.
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...
'---------------------------- 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
Il n'existe aucune procédure événementielle qui réagit à la modification d'une largeur de colonne.
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$ba4acef3@reader.news.orange.fr...
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.
Il n'existe aucune procédure événementielle qui réagit à la modification d'une largeur de colonne.
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...
'---------------------------- 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
MichD
Une autre approche :
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
Une autre approche :
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$ba4acef3@reader.news.orange.fr...
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.
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
Merci bien pour ces précisions, cela va m'éviter de chercher :-)) Jean-Claude
Merci bien pour ces précisions, cela va m'éviter de chercher :-))
Jean-Claude
Merci bien pour ces précisions, cela va m'éviter de chercher :-)) Jean-Claude
MichD
Cette section devrait plutôt se lire comme suit pour exécuter la procédure à chaque .5 seconde
'--------------------------------- 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 '---------------------------------
Cette section devrait plutôt se lire comme suit pour exécuter la procédure à chaque .5 seconde
'---------------------------------
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
'---------------------------------
Cette section devrait plutôt se lire comme suit pour exécuter la procédure à chaque .5 seconde
'--------------------------------- 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 '---------------------------------