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

eviter de faire une boucle dans toutes les lignes

15 réponses
Avatar
magic-dd
bonjour

j'ai un classeur avec 500 lignes

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


merci

5 réponses

1 2
Avatar
Philippe.R
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!!



Avatar
magic-dd
salut

voila tout est parfait

j'ai pu adapter tous mes modules

un grand merci à tous
Avatar
magic-dd
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
Avatar
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
Avatar
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
1 2