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

Problèmes de versions

7 réponses
Avatar
JLuc
Bonsoir les lecteurs,

Pour un planning, j'utilise un rectangle de couleur rouge de hauteur 1
pour me repérer. J'ai créé cette macro avec l'aide de quelques uns sur
ce forum et vous en reremercie.
Malheureusement, je travaille à 95% sur excel 2000.
Lorsque je dois ouvrir ce fichier sur excel 2003 voir excel 2007, ma
macro fonctionne mal.
Est ce que l'un de vous pourrais me donner une piste pour gérer les
versions et faire en sorte que ma macro fonctionne correctement sur
toutes les versions ?
le but est d'afficher ce rectangle au milieu de la ligne active et du
début de la colonne 2 à la fin de la colonne 251

Merci pour vos reponses

voilà le code


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Largeur entre la cellule active et la première colonne
PosHorizontal = Cells(Target.Row, 2).Left

' Position verticale sur ligne 2 ou plus
PosHaut = Application.WorksheetFunction.Max((Cells(Target.Row, 2).Top +
(Cells(Target.Row, 2).Height / 2)), _
(Cells(2, 5).Top + (Cells(2, 5).Height / 2)))

' longueur de la ligne
longueur = Cells(1, 253).Left - Cells(1, 2).Left

' Teste si l'index existe déjà. Dans ce cas, on l'efface.
' On utilise ici On Error Resume Next, qui permet de tester l'erreur
On Error Resume Next
ActiveSheet.Shapes("IndeX").Delete


' Ajoute une ligne en fonction des coordonnées précédemment calculées.
' La ligne est transparente, de grosseur 1 et de couleur rouge (10)
' On ne peut pas l'imprimer.
ActiveSheet.Shapes.AddShape(msoShapeRectangle, PosHorizontal, PosHaut,
longueur, 1).Name = "IndeX"

With ActiveSheet.Shapes("IndeX")
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 1#
.Line.ForeColor.SchemeColor = 10
.PrintObject = False
End With

End Sub

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-\O

7 réponses

Avatar
michdenis
La macro qui suit (celle que tu as publiée) fait le travail.
c'est quoi son problème ?



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Largeur entre la cellule active et la première colonne
PosHorizontal = Cells(Target.Row, 2).Left

' Position verticale sur ligne 2 ou plus
PosHaut = Application.WorksheetFunction.Max((Cells(Target.Row, 2).Top + _
(Cells(Target.Row, 2).Height / 2)), _
(Cells(2, 5).Top + (Cells(2, 5).Height / 2)))

' longueur de la ligne
longueur = Cells(1, 253).Left - Cells(1, 2).Left

' Teste si l'index existe déjà. Dans ce cas, on l'efface.
' On utilise ici On Error Resume Next, qui permet de tester l'erreur
On Error Resume Next
ActiveSheet.Shapes("IndeX").Delete


' Ajoute une ligne en fonction des coordonnées précédemment calculées.
' La ligne est transparente, de grosseur 1 et de couleur rouge (10)
' On ne peut pas l'imprimer.
Feuil1.Shapes.AddShape(msoShapeRectangle, PosHorizontal, PosHaut, _
longueur, 1).Name = "IndeX"

With ActiveSheet.Shapes("IndeX")
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 1#
.Line.ForeColor.SchemeColor = 10
.PrintObject = False
End With

End Sub
Avatar
JLuc
*Bonjour michdenis*,

Mon soucis, c'est que la macro fait le travail avec excel 2000, mais
mal avec excel 2003 et excel 2007.
Comme je connais pas trop les différences sur les version 2003 et 2007,
j'aurais aimer un peu d'aide :)

Merci d'avance si tu peux au moins m'aiguiller.

JLuc

La macro qui suit (celle que tu as publiée) fait le travail.
c'est quoi son problème ?



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Largeur entre la cellule active et la première colonne
PosHorizontal = Cells(Target.Row, 2).Left

' Position verticale sur ligne 2 ou plus
PosHaut = Application.WorksheetFunction.Max((Cells(Target.Row, 2).Top + _
(Cells(Target.Row, 2).Height / 2)), _
(Cells(2, 5).Top + (Cells(2, 5).Height / 2)))

' longueur de la ligne
longueur = Cells(1, 253).Left - Cells(1, 2).Left

' Teste si l'index existe déjà. Dans ce cas, on l'efface.
' On utilise ici On Error Resume Next, qui permet de tester l'erreur
On Error Resume Next
ActiveSheet.Shapes("IndeX").Delete


' Ajoute une ligne en fonction des coordonnées précédemment calculées.
' La ligne est transparente, de grosseur 1 et de couleur rouge (10)
' On ne peut pas l'imprimer.
Feuil1.Shapes.AddShape(msoShapeRectangle, PosHorizontal, PosHaut, _
longueur, 1).Name = "IndeX"

With ActiveSheet.Shapes("IndeX")
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 1#
.Line.ForeColor.SchemeColor = 10
.PrintObject = False
End With

End Sub



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
michdenis
Je l'ai testé sous excel 2007, et, elle fait exactement ce que tu dis.

P.S. dans mon message précédent, je t'ai retourné la macro, mais
en un endroit, j'ai modifié ActiveSheet par Feuil1... il faudrait
apporter la modification le cas échéant.


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

*Bonjour michdenis*,

Mon soucis, c'est que la macro fait le travail avec excel 2000, mais
mal avec excel 2003 et excel 2007.
Comme je connais pas trop les différences sur les version 2003 et 2007,
j'aurais aimer un peu d'aide :)

Merci d'avance si tu peux au moins m'aiguiller.

JLuc

La macro qui suit (celle que tu as publiée) fait le travail.
c'est quoi son problème ?



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Largeur entre la cellule active et la première colonne
PosHorizontal = Cells(Target.Row, 2).Left

' Position verticale sur ligne 2 ou plus
PosHaut = Application.WorksheetFunction.Max((Cells(Target.Row, 2).Top + _
(Cells(Target.Row, 2).Height / 2)), _
(Cells(2, 5).Top + (Cells(2, 5).Height / 2)))

' longueur de la ligne
longueur = Cells(1, 253).Left - Cells(1, 2).Left

' Teste si l'index existe déjà. Dans ce cas, on l'efface.
' On utilise ici On Error Resume Next, qui permet de tester l'erreur
On Error Resume Next
ActiveSheet.Shapes("IndeX").Delete


' Ajoute une ligne en fonction des coordonnées précédemment calculées.
' La ligne est transparente, de grosseur 1 et de couleur rouge (10)
' On ne peut pas l'imprimer.
Feuil1.Shapes.AddShape(msoShapeRectangle, PosHorizontal, PosHaut, _
longueur, 1).Name = "IndeX"

With ActiveSheet.Shapes("IndeX")
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 1#
.Line.ForeColor.SchemeColor = 10
.PrintObject = False
End With

End Sub



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
JLuc
*ReBonjour michdenis*,
Là, tu me surprends 8-o
Au travail, elle marche pas comme sous excel 2000 !!
Une option quelconque ?

Je l'ai testé sous excel 2007, et, elle fait exactement ce que tu dis.

P.S. dans mon message précédent, je t'ai retourné la macro, mais
en un endroit, j'ai modifié ActiveSheet par Feuil1... il faudrait
apporter la modification le cas échéant.


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

*Bonjour michdenis*,

Mon soucis, c'est que la macro fait le travail avec excel 2000, mais
mal avec excel 2003 et excel 2007.
Comme je connais pas trop les différences sur les version 2003 et 2007,
j'aurais aimer un peu d'aide :)

Merci d'avance si tu peux au moins m'aiguiller.

JLuc

La macro qui suit (celle que tu as publiée) fait le travail.
c'est quoi son problème ?



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Largeur entre la cellule active et la première colonne
PosHorizontal = Cells(Target.Row, 2).Left

' Position verticale sur ligne 2 ou plus
PosHaut = Application.WorksheetFunction.Max((Cells(Target.Row, 2).Top + _
(Cells(Target.Row, 2).Height / 2)), _
(Cells(2, 5).Top + (Cells(2, 5).Height / 2)))

' longueur de la ligne
longueur = Cells(1, 253).Left - Cells(1, 2).Left

' Teste si l'index existe déjà. Dans ce cas, on l'efface.
' On utilise ici On Error Resume Next, qui permet de tester l'erreur
On Error Resume Next
ActiveSheet.Shapes("IndeX").Delete


' Ajoute une ligne en fonction des coordonnées précédemment calculées.
' La ligne est transparente, de grosseur 1 et de couleur rouge (10)
' On ne peut pas l'imprimer.
Feuil1.Shapes.AddShape(msoShapeRectangle, PosHorizontal, PosHaut, _
longueur, 1).Name = "IndeX"

With ActiveSheet.Shapes("IndeX")
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 1#
.Line.ForeColor.SchemeColor = 10
.PrintObject = False
End With

End Sub





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
michdenis
Tu pourrais aussi utiliser quelque chose comme ceci :



Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
' Macro créée par G.Mourmant le 01/09/2001
' Site web : www.polykromy.com
' Copyright Gaetan Mourmant

'*** Définition des variables ***
h = ActiveCell.Height
w2 = ActiveCell.Width
t = ActiveCell.Top
w = ActiveCell.Left

'Teste si les rectangles existent déjà.
On Error Resume Next
ActiveSheet.Shapes("RectangleV").Delete
On Error Resume Next
ActiveSheet.Shapes("RectangleH").Delete
On Error GoTo 0

'Ajoute les rectangles
ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
0, t, w, h).Name = "RectangleV"
With ActiveSheet.Shapes("RectangleV")
.Fill.Visible = msoFalse
.Fill.Transparency = 1#
.Line.Weight = 3#
.Line.ForeColor.SchemeColor = 10
.ControlFormat.PrintObject = False
End With

ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
w, 0, w2, t).Name = "RectangleH"

With ActiveSheet.Shapes("RectangleH")
.Fill.Visible = msoFalse
.Fill.Transparency = 1#
.Line.Weight = 3#
.Line.ForeColor.SchemeColor = 10
.ControlFormat.PrintObject = False
End With
End Sub







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

Bonsoir les lecteurs,

Pour un planning, j'utilise un rectangle de couleur rouge de hauteur 1
pour me repérer. J'ai créé cette macro avec l'aide de quelques uns sur
ce forum et vous en reremercie.
Malheureusement, je travaille à 95% sur excel 2000.
Lorsque je dois ouvrir ce fichier sur excel 2003 voir excel 2007, ma
macro fonctionne mal.
Est ce que l'un de vous pourrais me donner une piste pour gérer les
versions et faire en sorte que ma macro fonctionne correctement sur
toutes les versions ?
le but est d'afficher ce rectangle au milieu de la ligne active et du
début de la colonne 2 à la fin de la colonne 251

Merci pour vos reponses

voilà le code


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Largeur entre la cellule active et la première colonne
PosHorizontal = Cells(Target.Row, 2).Left

' Position verticale sur ligne 2 ou plus
PosHaut = Application.WorksheetFunction.Max((Cells(Target.Row, 2).Top +
(Cells(Target.Row, 2).Height / 2)), _
(Cells(2, 5).Top + (Cells(2, 5).Height / 2)))

' longueur de la ligne
longueur = Cells(1, 253).Left - Cells(1, 2).Left

' Teste si l'index existe déjà. Dans ce cas, on l'efface.
' On utilise ici On Error Resume Next, qui permet de tester l'erreur
On Error Resume Next
ActiveSheet.Shapes("IndeX").Delete


' Ajoute une ligne en fonction des coordonnées précédemment calculées.
' La ligne est transparente, de grosseur 1 et de couleur rouge (10)
' On ne peut pas l'imprimer.
ActiveSheet.Shapes.AddShape(msoShapeRectangle, PosHorizontal, PosHaut,
longueur, 1).Name = "IndeX"

With ActiveSheet.Shapes("IndeX")
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 1#
.Line.ForeColor.SchemeColor = 10
.PrintObject = False
End With

End Sub

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
michdenis
Si tu décrivais ton problème lorsqu'il se présente ça orienterais
les recherches. Qu'est-ce qui fonctionne mal lorsque tu n'es
pas satisfait ?



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

*ReBonjour michdenis*,
Là, tu me surprends 8-o
Au travail, elle marche pas comme sous excel 2000 !!
Une option quelconque ?

Je l'ai testé sous excel 2007, et, elle fait exactement ce que tu dis.

P.S. dans mon message précédent, je t'ai retourné la macro, mais
en un endroit, j'ai modifié ActiveSheet par Feuil1... il faudrait
apporter la modification le cas échéant.


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

*Bonjour michdenis*,

Mon soucis, c'est que la macro fait le travail avec excel 2000, mais
mal avec excel 2003 et excel 2007.
Comme je connais pas trop les différences sur les version 2003 et 2007,
j'aurais aimer un peu d'aide :)

Merci d'avance si tu peux au moins m'aiguiller.

JLuc

La macro qui suit (celle que tu as publiée) fait le travail.
c'est quoi son problème ?



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Largeur entre la cellule active et la première colonne
PosHorizontal = Cells(Target.Row, 2).Left

' Position verticale sur ligne 2 ou plus
PosHaut = Application.WorksheetFunction.Max((Cells(Target.Row, 2).Top + _
(Cells(Target.Row, 2).Height / 2)), _
(Cells(2, 5).Top + (Cells(2, 5).Height / 2)))

' longueur de la ligne
longueur = Cells(1, 253).Left - Cells(1, 2).Left

' Teste si l'index existe déjà. Dans ce cas, on l'efface.
' On utilise ici On Error Resume Next, qui permet de tester l'erreur
On Error Resume Next
ActiveSheet.Shapes("IndeX").Delete


' Ajoute une ligne en fonction des coordonnées précédemment calculées.
' La ligne est transparente, de grosseur 1 et de couleur rouge (10)
' On ne peut pas l'imprimer.
Feuil1.Shapes.AddShape(msoShapeRectangle, PosHorizontal, PosHaut, _
longueur, 1).Name = "IndeX"

With ActiveSheet.Shapes("IndeX")
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 1#
.Line.ForeColor.SchemeColor = 10
.PrintObject = False
End With

End Sub





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
michdenis
Si tu ne peux expliquer ce que tu reproches à ta procédure
lorsque tu l'exécutes sur une plate-forme autre qu'excel 2000,
pourquoi devrais-je essayer d'y trouver des "bugs" que tu ne
peux décrire ...

sous excel 2003 ou 2007, je n'y vois pas grand différence.




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

*Bonjour michdenis*,
C'est pas simple. Je te joints le fichier à ouvrir (si tu l'a encore
:oÞ) avec la version 2000
puis essaie avec les autres versions. Je t'ai laissé juste une feuille
avec la macro


Si tu décrivais ton problème lorsqu'il se présente ça orienterais
les recherches. Qu'est-ce qui fonctionne mal lorsque tu n'es
pas satisfait ?



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

*ReBonjour michdenis*,
Là, tu me surprends 8-o
Au travail, elle marche pas comme sous excel 2000 !!
Une option quelconque ?

Je l'ai testé sous excel 2007, et, elle fait exactement ce que tu dis.

P.S. dans mon message précédent, je t'ai retourné la macro, mais
en un endroit, j'ai modifié ActiveSheet par Feuil1... il faudrait
apporter la modification le cas échéant.


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

*Bonjour michdenis*,

Mon soucis, c'est que la macro fait le travail avec excel 2000, mais
mal avec excel 2003 et excel 2007.
Comme je connais pas trop les différences sur les version 2003 et 2007,
j'aurais aimer un peu d'aide :)

Merci d'avance si tu peux au moins m'aiguiller.

JLuc

La macro qui suit (celle que tu as publiée) fait le travail.
c'est quoi son problème ?



Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'Largeur entre la cellule active et la première colonne
PosHorizontal = Cells(Target.Row, 2).Left

' Position verticale sur ligne 2 ou plus
PosHaut = Application.WorksheetFunction.Max((Cells(Target.Row, 2).Top +
_
(Cells(Target.Row, 2).Height / 2)), _
(Cells(2, 5).Top + (Cells(2, 5).Height / 2)))

' longueur de la ligne
longueur = Cells(1, 253).Left - Cells(1, 2).Left

' Teste si l'index existe déjà. Dans ce cas, on l'efface.
' On utilise ici On Error Resume Next, qui permet de tester l'erreur
On Error Resume Next
ActiveSheet.Shapes("IndeX").Delete


' Ajoute une ligne en fonction des coordonnées précédemment calculées.
' La ligne est transparente, de grosseur 1 et de couleur rouge (10)
' On ne peut pas l'imprimer.
Feuil1.Shapes.AddShape(msoShapeRectangle, PosHorizontal, PosHaut, _
longueur, 1).Name = "IndeX"

With ActiveSheet.Shapes("IndeX")
.Fill.Visible = msoFalse
.Fill.Transparency = 0#
.Line.Weight = 1#
.Line.ForeColor.SchemeColor = 10
.PrintObject = False
End With

End Sub







--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O