Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Toutes les lignes à la même taille

14 réponses
Avatar
alain Lebayle
Bonjour,
J'ai cette procédure qui fait planter le programme.
Je vous remercie de me donner un coup de main, je ne vois pas le pb
Merci
Alain

Sub Les_lignes()
Application.ScreenUpdating = False
Sheets("Travail").Unprotect Password:="toto"
Set plage = Range("A3:AD2000")
For Each C In plage
C.EntireRow.AutoFit
If C.RowHeight > 42.75 Then
Else
C.RowHeight = 42.75
End If
Next
Sheets("Travail").Unprotect Password:="toto"
Application.ScreenUpdating = True
End Sub

--

10 réponses

1 2
Avatar
FFO
Salut alain

Ce code fonctionne parfaitement chez moi
Peut être un problème de données
As tu essayé dabord sur un classeur tout neuf avec un onglet vierge
puis en intégrant tes données par morceaux pour cerner celles éventuellement
qui pourraient être à l'origine de ton plantage ????

Tiens moi informé !!!!!
Avatar
LSteph
Bonjour,
pourquoi ce else ainsi sans rien dans then d'autant que si j'ai bien
compris:

Dim c As Range
[a1:a2000].EntireRow.AutoFit
For Each c In [a1:a2000].Cells
If c.RowHeight > 42.75 Then c.RowHeight = 42.75
Next


'lSteph



alain Lebayle a écrit :
Bonjour,
J'ai cette procédure qui fait planter le programme.
Je vous remercie de me donner un coup de main, je ne vois pas le pb
Merci
Alain

Sub Les_lignes()
Application.ScreenUpdating = False
Sheets("Travail").Unprotect Password:="toto"
Set plage = Range("A3:AD2000")
For Each C In plage
C.EntireRow.AutoFit
If C.RowHeight > 42.75 Then
Else
C.RowHeight = 42.75
End If
Next
Sheets("Travail").Unprotect Password:="toto"
Application.ScreenUpdating = True
End Sub



Avatar
LSteph
Re, Alain et FFO,
...je viens de regarder qu'en fait tu vas de A à AD
..de plus même si le code ...fonctionne ;o))
, il faut voir ce qu'il fait
soit ratisser toute les colonnes de chaque ligne pour finalement
conserver la hauteur
que les règles en définissent pour la dernière cellule
ainsi seul AD impacte le résultat obtenu

Pour établir la moulinette sur une seule colonne ce que j'ai
précédemment indiqué est plus direct.

Pour faire ce que tu sembles vouloir il faudrait tester
laquelle des colonnes pour chaque ligne contient la chaine de caractères
la plus longue
puis ajuster par rapport à celle ci.

je dois partir je regarde ca plus tard..sauf si quelqu'un s'en est
chargé ;-)

--
lSteph

alain Lebayle a écrit :
Bonjour,
J'ai cette procédure qui fait planter le programme.
Je vous remercie de me donner un coup de main, je ne vois pas le pb
Merci
Alain

Sub Les_lignes()
Application.ScreenUpdating = False
Sheets("Travail").Unprotect Password:="toto"
Set plage = Range("A3:AD2000")
For Each C In plage
C.EntireRow.AutoFit
If C.RowHeight > 42.75 Then
Else
C.RowHeight = 42.75
End If
Next
Sheets("Travail").Unprotect Password:="toto"
Application.ScreenUpdating = True
End Sub



Avatar
pb
Comme cela peut-être
Sub Les_lignes()
Application.ScreenUpdating = False
Sheets("Travail").Unprotect Password:="toto"
Set Plage = Range("A3:AD2000")
For Each c In Plage
If c.RowHeight > 42.75 Then c.RowHeight = 42.75
Next
End Sub
Chez moi cela fonctionne
Pascal

"alain Lebayle" a écrit dans le message de
news: 4a56e86e$0$291$
Bonjour,
J'ai cette procédure qui fait planter le programme.
Je vous remercie de me donner un coup de main, je ne vois pas le pb
Merci
Alain

Sub Les_lignes()
Application.ScreenUpdating = False
Sheets("Travail").Unprotect Password:="toto"
Set plage = Range("A3:AD2000")
For Each C In plage
C.EntireRow.AutoFit
If C.RowHeight > 42.75 Then
Else
C.RowHeight = 42.75
End If
Next
Sheets("Travail").Unprotect Password:="toto"
Application.ScreenUpdating = True
End Sub

--






Avatar
Gloops
Bonjour,

Comme ça au premier coup d'œil, la seule erreur que je voie est que l a
protection est retirée deux fois, une fois au début et une fois à l a
fin. Pas moyen d'essayer avec une pause juste avant pour vérifier où se
produit l'erreur ?

A part ça il devrait y avoir moyen effectivement d'optimiser comme le
note discrètement LSteph, puisque si on traite chaque cellule de la
plage A3:AD2000 pour rectifier la hauteur de la ligne, chaque ligne est
traitée cent quatre fois. Au bout d'une fois ou deux, si la correction
n'est pas faite, c'est qu'il y a un truc qui coince, non ?
____________________________________________
alain Lebayle a écrit, le 10/07/2009 09:06 :
Bonjour,
J'ai cette procédure qui fait planter le programme.
Je vous remercie de me donner un coup de main, je ne vois pas le pb
Merci
Alain

Sub Les_lignes()
Application.ScreenUpdating = False
Sheets("Travail").Unprotect Password:="toto"
Set plage = Range("A3:AD2000")
For Each C In plage
C.EntireRow.AutoFit
If C.RowHeight > 42.75 Then
Else
C.RowHeight = 42.75
End If
Next
Sheets("Travail").Unprotect Password:="toto"
Application.ScreenUpdating = True
End Sub



Avatar
LSteph
..donc plus simplement:

Dim i As Long
[a1:ad2000].Rows.EntireRow.AutoFit
For i = 1 To 2000
If Rows(i).RowHeight > 42.75 Then _
Rows(i).RowHeight = 42.75
Next

'lSteph


On 10 juil, 09:35, LSteph wrote:
Re, Alain et FFO,
...je viens de regarder qu'en fait tu vas de A à AD
..de plus même si le code ...fonctionne ;o))
, il faut voir ce qu'il fait
soit ratisser toute les colonnes de chaque ligne pour finalement
conserver la hauteur
que les règles en définissent pour la dernière cellule
ainsi seul AD impacte le résultat obtenu

Pour établir la moulinette sur une seule colonne ce que j'ai
précédemment indiqué est plus direct.

Pour faire ce que tu sembles vouloir il faudrait tester
laquelle des colonnes pour chaque ligne contient la chaine de caractère s
la plus longue
puis ajuster par rapport à celle ci.

je dois partir je regarde ca plus tard..sauf si quelqu'un s'en est
chargé ;-)

--
lSteph

alain Lebayle a écrit :



> Bonjour,
> J'ai cette procédure qui fait planter le programme.
> Je vous remercie de me donner un coup de main, je ne vois pas le pb
> Merci
> Alain

> Sub Les_lignes()
> Application.ScreenUpdating = False
>  Sheets("Travail").Unprotect Password:="toto"
>  Set plage = Range("A3:AD2000")
> For Each C In plage
>   C.EntireRow.AutoFit
>   If C.RowHeight > 42.75 Then
>   Else
>    C.RowHeight = 42.75
>   End If
> Next
>  Sheets("Travail").Unprotect Password:="toto"
>  Application.ScreenUpdating = True
> End Sub- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
LSteph
Bonjour,

Pour la protection j'ai vu que c'était gèré avant après, je n'ai
volontairement donc donné d'indication (à adapter) que sur la question
posée sur les lignes
et dont tu as bien relevé le souci ..donc cela peut se règler selon
les 5 petites lignes indiquées.

Mais puisque cette question est abordée on peut rendre plus pratique
l'usage des macros en sévitant déprotection reprotection au sein de
chacune
il suffit d'envisager la protection dans le Workbook_open
en mettant userinterfaceonly à true

exemple ici pour toutes les feuilles:

'dans le thisworkbook du classeur


Private Sub Workbook_open()
Dim sh as worksheet
For each sh in thisworkbook
sh.protect password:="toto", userinterfaceonly:=true
next
end sub


'pour tester fermer et rouvrir le classeur


'lSteph


On 10 juil, 10:21, Gloops wrote:
Bonjour,

Comme ça au premier coup d'œil, la seule erreur que je voie est que l a
protection est retirée deux fois, une fois au début et une fois à l a
fin. Pas moyen d'essayer avec une pause juste avant pour vérifier où se
produit l'erreur ?

A part ça il devrait y avoir moyen effectivement d'optimiser comme le
note discrètement LSteph, puisque si on traite chaque cellule de la
plage A3:AD2000 pour rectifier la hauteur de la ligne, chaque ligne est
traitée cent quatre fois. Au bout d'une fois ou deux, si la correction
n'est pas faite, c'est qu'il y a un truc qui coince, non ?
____________________________________________
alain Lebayle a écrit, le 10/07/2009 09:06 :



> Bonjour,
> J'ai cette procédure qui fait planter le programme.
> Je vous remercie de me donner un coup de main, je ne vois pas le pb
> Merci
> Alain

> Sub Les_lignes()
> Application.ScreenUpdating = False
>  Sheets("Travail").Unprotect Password:="toto"
>  Set plage = Range("A3:AD2000")
> For Each C In plage
>   C.EntireRow.AutoFit
>   If C.RowHeight > 42.75 Then
>   Else
>    C.RowHeight = 42.75
>   End If
> Next
>  Sheets("Travail").Unprotect Password:="toto"
>  Application.ScreenUpdating = True
> End Sub- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
LSteph
...
Au bout d'une fois ou deux ...non plus


on peut pâaaasser ainsi chaque cellule si la dernière AD est bien plus
haute ou petite, c'est elle qui emportera le bout de gras
DONC ... Non je ne cherchais paz à être discret ;o) lol
il suffit de mettre l'autofit pour les lignesz entière avant de
bouclerpuis detraiter chaque ligne pour vérifier qu'elle n'excède pas
42.75

Dim c As Range
[a1:a2000].EntireRow.AutoFit
For Each c In [a1:a2000].Cells
If c.RowHeight > 42.75 Then c.RowHeight = 42.75
Next


'@+

'lSteph

A part ça il devrait y avoir moyen effectivement d'optimiser comme le
note discrètement LSteph, puisque si on traite chaque cellule de la
plage A3:AD2000 pour rectifier la hauteur de la ligne, chaque ligne est
traitée cent quatre fois. Au bout d'une fois ou deux, si la correction
n'est pas faite, c'est qu'il y a un truc qui coince, non ?
____________________________________________
alain Lebayle a écrit, le 10/07/2009 09:06 :



> Bonjour,
> J'ai cette procédure qui fait planter le programme.
> Je vous remercie de me donner un coup de main, je ne vois pas le pb
> Merci
> Alain

> Sub Les_lignes()
> Application.ScreenUpdating = False
>  Sheets("Travail").Unprotect Password:="toto"
>  Set plage = Range("A3:AD2000")
> For Each C In plage
>   C.EntireRow.AutoFit
>   If C.RowHeight > 42.75 Then
>   Else
>    C.RowHeight = 42.75
>   End If
> Next
>  Sheets("Travail").Unprotect Password:="toto"
>  Application.ScreenUpdating = True
> End Sub- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
LSteph
...Oupss
le bon c'est celui là

Dim i As Long
[a1:ad2000].Rows.EntireRow.AutoFit
For i = 1 To 2000
If Rows(i).RowHeight > 42.75 Then _
Rows(i).RowHeight = 42.75
Next




n 10 juil, 11:10, LSteph wrote:
...> Au bout d'une fois ou deux ...non plus

on peut pâaaasser ainsi chaque cellule si la dernière AD est bien plu s
haute ou petite, c'est elle qui emportera le bout de gras
DONC ... Non je ne cherchais paz à être discret ;o) lol
il suffit de mettre l'autofit pour les lignesz entière avant de
bouclerpuis detraiter chaque ligne pour vérifier qu'elle n'excède pas
42.75

Dim c As Range
[a1:a2000].EntireRow.AutoFit
For Each c In [a1:a2000].Cells
If c.RowHeight > 42.75 Then c.RowHeight = 42.75
Next

'@+

'lSteph



> A part ça il devrait y avoir moyen effectivement d'optimiser comme le
> note discrètement LSteph, puisque si on traite chaque cellule de la
> plage A3:AD2000 pour rectifier la hauteur de la ligne, chaque ligne est
> traitée cent quatre fois. Au bout d'une fois ou deux, si la correctio n
> n'est pas faite, c'est qu'il y a un truc qui coince, non ?
> ____________________________________________
> alain Lebayle a écrit, le 10/07/2009 09:06 :

> > Bonjour,
> > J'ai cette procédure qui fait planter le programme.
> > Je vous remercie de me donner un coup de main, je ne vois pas le pb
> > Merci
> > Alain

> > Sub Les_lignes()
> > Application.ScreenUpdating = False
> >  Sheets("Travail").Unprotect Password:="toto"
> >  Set plage = Range("A3:AD2000")
> > For Each C In plage
> >   C.EntireRow.AutoFit
> >   If C.RowHeight > 42.75 Then
> >   Else
> >    C.RowHeight = 42.75
> >   End If
> > Next
> >  Sheets("Travail").Unprotect Password:="toto"
> >  Application.ScreenUpdating = True
> > End Sub- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
garnote
Ave Stéphane,

Là j'ai besoin de tes lumières.
Si j'utilise cette instruction :
ActiveSheet.Protect , userinterfaceonly:=True
la feuille active est protégée mais peut être
modifiée par macro. Est-ce bien cela ?
Si c'est le cas, comment se fait-il que je ne peux
pas pas sélectionner une forme automatique par macro ?

Petite remarque :
Quand je vais dans l'aide 2007 pour la méthode WorkSheet.Protect,
les noms des paramètres de la méthode sont écrits exclusivement en français,
ce qui n'est guère pratique quand on veut les utiliser dans une macro !

Et une tite macro qui ne sert à rien. Viens de la retrouver dans mes anciens
documents, mias peut-être l'ai déjà publiée.

Sub Yi_King()
Dim i%, j%, k%, l%, m%, n%
Dim c%, col%, lig%, p%
With Application
.ScreenUpdating = False: .DisplayFullScreen = True
End With
Sheets.Add
With ActiveWindow
.DisplayGridlines = False: .DisplayHeadings = False
End With
With Cells
.ColumnWidth = 2: .RowHeight = 4
End With
Rows(4).RowHeight = 12
For i = 21 To 105 Step 14
Rows(i).RowHeight = 10
Next i
For i = 5 To 31 Step 4
Columns(i).ColumnWidth = 4
Next i
For i = 0 To 1: For j = 0 To 1
For k = 0 To 1: For l = 0 To 1
For m = 0 To 1: For n = 0 To 1
c = c + 1
col = (4 * c - 1) Mod 32
lig = 14 * Application.RoundUp(c / 8, 0) - 5
Cells(lig, col).Interior.ColorIndex = i
Cells(lig + 2, col).Interior.ColorIndex = j
Cells(lig + 4, col).Interior.ColorIndex = k
Cells(lig + 6, col).Interior.ColorIndex = l
Cells(lig + 8, col).Interior.ColorIndex = m
Cells(lig + 10, col).Interior.ColorIndex = n
For p = 0 To 10 Step 2
Cells(lig + p, col - 1).Interior.ColorIndex = 1
Cells(lig + p, col + 1).Interior.ColorIndex = 1
Next p
Next: Next: Next: Next: Next: Next
End Sub


A+
Serge



"LSteph" a écrit dans le message de news:

Bonjour,

Pour la protection j'ai vu que c'était gèré avant après, je n'ai
volontairement donc donné d'indication (à adapter) que sur la question
posée sur les lignes
et dont tu as bien relevé le souci ..donc cela peut se règler selon
les 5 petites lignes indiquées.

Mais puisque cette question est abordée on peut rendre plus pratique
l'usage des macros en sévitant déprotection reprotection au sein de
chacune
il suffit d'envisager la protection dans le Workbook_open
en mettant userinterfaceonly à true

exemple ici pour toutes les feuilles:

'dans le thisworkbook du classeur


Private Sub Workbook_open()
Dim sh as worksheet
For each sh in thisworkbook
sh.protect password:="toto", userinterfaceonly:=true
next
end sub


'pour tester fermer et rouvrir le classeur


'lSteph


On 10 juil, 10:21, Gloops wrote:
Bonjour,

Comme ça au premier coup d'œil, la seule erreur que je voie est que la
protection est retirée deux fois, une fois au début et une fois à la
fin. Pas moyen d'essayer avec une pause juste avant pour vérifier où se
produit l'erreur ?

A part ça il devrait y avoir moyen effectivement d'optimiser comme le
note discrètement LSteph, puisque si on traite chaque cellule de la
plage A3:AD2000 pour rectifier la hauteur de la ligne, chaque ligne est
traitée cent quatre fois. Au bout d'une fois ou deux, si la correction
n'est pas faite, c'est qu'il y a un truc qui coince, non ?
____________________________________________
alain Lebayle a écrit, le 10/07/2009 09:06 :



> Bonjour,
> J'ai cette procédure qui fait planter le programme.
> Je vous remercie de me donner un coup de main, je ne vois pas le pb
> Merci
> Alain

> Sub Les_lignes()
> Application.ScreenUpdating = False
> Sheets("Travail").Unprotect Password:="toto"
> Set plage = Range("A3:AD2000")
> For Each C In plage
> C.EntireRow.AutoFit
> If C.RowHeight > 42.75 Then
> Else
> C.RowHeight = 42.75
> End If
> Next
> Sheets("Travail").Unprotect Password:="toto"
> Application.ScreenUpdating = True
> End Sub- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


1 2