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

Répéter une procédure suivant saisie

3 réponses
Avatar
Chrisdolby
Bonjour,

j'essaie d'ecrire sur la feuil 3 une procédure qui se répèterait suivant la
saisie:

-en [a140:a10000], je saisie des nombres allant de 0 à 36.
-en [v140:v10000], j'obtiens des résultats conditionnés par cette procédure:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
If Not Intersect([a140:a10000], Target) Is Nothing Then
Application.EnableEvents = False

i = 140
If cells(i, 1) And Worksheets("feuil1").cells(i - 1, 39) <> "" And
Worksheets("feuil1").cells(i - 1, 39) = Worksheets("feuil1").cells(i, 39)
Then
cells(i, 22) = "[1]"
Else
cells(i, 22) = Worksheets("feuil1").cells(i, 39)
End If
End If
Application.EnableEvents = True
End Sub

Ma procédure fonctionne pour le moment que pour la ligne 140(et c'est
normale!).
Ce que je voudrais maintenant, c'est que quelque soit la ligne dans
[a140:a10000] ou je saisie un nombre (de 0 à 36), la procédure se décale ...
Par exemple si je saisie le nombre 14 en A175, je voudrais que la procédure
calcule en décalant la variable "i" comme ca:

If cells(i+35, 1) And Worksheets("feuil1").cells(i - 1+35, 39) <> "" And
Worksheets("feuil1").cells(i - 1+35, 39) = Worksheets("feuil1").cells(i+35,
39) Then
cells(i+35, 22) = "[1]"
Else
cells(i+35, 22) = Worksheets("feuil1").cells(i+35, 39)
End If

je souhaiterais qu'il ne tienne compte dans le "recalcul" que de la ligne
concernée donc qu'il ne recalcule pas celles dont le résultat a déjà été
obtenu.

merci!

Chris

3 réponses

Avatar
LSteph
Bonjour Chrisdolby,

Selon ton objectif, attention ceci
> If cells(i, 1) And Worksheets("feuil1").cells(i - 1, 39) <> ""

ne veut pas dire la même chose que
If cells(i, 1)<> "" And Worksheets("feuil1").cells(i - 1, 39) <> ""

> Ce que je voudrais maintenant, c'est que quelque soit la ligne dans
> [a140:a10000] ou je saisie un nombre (de 0 à 36), la procédure se
décale ...

Selon ce que tu suggères au bout de plusieurs saisies ta colonne 39 sera
truffée de [1]

Dis nous plus précisément "ce que tu veux faire" plutôt que "le comment
tu n'y arrive pas"


@+

--
lSteph

Chrisdolby a écrit :
Bonjour,

j'essaie d'ecrire sur la feuil 3 une procédure qui se répèterait suivant la
saisie:

-en [a140:a10000], je saisie des nombres allant de 0 à 36.
-en [v140:v10000], j'obtiens des résultats conditionnés par cette procédure:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
If Not Intersect([a140:a10000], Target) Is Nothing Then
Application.EnableEvents = False

i = 140
If cells(i, 1) And Worksheets("feuil1").cells(i - 1, 39) <> "" And
Worksheets("feuil1").cells(i - 1, 39) = Worksheets("feuil1").cells(i, 39)
Then
cells(i, 22) = "[1]"
Else
cells(i, 22) = Worksheets("feuil1").cells(i, 39)
End If
End If
Application.EnableEvents = True
End Sub

Ma procédure fonctionne pour le moment que pour la ligne 140(et c'est
normale!).
Ce que je voudrais maintenant, c'est que quelque soit la ligne dans
[a140:a10000] ou je saisie un nombre (de 0 à 36), la procédure se décale ...
Par exemple si je saisie le nombre 14 en A175, je voudrais que la procédure
calcule en décalant la variable "i" comme ca:

If cells(i+35, 1) And Worksheets("feuil1").cells(i - 1+35, 39) <> "" And
Worksheets("feuil1").cells(i - 1+35, 39) = Worksheets("feuil1").cells(i+35,
39) Then
cells(i+35, 22) = "[1]"
Else
cells(i+35, 22) = Worksheets("feuil1").cells(i+35, 39)
End If

je souhaiterais qu'il ne tienne compte dans le "recalcul" que de la ligne
concernée donc qu'il ne recalcule pas celles dont le résultat a déjà été
obtenu.

merci!

Chris




Avatar
Chrisdolby
Rebonjour

Tout d'abord, je reprecise que j'ecris mon code en feuil3.

Voilà en fait, j'aimerais que lorsque je saisie un nombre pouvant aller de 0
à 36, il me renvoit un résultat dans la même ligne en colonne 22(v).
Pour obtenir ce résultat, il doit consulter la même ligne ainsi que celle du
dessus dans la colonne 39 de la feuil1.

exemple:

je saisie 24 en A142, donc j'attends un résultat en v142.
Pour obtenir ce resultat, il doit consulter AM141 et AM142 de la feuil1.

donc en tenant compte de mes critères ca donnerait:

si la saisie est en a142 et que feuil1 AM141<>"" et que
feuil1 AM141= feuil1 Am142
alors v142 = "[1]"
sinon v142 = feuil1 AM142

il y a un rapport de ligne à exploiter mais je ne sais pas le faire:
si saisie a142, resultat v142, recherche feuil1 am142 (+ligne du dessus)

J'espere avoir été un peu plus clair.
Mon autre soucis était d'éviter qu'il recalcule tout à chaque saisie....
Merci pour votre aide!

Chris

"LSteph" a écrit :

Bonjour Chrisdolby,

Selon ton objectif, attention ceci
> If cells(i, 1) And Worksheets("feuil1").cells(i - 1, 39) <> ""

ne veut pas dire la même chose que
If cells(i, 1)<> "" And Worksheets("feuil1").cells(i - 1, 39) <> ""

> Ce que je voudrais maintenant, c'est que quelque soit la ligne dans
> [a140:a10000] ou je saisie un nombre (de 0 à 36), la procédure se
décale ...

Selon ce que tu suggères au bout de plusieurs saisies ta colonne 39 sera
truffée de [1]

Dis nous plus précisément "ce que tu veux faire" plutôt que "le comment
tu n'y arrive pas"


@+

--
lSteph

Chrisdolby a écrit :
> Bonjour,
>
> j'essaie d'ecrire sur la feuil 3 une procédure qui se répèterait suivant la
> saisie:
>
> -en [a140:a10000], je saisie des nombres allant de 0 à 36.
> -en [v140:v10000], j'obtiens des résultats conditionnés par cette procédure:
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> Dim i As Long
> If Not Intersect([a140:a10000], Target) Is Nothing Then
> Application.EnableEvents = False
>
> i = 140
> If cells(i, 1) And Worksheets("feuil1").cells(i - 1, 39) <> "" And
> Worksheets("feuil1").cells(i - 1, 39) = Worksheets("feuil1").cells(i, 39)
> Then
> cells(i, 22) = "[1]"
> Else
> cells(i, 22) = Worksheets("feuil1").cells(i, 39)
> End If
> End If
> Application.EnableEvents = True
> End Sub
>
> Ma procédure fonctionne pour le moment que pour la ligne 140(et c'est
> normale!).
> Ce que je voudrais maintenant, c'est que quelque soit la ligne dans
> [a140:a10000] ou je saisie un nombre (de 0 à 36), la procédure se décale ...
> Par exemple si je saisie le nombre 14 en A175, je voudrais que la procédure
> calcule en décalant la variable "i" comme ca:
>
> If cells(i+35, 1) And Worksheets("feuil1").cells(i - 1+35, 39) <> "" And
> Worksheets("feuil1").cells(i - 1+35, 39) = Worksheets("feuil1").cells(i+35,
> 39) Then
> cells(i+35, 22) = "[1]"
> Else
> cells(i+35, 22) = Worksheets("feuil1").cells(i+35, 39)
> End If
>
> je souhaiterais qu'il ne tienne compte dans le "recalcul" que de la ligne
> concernée donc qu'il ne recalcule pas celles dont le résultat a déjà été
> obtenu.
>
> merci!
>
> Chris
>
>



Avatar
LSteph
Bonjour,

> J'espere avoir été un peu plus clair.
oui un peu..mais reste qu'on n'en voit toujours pas la finalité et ceci
pose éminemment question d'autant que tu dis
> Mon autre soucis était d'éviter qu'il recalcule tout à chaque saisie....
Peux-tu mettre ton classeur en http:cjoint.com
et donner ici le lien obtenu qu'on essaie d'y voir clair.

Mais si j'ai compris, déjà sans vba,en v140 à recopier jusqu'en 10000
cela donnerait ceci:
=si(a140="";"";si(et(feuil1!am140<>"";feuil1!am140þuil1!am139);"[1]";feuil1!am140))

En vba je verrais à peu près ceci (non testé):

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iSect as range, i as long
set iSect=Intersect([a140:a10000], Target)
If iSect Is Nothing Then exit sub
Application.EnableEvents = False
If iSect.cells.count>1 then
msgbox "la procédure ne s'appliquera qu'à la 1ère cellule"
set isect=isect.cells(1)
end if
i=isect.row
with Feuil1
if .cells(i-1,39)<>"" and .cells(i-1,39)= .cells(i,39) then
isect.offset(0,21)="[1]"
else
isect.offset(0,21)= .cells(i,39)
end if
end with
end sub

'lSteph


Chrisdolby a écrit :
Rebonjour

Tout d'abord, je reprecise que j'ecris mon code en feuil3.

Voilà en fait, j'aimerais que lorsque je saisie un nombre pouvant aller de 0
à 36, il me renvoit un résultat dans la même ligne en colonne 22(v).
Pour obtenir ce résultat, il doit consulter la même ligne ainsi que celle du
dessus dans la colonne 39 de la feuil1.

exemple:

je saisie 24 en A142, donc j'attends un résultat en v142.
Pour obtenir ce resultat, il doit consulter AM141 et AM142 de la feuil1.

donc en tenant compte de mes critères ca donnerait:

si la saisie est en a142 et que feuil1 AM141<>"" et que
feuil1 AM141= feuil1 Am142
alors v142 = "[1]"
sinon v142 = feuil1 AM142

il y a un rapport de ligne à exploiter mais je ne sais pas le faire:
si saisie a142, resultat v142, recherche feuil1 am142 (+ligne du dessus)

J'espere avoir été un peu plus clair.
Mon autre soucis était d'éviter qu'il recalcule tout à chaque saisie....
Merci pour votre aide!

Chris

"LSteph" a écrit :

Bonjour Chrisdolby,

Selon ton objectif, attention ceci
> If cells(i, 1) And Worksheets("feuil1").cells(i - 1, 39) <> ""

ne veut pas dire la même chose que
If cells(i, 1)<> "" And Worksheets("feuil1").cells(i - 1, 39) <> ""

> Ce que je voudrais maintenant, c'est que quelque soit la ligne dans
> [a140:a10000] ou je saisie un nombre (de 0 à 36), la procédure se
décale ...

Selon ce que tu suggères au bout de plusieurs saisies ta colonne 39 sera
truffée de [1]

Dis nous plus précisément "ce que tu veux faire" plutôt que "le comment
tu n'y arrive pas"


@+

--
lSteph

Chrisdolby a écrit :
Bonjour,

j'essaie d'ecrire sur la feuil 3 une procédure qui se répèterait suivant la
saisie:

-en [a140:a10000], je saisie des nombres allant de 0 à 36.
-en [v140:v10000], j'obtiens des résultats conditionnés par cette procédure:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
If Not Intersect([a140:a10000], Target) Is Nothing Then
Application.EnableEvents = False

i = 140
If cells(i, 1) And Worksheets("feuil1").cells(i - 1, 39) <> "" And
Worksheets("feuil1").cells(i - 1, 39) = Worksheets("feuil1").cells(i, 39)
Then
cells(i, 22) = "[1]"
Else
cells(i, 22) = Worksheets("feuil1").cells(i, 39)
End If
End If
Application.EnableEvents = True
End Sub

Ma procédure fonctionne pour le moment que pour la ligne 140(et c'est
normale!).
Ce que je voudrais maintenant, c'est que quelque soit la ligne dans
[a140:a10000] ou je saisie un nombre (de 0 à 36), la procédure se décale ...
Par exemple si je saisie le nombre 14 en A175, je voudrais que la procédure
calcule en décalant la variable "i" comme ca:

If cells(i+35, 1) And Worksheets("feuil1").cells(i - 1+35, 39) <> "" And
Worksheets("feuil1").cells(i - 1+35, 39) = Worksheets("feuil1").cells(i+35,
39) Then
cells(i+35, 22) = "[1]"
Else
cells(i+35, 22) = Worksheets("feuil1").cells(i+35, 39)
End If

je souhaiterais qu'il ne tienne compte dans le "recalcul" que de la ligne
concernée donc qu'il ne recalcule pas celles dont le résultat a déjà été
obtenu.

merci!

Chris