lorsque ma macro s'execute par le changement de valeur dans une
cellule, la boucle de la ligne 2 a 500 s'execute et ralenti mon
programme
ne pourrait-on pas executer la macro juste sur la ligne ou j'ai
modifi=E9 ma cellule
voici les codes
celui de la feuille
Private Sub Worksheet_Change(ByVal Target As Range)
'--------------------------
'- calcul de l'age -
'--------------------------
If Not Intersect([f2:f500], Target) Is Nothing Then
Call calcul_age
End If
End Sub
le code de la routine calcul_age
Sub calcul_age()
For i =3D 2 To ActiveSheet.Range("f500").End(xlUp).Row
Range("g" & i) =3D
"=3DIF(RC[-1]=3D"""","""",DATEDIF(RC[-1],TODAY(),""y""))"
Range("V" & i) =3D "=3DIF(AND(RC[-15]>1,RC[-15]<=3D50),""<
50"",IF(AND(RC[-15]>50,RC[-15]<100),""> 50"",""""))"
Range("aa" & i) =3D
"=3DIF(AND(RC[-4]=3D""X"",RC[-3]=3D""X"",RC[-2]=3D""X"",RC[-1]=3D""X""),""4
EP"","""")"
Next i
If Range("f" & i) =3D "" Then
Range("v" & i) =3D ""
Range("g" & i) =3D ""
End If
End Sub
donc en fait si je change une valeur dans la cellule F4 alors la
valeur de "i" dans ma routine prendra 4 au lieu de derouler de 2 a 500
Bonjour, Il faut toujours essayer.. ;o)) Mais j'aime bien cette syntaxe que tu proposes :
calcul_age (Target.Row) -- Avec plaisir http://dj.joss.free.fr/trombine.htm http://jacxl.free.fr/mpfe/trombino.html Philippe.R Pour se connecter au forum : http://www.excelabo.net/mpfe/connexion.php News://news.microsoft.com/microsoft.public.fr.excel "Fredo P" a écrit dans le message de news:
"> suffit de déclarer la variable publique en tête de module
Public i As Long
Tu sauves la face la!!
Bonjour,
Il faut toujours essayer..
;o))
Mais j'aime bien cette syntaxe que tu proposes :
calcul_age (Target.Row)
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Fredo P" <ponsinet.frederic363etdesbrouettes@orange.fr> a écrit dans le
message de news:uInrq5R6IHA.5012@TK2MSFTNGP02.phx.gbl...
"> suffit de déclarer la variable publique en tête de module
Bonjour, Il faut toujours essayer.. ;o)) Mais j'aime bien cette syntaxe que tu proposes :
calcul_age (Target.Row) -- Avec plaisir http://dj.joss.free.fr/trombine.htm http://jacxl.free.fr/mpfe/trombino.html Philippe.R Pour se connecter au forum : http://www.excelabo.net/mpfe/connexion.php News://news.microsoft.com/microsoft.public.fr.excel "Fredo P" a écrit dans le message de news:
"> suffit de déclarer la variable publique en tête de module
voila il y aune panne lorque je veux supprimer les valeurs de la coonne date de naissance
il me met erreur d'execution 13
incompatibilite de type
en faisant debogage voici la ligne qui est inciminée
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
de plus lorsque je clique sur fin et que je veux que la procedure fonctionne normalement, tout est bloqué, bref aucune macro ne marche dans le module worksheet_change
je vous joint le fichier
merci
http://cjoint.com/?huvAglaEAY
salut
voila il y aune panne lorque je veux supprimer les valeurs de la
coonne date de naissance
il me met erreur d'execution 13
incompatibilite de type
en faisant debogage voici la ligne qui est inciminée
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
de plus lorsque je clique sur fin et que je veux que la procedure
fonctionne normalement, tout est bloqué, bref aucune macro ne marche
dans le module worksheet_change
voila il y aune panne lorque je veux supprimer les valeurs de la coonne date de naissance
il me met erreur d'execution 13
incompatibilite de type
en faisant debogage voici la ligne qui est inciminée
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
de plus lorsque je clique sur fin et que je veux que la procedure fonctionne normalement, tout est bloqué, bref aucune macro ne marche dans le module worksheet_change
je vous joint le fichier
merci
http://cjoint.com/?huvAglaEAY
Philippe.R
Bonsoir, Plantage normal, puisque la cellule étant vide, le calcul de l'âge ne peut se faire en Gi Gi contient donc #valeur et ne peut être comparé à 1 ou 50 Il faut donc sortir de la procédure juste après Range("g" & i) = "", comme ci dessous :
Sub calcul_age(i) 'ici les commentaires permettant la maintenance future du code date1 = Format(Cells(i, 6), "mm/dd/yyyy") date2 = Format(Date, "mm/dd/yyyy") If Range("f" & i) = "" Then Range("v" & i) = "" Range("g" & i) = "" Exit Sub End If Range("g" & i) = Evaluate("DATEDIF(" & """" & date1 _ & """" & "," & """" & date2 & """" & "," & """Y""" & ")")
If Range("G" & i) > 1 And Range("G" & i) < 50 Then Range("V" & i) = "<50" End If If Range("G" & i) > 50 And Range("G" & i) < 100 Then Range("V" & i) = ">50" End If End Sub -- Avec plaisir http://dj.joss.free.fr/trombine.htm http://jacxl.free.fr/mpfe/trombino.html Philippe.R Pour se connecter au forum : http://www.excelabo.net/mpfe/connexion.php News://news.microsoft.com/microsoft.public.fr.excel "magic-dd" a écrit dans le message de news: salut
voila il y aune panne lorque je veux supprimer les valeurs de la coonne date de naissance
il me met erreur d'execution 13
incompatibilite de type
en faisant debogage voici la ligne qui est inciminée
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
de plus lorsque je clique sur fin et que je veux que la procedure fonctionne normalement, tout est bloqué, bref aucune macro ne marche dans le module worksheet_change
je vous joint le fichier
merci
http://cjoint.com/?huvAglaEAY
Bonsoir,
Plantage normal, puisque la cellule étant vide, le calcul de l'âge ne peut
se faire en Gi
Gi contient donc #valeur et ne peut être comparé à 1 ou 50
Il faut donc sortir de la procédure juste après Range("g" & i) = "", comme
ci dessous :
Sub calcul_age(i)
'ici les commentaires permettant la maintenance future du code
date1 = Format(Cells(i, 6), "mm/dd/yyyy")
date2 = Format(Date, "mm/dd/yyyy")
If Range("f" & i) = "" Then
Range("v" & i) = ""
Range("g" & i) = ""
Exit Sub
End If
Range("g" & i) = Evaluate("DATEDIF(" & """" & date1 _
& """" & "," & """" & date2 & """" & "," & """Y""" & ")")
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
Range("V" & i) = "<50"
End If
If Range("G" & i) > 50 And Range("G" & i) < 100 Then
Range("V" & i) = ">50"
End If
End Sub
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"magic-dd" <ciolandre@gmail.com> a écrit dans le message de
news:c55fe033-6e22-4c9a-a58f-8cc49183f1a5@l64g2000hse.googlegroups.com...
salut
voila il y aune panne lorque je veux supprimer les valeurs de la
coonne date de naissance
il me met erreur d'execution 13
incompatibilite de type
en faisant debogage voici la ligne qui est inciminée
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
de plus lorsque je clique sur fin et que je veux que la procedure
fonctionne normalement, tout est bloqué, bref aucune macro ne marche
dans le module worksheet_change
Bonsoir, Plantage normal, puisque la cellule étant vide, le calcul de l'âge ne peut se faire en Gi Gi contient donc #valeur et ne peut être comparé à 1 ou 50 Il faut donc sortir de la procédure juste après Range("g" & i) = "", comme ci dessous :
Sub calcul_age(i) 'ici les commentaires permettant la maintenance future du code date1 = Format(Cells(i, 6), "mm/dd/yyyy") date2 = Format(Date, "mm/dd/yyyy") If Range("f" & i) = "" Then Range("v" & i) = "" Range("g" & i) = "" Exit Sub End If Range("g" & i) = Evaluate("DATEDIF(" & """" & date1 _ & """" & "," & """" & date2 & """" & "," & """Y""" & ")")
If Range("G" & i) > 1 And Range("G" & i) < 50 Then Range("V" & i) = "<50" End If If Range("G" & i) > 50 And Range("G" & i) < 100 Then Range("V" & i) = ">50" End If End Sub -- Avec plaisir http://dj.joss.free.fr/trombine.htm http://jacxl.free.fr/mpfe/trombino.html Philippe.R Pour se connecter au forum : http://www.excelabo.net/mpfe/connexion.php News://news.microsoft.com/microsoft.public.fr.excel "magic-dd" a écrit dans le message de news: salut
voila il y aune panne lorque je veux supprimer les valeurs de la coonne date de naissance
il me met erreur d'execution 13
incompatibilite de type
en faisant debogage voici la ligne qui est inciminée
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
de plus lorsque je clique sur fin et que je veux que la procedure fonctionne normalement, tout est bloqué, bref aucune macro ne marche dans le module worksheet_change
je vous joint le fichier
merci
http://cjoint.com/?huvAglaEAY
Fredo P
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Byte Application.EnableEvents = False 'Si tu sort de la procédure avant 'Application.EnableEvents = True' ' tu te retrouve dans la situation ou Excel est bloqué ce qui n'est pas grave puisqu'il suffit de remettre à True 'Application.EnableEvents' 'C'est une faute de ma part, avec cette commande il est souhaitable d' inclure une gestion d'erreur dans la proc. calcul_age. Pour rétablir la situation. exécuter Répar()
'§§§§ À la ligne suivante j'y ai ajouté une condition qui gére le problème If Not Intersect([f2:f500], Target) Is Nothing then i=Target.Row If IsDate(Target) Then calcul_age (i) Else If Range("f" & i) = "" Then Range("v" & i) = "" Range("g" & i) = "" End If End If End If Application.EnableEvents = True End Sub
§§§§§§§§§§§§§§§§§§§
Sub calcul_age(i) On Error GoTo Gesterr date1 = Format(Cells(i, 6), "mm/dd/yyyy") date2 = Format(Date, "mm/dd/yyyy") Range("g" & i) = Evaluate("DATEDIF(" & """" & date1 & """" & "," & """" & date2 & """" & "," & """Y""" & ")") If Range("W" & i) = "X" And Range("X" & i) = "X" And Range("Y" & i) = "X" And Range("Z" & i) = "X" Then Range("AA" & i) = "4 EP" End If If Range("G" & i) > 1 And Range("G" & i) < 50 Then Range("V" & i) = "<50" End If If Range("G" & i) > 50 And Range("G" & i) < 100 Then Range("V" & i) = ">50" End If Gesterr: Application.EnableEvents = True End Sub
§§§§§ Public Sub Répar() Application.EnableEvents = True End Sub
"magic-dd" a écrit dans le message de news:
salut
voila il y aune panne lorque je veux supprimer les valeurs de la coonne date de naissance
il me met erreur d'execution 13
incompatibilite de type
en faisant debogage voici la ligne qui est inciminée
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
de plus lorsque je clique sur fin et que je veux que la procedure fonctionne normalement, tout est bloqué, bref aucune macro ne marche dans le module worksheet_change
je vous joint le fichier
merci
http://cjoint.com/?huvAglaEAY
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Byte
Application.EnableEvents = False 'Si tu sort de la procédure avant
'Application.EnableEvents = True'
' tu te retrouve dans la situation ou Excel est bloqué ce qui n'est pas
grave puisqu'il suffit de remettre à True 'Application.EnableEvents'
'C'est une faute de ma part, avec cette commande il est souhaitable d'
inclure une gestion d'erreur dans la proc. calcul_age. Pour rétablir la
situation. exécuter Répar()
'§§§§ À la ligne suivante j'y ai ajouté une condition qui gére le problème
If Not Intersect([f2:f500], Target) Is Nothing then
i=Target.Row
If IsDate(Target) Then
calcul_age (i)
Else
If Range("f" & i) = "" Then
Range("v" & i) = ""
Range("g" & i) = ""
End If
End If
End If
Application.EnableEvents = True
End Sub
§§§§§§§§§§§§§§§§§§§
Sub calcul_age(i)
On Error GoTo Gesterr
date1 = Format(Cells(i, 6), "mm/dd/yyyy")
date2 = Format(Date, "mm/dd/yyyy")
Range("g" & i) = Evaluate("DATEDIF(" & """" & date1 & """" & "," & """" &
date2 & """" & "," & """Y""" & ")")
If Range("W" & i) = "X" And Range("X" & i) = "X" And Range("Y" & i) = "X"
And Range("Z" & i) = "X" Then
Range("AA" & i) = "4 EP"
End If
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
Range("V" & i) = "<50"
End If
If Range("G" & i) > 50 And Range("G" & i) < 100 Then
Range("V" & i) = ">50"
End If
Gesterr:
Application.EnableEvents = True
End Sub
§§§§§
Public Sub Répar()
Application.EnableEvents = True
End Sub
"magic-dd" <ciolandre@gmail.com> a écrit dans le message de news:
c55fe033-6e22-4c9a-a58f-8cc49183f1a5@l64g2000hse.googlegroups.com...
salut
voila il y aune panne lorque je veux supprimer les valeurs de la
coonne date de naissance
il me met erreur d'execution 13
incompatibilite de type
en faisant debogage voici la ligne qui est inciminée
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
de plus lorsque je clique sur fin et que je veux que la procedure
fonctionne normalement, tout est bloqué, bref aucune macro ne marche
dans le module worksheet_change
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Byte Application.EnableEvents = False 'Si tu sort de la procédure avant 'Application.EnableEvents = True' ' tu te retrouve dans la situation ou Excel est bloqué ce qui n'est pas grave puisqu'il suffit de remettre à True 'Application.EnableEvents' 'C'est une faute de ma part, avec cette commande il est souhaitable d' inclure une gestion d'erreur dans la proc. calcul_age. Pour rétablir la situation. exécuter Répar()
'§§§§ À la ligne suivante j'y ai ajouté une condition qui gére le problème If Not Intersect([f2:f500], Target) Is Nothing then i=Target.Row If IsDate(Target) Then calcul_age (i) Else If Range("f" & i) = "" Then Range("v" & i) = "" Range("g" & i) = "" End If End If End If Application.EnableEvents = True End Sub
§§§§§§§§§§§§§§§§§§§
Sub calcul_age(i) On Error GoTo Gesterr date1 = Format(Cells(i, 6), "mm/dd/yyyy") date2 = Format(Date, "mm/dd/yyyy") Range("g" & i) = Evaluate("DATEDIF(" & """" & date1 & """" & "," & """" & date2 & """" & "," & """Y""" & ")") If Range("W" & i) = "X" And Range("X" & i) = "X" And Range("Y" & i) = "X" And Range("Z" & i) = "X" Then Range("AA" & i) = "4 EP" End If If Range("G" & i) > 1 And Range("G" & i) < 50 Then Range("V" & i) = "<50" End If If Range("G" & i) > 50 And Range("G" & i) < 100 Then Range("V" & i) = ">50" End If Gesterr: Application.EnableEvents = True End Sub
§§§§§ Public Sub Répar() Application.EnableEvents = True End Sub
"magic-dd" a écrit dans le message de news:
salut
voila il y aune panne lorque je veux supprimer les valeurs de la coonne date de naissance
il me met erreur d'execution 13
incompatibilite de type
en faisant debogage voici la ligne qui est inciminée
If Range("G" & i) > 1 And Range("G" & i) < 50 Then
de plus lorsque je clique sur fin et que je veux que la procedure fonctionne normalement, tout est bloqué, bref aucune macro ne marche dans le module worksheet_change