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

proc évènementielle trop zélée

5 réponses
Avatar
J
Bonjour à tous(tes)
J'essaie que la dernière ligne renseignée dans une feuille de saisie
soit copiée dans une autre feuille, en fonction de la lettre saisie en
colonne E.

Malheureusement, cette procédure me copie autant de fois la ligne que la
valeur n de cette ligne.
SVP, comment éviter cela?
Merci
'******
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

For n = 3 To Range("E65536").End(xlUp).Row
niveau = Range("E" & n)
Application.EnableEvents = False
If IsNumeric(niveau) = False Then niveau = UCase(niveau)
'ceci marche, bien que le caractère saisi reste comme il a été saisi

Select Case Left(niveau, 1) 'comment aussi mettre le UCase ici??
'ne considère que le caractère de gauche de la saisie
Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
Next n
Application.EnableEvents = True
End Sub
'******
@+
J@@

5 réponses

Avatar
LSteph
Bonjour,

...autant de fois la ligne que la
valeur n de cette ligne.
presque,, en fait de 3 jusqu'à la valeur

C'est ce que tu as mis en boucle:
Pour chaque ligne de 3 à la dernière remplie
écris moi Sheets("Saisie").Range... en Sheets("Recettes").Range(...

Voir ci après rectif.

Amicales salutations.

--
lSteph


Essaie ainsi:

'******
Private Sub Worksheet_Change(ByVal Target As Range)
Dim niveau As Range
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Set niveau = Range("E65536").End(xlUp)

If Target.Row < niveau.Row Then Exit Sub

Application.EnableEvents = False
If IsNumeric(niveau.Value) = False Then

Select Case UCase(Left(niveau, 1))

Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
End If

Application.EnableEvents = True
End Sub

Bonjour à tous(tes)
J'essaie que la dernière ligne renseignée dans une feuille de saisie
soit copiée dans une autre feuille, en fonction de la lettre saisie en
colonne E.

Malheureusement, cette procédure me copie autant de fois la ligne que la
valeur n de cette ligne.
SVP, comment éviter cela?
Merci
'******
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

For n = 3 To Range("E65536").End(xlUp).Row
niveau = Range("E" & n)
Application.EnableEvents = False
If IsNumeric(niveau) = False Then niveau = UCase(niveau)
'ceci marche, bien que le caractère saisi reste comme il a été saisi

Select Case Left(niveau, 1) 'comment aussi mettre le UCase ici??
'ne considère que le caractère de gauche de la saisie
Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
Next n
Application.EnableEvents = True
End Sub
'******
@+
J@@


Avatar
LSteph
...remarque importante

j'ai aussi ajouté ceci:
If Target.Row < niveau.Row Then Exit Sub

ainsi lorsque tu rectifie une ligne d'au dessus cela n'ira pas copier la
dernière.
ATTENTION!!!
Reste que dans ce système il y a un risque d'erreur important!
Car c'est bien beau d'aller écrire la dernière ligne si celles qui sont
rectifiées au-dessus dans saisie ne le sont jamais dans recettes

A ta place je mettrais plutôt un filtre élaboré sur critère recette dans
recettes et un autre je suppose dans dépenses sur critère dépense

Il me sortirait ainsi uniquement les enregistrements dont j'ai besoin
dans leur feuille respective.

@+

--
lSteph

Bonjour,

...autant de fois la ligne que la
valeur n de cette ligne.
presque,, en fait de 3 jusqu'à la valeur

C'est ce que tu as mis en boucle:
Pour chaque ligne de 3 à la dernière remplie
écris moi Sheets("Saisie").Range... en Sheets("Recettes").Range(...

Voir ci après rectif.

Amicales salutations.

--
lSteph


Essaie ainsi:

'******
Private Sub Worksheet_Change(ByVal Target As Range)
Dim niveau As Range
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Set niveau = Range("E65536").End(xlUp)

If Target.Row < niveau.Row Then Exit Sub

Application.EnableEvents = False
If IsNumeric(niveau.Value) = False Then

Select Case UCase(Left(niveau, 1))

Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
End If

Application.EnableEvents = True
End Sub

Bonjour à tous(tes)
J'essaie que la dernière ligne renseignée dans une feuille de saisie
soit copiée dans une autre feuille, en fonction de la lettre saisie en
colonne E.

Malheureusement, cette procédure me copie autant de fois la ligne que
la valeur n de cette ligne.
SVP, comment éviter cela?
Merci
'******
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

For n = 3 To Range("E65536").End(xlUp).Row
niveau = Range("E" & n)
Application.EnableEvents = False
If IsNumeric(niveau) = False Then niveau = UCase(niveau)
'ceci marche, bien que le caractère saisi reste comme il a été saisi

Select Case Left(niveau, 1) 'comment aussi mettre le UCase ici??
'ne considère que le caractère de gauche de la saisie
Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
Next n
Application.EnableEvents = True
End Sub
'******
@+
J@@




Avatar
J
Bonjour LSteph
Merci pour ces corrections.
Aussi bien pour Ucase que pour ce problème de lignes.
Amicalement
@+
J@@

Bonjour,

...autant de fois la ligne que la
valeur n de cette ligne.
presque,, en fait de 3 jusqu'à la valeur

C'est ce que tu as mis en boucle:
Pour chaque ligne de 3 à la dernière remplie
écris moi Sheets("Saisie").Range... en Sheets("Recettes").Range(...

Voir ci après rectif.

Amicales salutations.

--
lSteph


Essaie ainsi:

'******
Private Sub Worksheet_Change(ByVal Target As Range)
Dim niveau As Range
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Set niveau = Range("E65536").End(xlUp)

If Target.Row < niveau.Row Then Exit Sub

Application.EnableEvents = False
If IsNumeric(niveau.Value) = False Then

Select Case UCase(Left(niveau, 1))

Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
End If

Application.EnableEvents = True
End Sub

Bonjour à tous(tes)
J'essaie que la dernière ligne renseignée dans une feuille de saisie
soit copiée dans une autre feuille, en fonction de la lettre saisie en
colonne E.

Malheureusement, cette procédure me copie autant de fois la ligne que
la valeur n de cette ligne.
SVP, comment éviter cela?
Merci
'******
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

For n = 3 To Range("E65536").End(xlUp).Row
niveau = Range("E" & n)
Application.EnableEvents = False
If IsNumeric(niveau) = False Then niveau = UCase(niveau)
'ceci marche, bien que le caractère saisi reste comme il a été saisi

Select Case Left(niveau, 1) 'comment aussi mettre le UCase ici??
'ne considère que le caractère de gauche de la saisie
Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
Next n
Application.EnableEvents = True
End Sub
'******
@+
J@@




Avatar
J
Re-bonjour
excellent remarque, l'erreur arrive parfois, et je gardais cette
préoccupation dans un coin de mon mouchoir sans vraiment y chercher remède.
Je n'ai jamais regardé de près les filtres élaborés, mais je suppose que
je dois pouvoir traiter différents types de recettes et différents types
de dépenses "à la fois"?
Je vais faire cela dès que possible, d'ici une douzaine d'heures, je
repasse si je coince.
Mmerci
Amicalement
@+
J@@


....remarque importante

j'ai aussi ajouté ceci:
If Target.Row < niveau.Row Then Exit Sub

ainsi lorsque tu rectifie une ligne d'au dessus cela n'ira pas copier la
dernière.
ATTENTION!!!
Reste que dans ce système il y a un risque d'erreur important!
Car c'est bien beau d'aller écrire la dernière ligne si celles qui sont
rectifiées au-dessus dans saisie ne le sont jamais dans recettes

A ta place je mettrais plutôt un filtre élaboré sur critère recette dans
recettes et un autre je suppose dans dépenses sur critère dépense

Il me sortirait ainsi uniquement les enregistrements dont j'ai besoin
dans leur feuille respective.

@+

--
lSteph

Bonjour,

...autant de fois la ligne que la
valeur n de cette ligne.
presque,, en fait de 3 jusqu'à la valeur

C'est ce que tu as mis en boucle:
Pour chaque ligne de 3 à la dernière remplie
écris moi Sheets("Saisie").Range... en Sheets("Recettes").Range(...

Voir ci après rectif.

Amicales salutations.

--
lSteph


Essaie ainsi:

'******
Private Sub Worksheet_Change(ByVal Target As Range)
Dim niveau As Range
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Set niveau = Range("E65536").End(xlUp)

If Target.Row < niveau.Row Then Exit Sub

Application.EnableEvents = False
If IsNumeric(niveau.Value) = False Then

Select Case UCase(Left(niveau, 1))

Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
End If

Application.EnableEvents = True
End Sub

Bonjour à tous(tes)
J'essaie que la dernière ligne renseignée dans une feuille de saisie
soit copiée dans une autre feuille, en fonction de la lettre saisie
en colonne E.

Malheureusement, cette procédure me copie autant de fois la ligne que
la valeur n de cette ligne.
SVP, comment éviter cela?
Merci
'******
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

For n = 3 To Range("E65536").End(xlUp).Row
niveau = Range("E" & n)
Application.EnableEvents = False
If IsNumeric(niveau) = False Then niveau = UCase(niveau)
'ceci marche, bien que le caractère saisi reste comme il a été saisi

Select Case Left(niveau, 1) 'comment aussi mettre le UCase ici??
'ne considère que le caractère de gauche de la saisie
Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
Next n
Application.EnableEvents = True
End Sub
'******
@+
J@@






Avatar
J
Re-bonjour
excellent remarque, l'erreur arrive parfois, et je gardais cette
préoccupation dans un coin de mon mouchoir sans vraiment y chercher remède.
Je n'ai jamais regardé de près les filtres élaborés, mais je suppose que
je dois pouvoir traiter différents types de recettes et différents types
de dépenses "à la fois"?
Je vais faire cela dès que possible, d'ici une douzaine d'heures, je
repasse si je coince.
Mmerci
Amicalement
@+
J@@


....remarque importante

j'ai aussi ajouté ceci:
If Target.Row < niveau.Row Then Exit Sub

ainsi lorsque tu rectifie une ligne d'au dessus cela n'ira pas copier la
dernière.
ATTENTION!!!
Reste que dans ce système il y a un risque d'erreur important!
Car c'est bien beau d'aller écrire la dernière ligne si celles qui sont
rectifiées au-dessus dans saisie ne le sont jamais dans recettes

A ta place je mettrais plutôt un filtre élaboré sur critère recette dans
recettes et un autre je suppose dans dépenses sur critère dépense

Il me sortirait ainsi uniquement les enregistrements dont j'ai besoin
dans leur feuille respective.

@+

--
lSteph

Bonjour,

...autant de fois la ligne que la
valeur n de cette ligne.
presque,, en fait de 3 jusqu'à la valeur

C'est ce que tu as mis en boucle:
Pour chaque ligne de 3 à la dernière remplie
écris moi Sheets("Saisie").Range... en Sheets("Recettes").Range(...

Voir ci après rectif.

Amicales salutations.

--
lSteph


Essaie ainsi:

'******
Private Sub Worksheet_Change(ByVal Target As Range)
Dim niveau As Range
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Set niveau = Range("E65536").End(xlUp)

If Target.Row < niveau.Row Then Exit Sub

Application.EnableEvents = False
If IsNumeric(niveau.Value) = False Then

Select Case UCase(Left(niveau, 1))

Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
End If

Application.EnableEvents = True
End Sub

Bonjour à tous(tes)
J'essaie que la dernière ligne renseignée dans une feuille de saisie
soit copiée dans une autre feuille, en fonction de la lettre saisie
en colonne E.

Malheureusement, cette procédure me copie autant de fois la ligne que
la valeur n de cette ligne.
SVP, comment éviter cela?
Merci
'******
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 5 Or Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

For n = 3 To Range("E65536").End(xlUp).Row
niveau = Range("E" & n)
Application.EnableEvents = False
If IsNumeric(niveau) = False Then niveau = UCase(niveau)
'ceci marche, bien que le caractère saisi reste comme il a été saisi

Select Case Left(niveau, 1) 'comment aussi mettre le UCase ici??
'ne considère que le caractère de gauche de la saisie
Case "R"
Sheets("Recettes").Range("a65536").End(xlUp). _
Offset(1, 0).EntireRow.Value _
= Sheets("Saisie").Range("a65536").End(xlUp). _
EntireRow.Value
'Case ...
End Select
Next n
Application.EnableEvents = True
End Sub
'******
@+
J@@