J'ai une macro ci-dessous qui g=E9n=E8re une liste de cr=E9neaux horaires e=
n fonction de dates et d'heures de d=E9but et de fin et d'une incr=E9mentat=
ion horaire.
Cette macro fonctionne parfaitement avec Excel 2003 et 2007 mais avec Excel=
2010 j'obtiens a VBA runtime error "51" en=20
nParJour =3D Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + _
0.000001)) + 1
---------------------------------------------------------------------------=
------------
Dim Jr1 As Date, Jr2 As Date, Hh1 As Date, Hh2 As Date, Pas As Date
Dim V As Variant, S As String
Dim nParJour As Integer, nIntervalles As Integer
Jr1 =3D CDate(InputBox("Starting Date as mm/dd/yy e.g. 7/27/10", "", "7=
/27/10"))
Jr2 =3D CDate(InputBox("Ending Date as mm/dd/yy e.g. 7/29/10", "", "7/=
29/10"))
Hh1 =3D CDate(InputBox("Starting Time e.g. 10:00 AM", "", "10:00 AM"))
Hh2 =3D CDate(InputBox("Ending Time e.g. 5:30 PM", "", "5:30 PM"))
Pas =3D CDate(InputBox("Increment e.g. 00:30 for a 30 minutes interval"=
, "", "00:30"))
| Ceci dit je ne sais pas ou trouver la valeur des variables X, Y et Z.
Au moins 2 façons de faire : A ) après avoir exécuté la ligne de code en pas en pas, si tu passes la souris au-dessus de la variable x, y ou z tu auras en surimpression leur contenu.
B ) Tu peux afficher dans la fenêtre "Exécution" la valeur des variables que tu désires. Pour ouvrir cette fenêtre : Raccourci clavier : Ctrl + G ou par la commande du menu : Fenêtre Exécution dans le menu Affichage
Dans la macro, immédiatement après l'exécution d'une ligne de code, pour afficher dans cette fenêtre la valeur de cette variable, tu écris : x = Hh2 - Hh1 Print.Debug "Valeur de la variable x :" & X
L'avantage de cette approche te permet de suivre l'évolution d'une variable tout au long d'une procédure. Ceci peut être utilisé sans employer la technique du pas-à-pas. Si tu le désires, tu peux laisser ces lignes de code "Debug.Print..." Dans ton code même après tes tests. Cela n'altère pas le déroulement de la procédure.
| Ceci dit je ne sais pas ou trouver la valeur des variables X, Y et Z.
Au moins 2 façons de faire :
A ) après avoir exécuté la ligne de code en pas en pas,
si tu passes la souris au-dessus de la variable x, y ou z
tu auras en surimpression leur contenu.
B ) Tu peux afficher dans la fenêtre "Exécution" la valeur des
variables que tu désires.
Pour ouvrir cette fenêtre : Raccourci clavier : Ctrl + G
ou par la commande du menu : Fenêtre Exécution dans le menu Affichage
Dans la macro, immédiatement après l'exécution d'une ligne de code,
pour afficher dans cette fenêtre la valeur de cette variable, tu écris :
x = Hh2 - Hh1
Print.Debug "Valeur de la variable x :" & X
L'avantage de cette approche te permet de suivre l'évolution d'une
variable
tout au long d'une procédure. Ceci peut être utilisé sans employer la
technique
du pas-à-pas. Si tu le désires, tu peux laisser ces lignes de code
"Debug.Print..."
Dans ton code même après tes tests. Cela n'altère pas le déroulement de
la
procédure.
| Ceci dit je ne sais pas ou trouver la valeur des variables X, Y et Z.
Au moins 2 façons de faire : A ) après avoir exécuté la ligne de code en pas en pas, si tu passes la souris au-dessus de la variable x, y ou z tu auras en surimpression leur contenu.
B ) Tu peux afficher dans la fenêtre "Exécution" la valeur des variables que tu désires. Pour ouvrir cette fenêtre : Raccourci clavier : Ctrl + G ou par la commande du menu : Fenêtre Exécution dans le menu Affichage
Dans la macro, immédiatement après l'exécution d'une ligne de code, pour afficher dans cette fenêtre la valeur de cette variable, tu écris : x = Hh2 - Hh1 Print.Debug "Valeur de la variable x :" & X
L'avantage de cette approche te permet de suivre l'évolution d'une variable tout au long d'une procédure. Ceci peut être utilisé sans employer la technique du pas-à-pas. Si tu le désires, tu peux laisser ces lignes de code "Debug.Print..." Dans ton code même après tes tests. Cela n'altère pas le déroulement de la procédure.
Je ne sais pas si c'est utile mais j'obtiens excatement les mêmes résul tats avec Excel 2007 pour lequel la macro marche parfaitement. Le bug n'est que pour Excel 2010.
Je ne sais pas si c'est utile mais j'obtiens excatement les mêmes résul tats avec Excel 2007 pour lequel la macro marche parfaitement. Le bug n'est que pour Excel 2010.
Je ne sais pas si c'est utile mais j'obtiens excatement les mêmes résul tats avec Excel 2007 pour lequel la macro marche parfaitement. Le bug n'est que pour Excel 2010.
Cordialement,
Christophe
isabelle
bonjour Christophe,
x = Hh2 - Hh1 y = IIf(Hh2 < Hh1, 1, 0) z = Pas + 0.000001 a = (x + y)
Maintenant j'obtiens un run-time error "1004" un peu plus bas en Range("B1").End(xlDown).Offset(1, 0).Select
Une nouvelle fois ces erreurs n'ont pas lieu avec Excel 2007 mais uniquement avec Excel 2010.
Remerciements,
Christophe
MichD
Bonjour,
Dans la fenêtre de l'éditeur de code (macro) À partir de la barre des menus / outils / références / est-ce qu'il y a un élément coché avec la mention "Manquante" ? Si c'est le cas, décoche-le.
Dans la fenêtre de l'éditeur de code (macro)
À partir de la barre des menus / outils / références /
est-ce qu'il y a un élément coché avec la mention "Manquante" ?
Si c'est le cas, décoche-le.
Dans la fenêtre de l'éditeur de code (macro) À partir de la barre des menus / outils / références / est-ce qu'il y a un élément coché avec la mention "Manquante" ? Si c'est le cas, décoche-le.
Les references cochées dans Excel 2010 sont les suivantes: 1- Visual basic For Applications 2- Microsoft Excel 14.0 Object Library 3- Ole Automation 4- Micriosoft Office 14.0 Object Library 5- Microsoft Forms 2.0 Object Library
Je ne vois pas d'élément coché avec la mention "Manquante" ou son é quivalent en anaglais.
Si je compare à Excel 2007, les 4 premières y sont, si ce n'est en 12.0 au lieu de 14. Seule Microsoft Forms 2.00 Object Library n'est pas cochée.
Je n'arrive pas à la décocher acr obtiens message d'erreur suivant: "Ca n't remmove control or reference in use"
Merci.
Christophe
Bonjour:
Les references cochées dans Excel 2010 sont les suivantes:
1- Visual basic For Applications
2- Microsoft Excel 14.0 Object Library
3- Ole Automation
4- Micriosoft Office 14.0 Object Library
5- Microsoft Forms 2.0 Object Library
Je ne vois pas d'élément coché avec la mention "Manquante" ou son é quivalent en anaglais.
Si je compare à Excel 2007, les 4 premières y sont, si ce n'est en 12.0 au lieu de 14.
Seule Microsoft Forms 2.00 Object Library n'est pas cochée.
Je n'arrive pas à la décocher acr obtiens message d'erreur suivant: "Ca n't remmove control or reference in use"
Les references cochées dans Excel 2010 sont les suivantes: 1- Visual basic For Applications 2- Microsoft Excel 14.0 Object Library 3- Ole Automation 4- Micriosoft Office 14.0 Object Library 5- Microsoft Forms 2.0 Object Library
Je ne vois pas d'élément coché avec la mention "Manquante" ou son é quivalent en anaglais.
Si je compare à Excel 2007, les 4 premières y sont, si ce n'est en 12.0 au lieu de 14. Seule Microsoft Forms 2.00 Object Library n'est pas cochée.
Je n'arrive pas à la décocher acr obtiens message d'erreur suivant: "Ca n't remmove control or reference in use"
Merci.
Christophe
MichD
Est-ce possible de publier ton classeur en utilisant l'adresse suivante : Cjoint.Com . L'adresse que tu obtiendras, tu nous la retournes ici.
Fais disparaître toutes les informations sensibles avant la publication de ce dernier.
On Friday, April 5, 2013 3:16:44 PM UTC+2, MichD wrote:
Est-ce possible de publier ton classeur en utilisant l'adresse suivante : Cjoint.Com . L'adresse que tu obtiendras, tu nous la retournes ici. Fais d isparaître toutes les informations sensibles avant la publication de ce d ernier. MichD ------------------------------------------------------------- --
Voilà. http://cjoint.com/?0DfqOiBHwGd
Et merci à tous pour votre aide.
Christophe
On Friday, April 5, 2013 3:16:44 PM UTC+2, MichD wrote:
Est-ce possible de publier ton classeur en utilisant l'adresse suivante : Cjoint.Com . L'adresse que tu obtiendras, tu nous la retournes ici. Fais d isparaître toutes les informations sensibles avant la publication de ce d ernier. MichD ------------------------------------------------------------- --
On Friday, April 5, 2013 3:16:44 PM UTC+2, MichD wrote:
Est-ce possible de publier ton classeur en utilisant l'adresse suivante : Cjoint.Com . L'adresse que tu obtiendras, tu nous la retournes ici. Fais d isparaître toutes les informations sensibles avant la publication de ce d ernier. MichD ------------------------------------------------------------- --
MichD
Bonjour,
Pour cette ligne de code : nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + 0.000001)) + 1
Modifie là de cette manière : nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / CDbl(Pas) + 0.000001)) + 1
J'ai seulement le CDBL() à la valeur PAS Pour une raison que j'ignore, il n'arrive pas à faire la division! Ce semble être un bogue!!!
Pour cette section où tu définis tes variables avec ceci : Jr2 = CDate(InputBox("Ending Date as mm/dd/yy e.g. 7/29/10", "", "7/29/10"))
Si l'usager entre autres choses qu'une date ou qu'il clique sur "Annuler" cela va générer une erreur à cause de la fonction "Cdate()"
Je te propose plutôt d'adapter quelque chose du genre!
N.B. As-tu pensé utilisé un formulaire avec un contrôle "DATEPICKER" L'usager peut toujours entrer un format de date autre et comme la procédure ne fait aucune vérification, le résultat pourrait être erratique si le format demandé n'est pas suivi par l'usager...
ET pour la ligne de code : Range("B1").End(xlDown).Offset(1, 0).Select
Je la remplacerais par : Range("B" & Range("B" & Rows.Count).End(xlUp)(2).Row).Select
'------------------------------------------------- Do Jr1 = InputBox("Starting Date as mm/dd/yy e.g. 7/27/10", "", "7/27/10") If Jr1 = "" Then MsgBox "Opération annulée" Exit Sub End If Loop Until IsDate(Jr1) Jr1 = CDate(Jr1)
Do Jr2 = InputBox("Ending Date as mm/dd/yy e.g. 7/29/10", "", "7/29/10") If Jr2 = "" Then MsgBox "Opération annulée" Exit Sub End If Loop Until IsDate(Jr2) Jr2 = CDate(Jr2)
Do Hh1 = InputBox("Starting Time e.g. 10:00 AM", "", "10:00 AM") If Hh1 = "" Then MsgBox "Opération annulée" Exit Sub End If Loop Until IsDate(Hh1) Hh1 = CDate(Hh1)
Do Hh2 = InputBox("Ending Time e.g. 5:30 PM", "", "5:30 PM") If Hh2 = "" Then MsgBox "Opération annulée" Exit Sub End If Loop Until IsDate(Hh2) Hh2 = CDate(Hh2)
Do Pas = InputBox("Starting Time e.g. 10:00 AM", "", "10:00 AM") If Pas = "" Then MsgBox "Opération annulée" Exit Sub End If Loop Until IsDate(Pas) Pas = CDate(Pas) '-------------------------------------------------
Pour cette ligne de code :
nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + 0.000001)) + 1
Modifie là de cette manière :
nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / CDbl(Pas) + 0.000001))
+ 1
J'ai seulement le CDBL() à la valeur PAS
Pour une raison que j'ignore, il n'arrive pas à faire la division!
Ce semble être un bogue!!!
Pour cette section où tu définis tes variables avec ceci :
Jr2 = CDate(InputBox("Ending Date as mm/dd/yy e.g. 7/29/10", "",
"7/29/10"))
Si l'usager entre autres choses qu'une date ou qu'il clique sur "Annuler"
cela va générer une erreur à cause de la fonction "Cdate()"
Je te propose plutôt d'adapter quelque chose du genre!
N.B. As-tu pensé utilisé un formulaire avec un contrôle "DATEPICKER"
L'usager peut toujours entrer un format de date autre et
comme la procédure ne fait aucune vérification, le résultat
pourrait être erratique si le format demandé n'est pas suivi
par l'usager...
ET pour la ligne de code :
Range("B1").End(xlDown).Offset(1, 0).Select
Je la remplacerais par :
Range("B" & Range("B" & Rows.Count).End(xlUp)(2).Row).Select
'-------------------------------------------------
Do
Jr1 = InputBox("Starting Date as mm/dd/yy e.g. 7/27/10", "", "7/27/10")
If Jr1 = "" Then
MsgBox "Opération annulée"
Exit Sub
End If
Loop Until IsDate(Jr1)
Jr1 = CDate(Jr1)
Do
Jr2 = InputBox("Ending Date as mm/dd/yy e.g. 7/29/10", "", "7/29/10")
If Jr2 = "" Then
MsgBox "Opération annulée"
Exit Sub
End If
Loop Until IsDate(Jr2)
Jr2 = CDate(Jr2)
Do
Hh1 = InputBox("Starting Time e.g. 10:00 AM", "", "10:00 AM")
If Hh1 = "" Then
MsgBox "Opération annulée"
Exit Sub
End If
Loop Until IsDate(Hh1)
Hh1 = CDate(Hh1)
Do
Hh2 = InputBox("Ending Time e.g. 5:30 PM", "", "5:30 PM")
If Hh2 = "" Then
MsgBox "Opération annulée"
Exit Sub
End If
Loop Until IsDate(Hh2)
Hh2 = CDate(Hh2)
Do
Pas = InputBox("Starting Time e.g. 10:00 AM", "", "10:00 AM")
If Pas = "" Then
MsgBox "Opération annulée"
Exit Sub
End If
Loop Until IsDate(Pas)
Pas = CDate(Pas)
'-------------------------------------------------
Pour cette ligne de code : nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / Pas + 0.000001)) + 1
Modifie là de cette manière : nParJour = Int(((Hh2 - Hh1 + IIf(Hh2 < Hh1, 1, 0)) / CDbl(Pas) + 0.000001)) + 1
J'ai seulement le CDBL() à la valeur PAS Pour une raison que j'ignore, il n'arrive pas à faire la division! Ce semble être un bogue!!!
Pour cette section où tu définis tes variables avec ceci : Jr2 = CDate(InputBox("Ending Date as mm/dd/yy e.g. 7/29/10", "", "7/29/10"))
Si l'usager entre autres choses qu'une date ou qu'il clique sur "Annuler" cela va générer une erreur à cause de la fonction "Cdate()"
Je te propose plutôt d'adapter quelque chose du genre!
N.B. As-tu pensé utilisé un formulaire avec un contrôle "DATEPICKER" L'usager peut toujours entrer un format de date autre et comme la procédure ne fait aucune vérification, le résultat pourrait être erratique si le format demandé n'est pas suivi par l'usager...
ET pour la ligne de code : Range("B1").End(xlDown).Offset(1, 0).Select
Je la remplacerais par : Range("B" & Range("B" & Rows.Count).End(xlUp)(2).Row).Select
'------------------------------------------------- Do Jr1 = InputBox("Starting Date as mm/dd/yy e.g. 7/27/10", "", "7/27/10") If Jr1 = "" Then MsgBox "Opération annulée" Exit Sub End If Loop Until IsDate(Jr1) Jr1 = CDate(Jr1)
Do Jr2 = InputBox("Ending Date as mm/dd/yy e.g. 7/29/10", "", "7/29/10") If Jr2 = "" Then MsgBox "Opération annulée" Exit Sub End If Loop Until IsDate(Jr2) Jr2 = CDate(Jr2)
Do Hh1 = InputBox("Starting Time e.g. 10:00 AM", "", "10:00 AM") If Hh1 = "" Then MsgBox "Opération annulée" Exit Sub End If Loop Until IsDate(Hh1) Hh1 = CDate(Hh1)
Do Hh2 = InputBox("Ending Time e.g. 5:30 PM", "", "5:30 PM") If Hh2 = "" Then MsgBox "Opération annulée" Exit Sub End If Loop Until IsDate(Hh2) Hh2 = CDate(Hh2)
Do Pas = InputBox("Starting Time e.g. 10:00 AM", "", "10:00 AM") If Pas = "" Then MsgBox "Opération annulée" Exit Sub End If Loop Until IsDate(Pas) Pas = CDate(Pas) '-------------------------------------------------