OVH Cloud OVH Cloud

Pb macro

11 réponses
Avatar
fredbzr
Bonjour à tous
j'utilise la macro ci-dessous trouvée sur ce forum il y a quelque temps
(merci à l'auteur) pour simplifier la saisie des heures dans un tableau : je
tape 1400 qui devient automatiquement 14:00.
Le problème est que celà ne fonctionne pas pour 6h00,12h00,18h00
Quelqu'un aurait-il une idée ?
Merci d'avance pour vos solutions

Dim bil As String

If Target.Column = 2 Then
bil = Cells(Target.Row, Target.Column)

If Len(Cells(Target.Row, Target.Column)) = 4 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 2) * 60 + Right(bil, 2)
* 1) * 6.94444444444444E-04

End If
If Len(Cells(Target.Row, Target.Column)) = 3 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 1) * 60 + Right(bil, 2)
* 1) * 6.94444444444444E-04

End If
End If

--


Fred

10 réponses

1 2
Avatar
FxM
Bonjour,

Quelque chose comme (non testé) :

If Target.Column = 2 Then
he = CInt(Left(target, Len(target) - 2))
mi = CInt(Right(target, 2))
tem = TimeSerial(he, mi, 0)
end if

@+
FxM


Bonjour à tous
j'utilise la macro ci-dessous trouvée sur ce forum il y a quelque temps
(merci à l'auteur) pour simplifier la saisie des heures dans un tableau : je
tape 1400 qui devient automatiquement 14:00.
Le problème est que celà ne fonctionne pas pour 6h00,12h00,18h00
Quelqu'un aurait-il une idée ?
Merci d'avance pour vos solutions

Dim bil As String

If Target.Column = 2 Then
bil = Cells(Target.Row, Target.Column)

If Len(Cells(Target.Row, Target.Column)) = 4 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 2) * 60 + Right(bil, 2)
* 1) * 6.94444444444444E-04

End If
If Len(Cells(Target.Row, Target.Column)) = 3 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 1) * 60 + Right(bil, 2)
* 1) * 6.94444444444444E-04

End If
End If



Avatar
fredbzr
Bonjour FxM,
j'ai essayé ta solution mais sans succès.
"FxM" a écrit dans le message de news:

Bonjour,

Quelque chose comme (non testé) :

If Target.Column = 2 Then
he = CInt(Left(target, Len(target) - 2))
mi = CInt(Right(target, 2))
tem = TimeSerial(he, mi, 0)
end if

@+
FxM


Bonjour à tous
j'utilise la macro ci-dessous trouvée sur ce forum il y a quelque temps
(merci à l'auteur) pour simplifier la saisie des heures dans un tableau :
je tape 1400 qui devient automatiquement 14:00.
Le problème est que celà ne fonctionne pas pour 6h00,12h00,18h00
Quelqu'un aurait-il une idée ?
Merci d'avance pour vos solutions

Dim bil As String

If Target.Column = 2 Then
bil = Cells(Target.Row, Target.Column)

If Len(Cells(Target.Row, Target.Column)) = 4 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 2) * 60 + Right(bil,
2) * 1) * 6.94444444444444E-04

End If
If Len(Cells(Target.Row, Target.Column)) = 3 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 1) * 60 + Right(bil,
2) * 1) * 6.94444444444444E-04

End If
End If





Avatar
JLuc
*Bonjour fredbzr*,
J'ai tester ta macro, avec n'importe quelle valeur, ca marche 8-o
Excel 2000

Bonjour à tous
j'utilise la macro ci-dessous trouvée sur ce forum il y a quelque temps
(merci à l'auteur) pour simplifier la saisie des heures dans un tableau : je
tape 1400 qui devient automatiquement 14:00.
Le problème est que celà ne fonctionne pas pour 6h00,12h00,18h00
Quelqu'un aurait-il une idée ?
Merci d'avance pour vos solutions

Dim bil As String

If Target.Column = 2 Then
bil = Cells(Target.Row, Target.Column)

If Len(Cells(Target.Row, Target.Column)) = 4 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 2) * 60 + Right(bil, 2) *
1) * 6.94444444444444E-04

End If
If Len(Cells(Target.Row, Target.Column)) = 3 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 1) * 60 + Right(bil, 2) *
1) * 6.94444444444444E-04

End If
End If



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

O-O

Avatar
JLuc
*Bonjour fredbzr*,
Rectificatif :
Ca marche si placer dans Private Sub Worksheet_SelectionChange(ByVal
Target As Range)
Ne marche pas si placer dans Private Sub Worksheet_Change(ByVal Target
As Range)
:-? Mais je saurais pas dire pourquoi :'(

Bonjour à tous
j'utilise la macro ci-dessous trouvée sur ce forum il y a quelque temps
(merci à l'auteur) pour simplifier la saisie des heures dans un tableau : je
tape 1400 qui devient automatiquement 14:00.
Le problème est que celà ne fonctionne pas pour 6h00,12h00,18h00
Quelqu'un aurait-il une idée ?
Merci d'avance pour vos solutions

Dim bil As String

If Target.Column = 2 Then
bil = Cells(Target.Row, Target.Column)

If Len(Cells(Target.Row, Target.Column)) = 4 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 2) * 60 + Right(bil, 2) *
1) * 6.94444444444444E-04

End If
If Len(Cells(Target.Row, Target.Column)) = 3 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 1) * 60 + Right(bil, 2) *
1) * 6.94444444444444E-04

End If
End If



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

O-O

Avatar
FxM
Bonsoir,

Deux choses :
- Essaie en remplaçant :
tem = TimeSerial(he, mi, 0)
par


target = timeserial(he,mi,0)
J'avais fait sous forme d'une fonction perso dont j'ai extrait le texte
sans tout corriger.

- mets un exemple sur http://www.cjoint.com pour que l'on y jette un oeil.

@+
FxM




Bonjour FxM,
j'ai essayé ta solution mais sans succès.
"FxM" a écrit dans le message de news:

Bonjour,

Quelque chose comme (non testé) :

If Target.Column = 2 Then
he = CInt(Left(target, Len(target) - 2))
mi = CInt(Right(target, 2))
tem = TimeSerial(he, mi, 0)
end if

@+
FxM


Bonjour à tous
j'utilise la macro ci-dessous trouvée sur ce forum il y a quelque temps
(merci à l'auteur) pour simplifier la saisie des heures dans un tableau :
je tape 1400 qui devient automatiquement 14:00.
Le problème est que celà ne fonctionne pas pour 6h00,12h00,18h00
Quelqu'un aurait-il une idée ?
Merci d'avance pour vos solutions

Dim bil As String

If Target.Column = 2 Then
bil = Cells(Target.Row, Target.Column)

If Len(Cells(Target.Row, Target.Column)) = 4 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 2) * 60 + Right(bil,
2) * 1) * 6.94444444444444E-04

End If
If Len(Cells(Target.Row, Target.Column)) = 3 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 1) * 60 + Right(bil,
2) * 1) * 6.94444444444444E-04

End If
End If









Avatar
fredbzr
Bonsoir JLuc
merci de t'être penché sur mon soucis.J'ai essayé en ajoutant "selection"
mais çà ne fonctionne pas (erreur de compilation).Je précise que je suis
sous 97 , je ne sais pas si çà vient de là.
Merci d'avance

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

*Bonjour fredbzr*,
Rectificatif :
Ca marche si placer dans Private Sub Worksheet_SelectionChange(ByVal
Target As Range)
Ne marche pas si placer dans Private Sub Worksheet_Change(ByVal Target As
Range)
:-? Mais je saurais pas dire pourquoi :'(

Bonjour à tous
j'utilise la macro ci-dessous trouvée sur ce forum il y a quelque temps
(merci à l'auteur) pour simplifier la saisie des heures dans un tableau :
je tape 1400 qui devient automatiquement 14:00.
Le problème est que celà ne fonctionne pas pour 6h00,12h00,18h00
Quelqu'un aurait-il une idée ?
Merci d'avance pour vos solutions

Dim bil As String

If Target.Column = 2 Then
bil = Cells(Target.Row, Target.Column)

If Len(Cells(Target.Row, Target.Column)) = 4 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 2) * 60 + Right(bil,
2) * 1) * 6.94444444444444E-04

End If
If Len(Cells(Target.Row, Target.Column)) = 3 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 1) * 60 + Right(bil,
2) * 1) * 6.94444444444444E-04

End If
End If



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

O-O





Avatar
fredbzr
Bonsoir FxM,
j'ai mis un simple exemple de mon soucis ici http://cjoint.com/?cmwme5kHJB
j'espère que quelqu'un arrivera à me dépanner
merci à tous

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

Bonsoir,

Deux choses :
- Essaie en remplaçant :
tem = TimeSerial(he, mi, 0)
par


target = timeserial(he,mi,0)
J'avais fait sous forme d'une fonction perso dont j'ai extrait le texte
sans tout corriger.

- mets un exemple sur http://www.cjoint.com pour que l'on y jette un oeil.

@+
FxM




Bonjour FxM,
j'ai essayé ta solution mais sans succès.
"FxM" a écrit dans le message de news:

Bonjour,

Quelque chose comme (non testé) :

If Target.Column = 2 Then
he = CInt(Left(target, Len(target) - 2))
mi = CInt(Right(target, 2))
tem = TimeSerial(he, mi, 0)
end if

@+
FxM


Bonjour à tous
j'utilise la macro ci-dessous trouvée sur ce forum il y a quelque temps
(merci à l'auteur) pour simplifier la saisie des heures dans un tableau
: je tape 1400 qui devient automatiquement 14:00.
Le problème est que celà ne fonctionne pas pour 6h00,12h00,18h00
Quelqu'un aurait-il une idée ?
Merci d'avance pour vos solutions

Dim bil As String

If Target.Column = 2 Then
bil = Cells(Target.Row, Target.Column)

If Len(Cells(Target.Row, Target.Column)) = 4 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 2) * 60 +
Right(bil, 2) * 1) * 6.94444444444444E-04

End If
If Len(Cells(Target.Row, Target.Column)) = 3 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 1) * 60 +
Right(bil, 2) * 1) * 6.94444444444444E-04

End If
End If










Avatar
FxM
En retour, voici le lien :
http://cjoint.com/?cmwFe2iyD0

Principe :
- désactiver les évènements au début de la macro sinon elle
s'auto-appelle x fois (chaque modification entraîne une relance)
- vu que tu as le même code pour les colonnes 2 à 8 -> simplification du
code en gardant le même principe.
- on pourrait encore vérifier si target est vide ou non ...

@+
FxM



Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim c As Range
If Not Intersect(Target.Cells, Range("B5", ["h857"])) Is Nothing Then
For Each c In Target
Select Case c.Value
Case "AM", "AT": c.Interior.ColorIndex = 3
Case "M", "FM", "FMO": c.Interior.ColorIndex = 20
Case "N", "FN": c.Interior.ColorIndex = 37
Case "S", "FS", "FSO": c.Interior.ColorIndex = 38
Case "J", "FJO": c.Interior.ColorIndex = 19
Case "R", "RECUP", "FR", "CP": c.Interior.ColorIndex = 35
Case "F": c.Interior.ColorIndex = 24
Case "EM", "CPA", "MA", "NA", "B", "D", "H", "DE":
c.Interior.ColorIndex = 40
Case Else: c.Interior.ColorIndex = xlNone
End Select
Next c
End If

If Target.Column >= 2 And Target.Column <= 8 Then
Select Case Len(Target)
Case 4
Target.Value = (Left(Target, 2) * 60 + Right(Target, 2) * 1) *
6.94444444444444E-04
Case 3
Target.Value = (Left(Target, 1) * 60 + Right(Target, 2) * 1) *
6.94444444444444E-04
End Select
End If
Application.EnableEvents = True
End Sub





Bonsoir FxM,
j'ai mis un simple exemple de mon soucis ici http://cjoint.com/?cmwme5kHJB
j'espère que quelqu'un arrivera à me dépanner
merci à tous

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

Bonsoir,

Deux choses :
- Essaie en remplaçant :
tem = TimeSerial(he, mi, 0)
par


target = timeserial(he,mi,0)
J'avais fait sous forme d'une fonction perso dont j'ai extrait le texte
sans tout corriger.

- mets un exemple sur http://www.cjoint.com pour que l'on y jette un oeil.

@+
FxM




Bonjour FxM,
j'ai essayé ta solution mais sans succès.
"FxM" a écrit dans le message de news:

Bonjour,

Quelque chose comme (non testé) :

If Target.Column = 2 Then
he = CInt(Left(target, Len(target) - 2))
mi = CInt(Right(target, 2))
tem = TimeSerial(he, mi, 0)
end if

@+
FxM


Bonjour à tous
j'utilise la macro ci-dessous trouvée sur ce forum il y a quelque temps
(merci à l'auteur) pour simplifier la saisie des heures dans un tableau
: je tape 1400 qui devient automatiquement 14:00.
Le problème est que celà ne fonctionne pas pour 6h00,12h00,18h00
Quelqu'un aurait-il une idée ?
Merci d'avance pour vos solutions

Dim bil As String

If Target.Column = 2 Then
bil = Cells(Target.Row, Target.Column)

If Len(Cells(Target.Row, Target.Column)) = 4 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 2) * 60 +
Right(bil, 2) * 1) * 6.94444444444444E-04

End If
If Len(Cells(Target.Row, Target.Column)) = 3 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 1) * 60 +
Right(bil, 2) * 1) * 6.94444444444444E-04

End If
End If












Avatar
fredbzr
Un grand merci à toi car je ne m'en serai pas sorti tout seul
Bonsoir à tous
"FxM" a écrit dans le message de news:

En retour, voici le lien :
http://cjoint.com/?cmwFe2iyD0

Principe :
- désactiver les évènements au début de la macro sinon elle s'auto-appelle
x fois (chaque modification entraîne une relance)
- vu que tu as le même code pour les colonnes 2 à 8 -> simplification du
code en gardant le même principe.
- on pourrait encore vérifier si target est vide ou non ...

@+
FxM



Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Dim c As Range
If Not Intersect(Target.Cells, Range("B5", ["h857"])) Is Nothing Then
For Each c In Target
Select Case c.Value
Case "AM", "AT": c.Interior.ColorIndex = 3
Case "M", "FM", "FMO": c.Interior.ColorIndex = 20
Case "N", "FN": c.Interior.ColorIndex = 37
Case "S", "FS", "FSO": c.Interior.ColorIndex = 38
Case "J", "FJO": c.Interior.ColorIndex = 19
Case "R", "RECUP", "FR", "CP": c.Interior.ColorIndex = 35
Case "F": c.Interior.ColorIndex = 24
Case "EM", "CPA", "MA", "NA", "B", "D", "H", "DE":
c.Interior.ColorIndex = 40
Case Else: c.Interior.ColorIndex = xlNone
End Select
Next c
End If

If Target.Column >= 2 And Target.Column <= 8 Then
Select Case Len(Target)
Case 4
Target.Value = (Left(Target, 2) * 60 + Right(Target, 2) * 1) *
6.94444444444444E-04
Case 3
Target.Value = (Left(Target, 1) * 60 + Right(Target, 2) * 1) *
6.94444444444444E-04
End Select
End If
Application.EnableEvents = True
End Sub





Bonsoir FxM,
j'ai mis un simple exemple de mon soucis ici
http://cjoint.com/?cmwme5kHJB
j'espère que quelqu'un arrivera à me dépanner
merci à tous

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

Bonsoir,

Deux choses :
- Essaie en remplaçant :
tem = TimeSerial(he, mi, 0)
par


target = timeserial(he,mi,0)
J'avais fait sous forme d'une fonction perso dont j'ai extrait le texte
sans tout corriger.

- mets un exemple sur http://www.cjoint.com pour que l'on y jette un
oeil.

@+
FxM




Bonjour FxM,
j'ai essayé ta solution mais sans succès.
"FxM" a écrit dans le message de news:

Bonjour,

Quelque chose comme (non testé) :

If Target.Column = 2 Then
he = CInt(Left(target, Len(target) - 2))
mi = CInt(Right(target, 2))
tem = TimeSerial(he, mi, 0)
end if

@+
FxM


Bonjour à tous
j'utilise la macro ci-dessous trouvée sur ce forum il y a quelque
temps (merci à l'auteur) pour simplifier la saisie des heures dans un
tableau : je tape 1400 qui devient automatiquement 14:00.
Le problème est que celà ne fonctionne pas pour 6h00,12h00,18h00
Quelqu'un aurait-il une idée ?
Merci d'avance pour vos solutions

Dim bil As String

If Target.Column = 2 Then
bil = Cells(Target.Row, Target.Column)

If Len(Cells(Target.Row, Target.Column)) = 4 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 2) * 60 +
Right(bil, 2) * 1) * 6.94444444444444E-04

End If
If Len(Cells(Target.Row, Target.Column)) = 3 Then
Cells(Target.Row, Target.Column).Value = (Left(bil, 1) * 60 +
Right(bil, 2) * 1) * 6.94444444444444E-04

End If
End If














Avatar
FxM
Un grand merci à toi car je ne m'en serai pas sorti tout seul
Bonsoir à tous


Z'en prie :o)

@+
FxM

1 2