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

Worksheet_Change plusieurs valeurs

9 réponses
Avatar
JulieH
Bonjour à toutes et tous,

J'ai souvent le même problème avec Worksheet_change et je ne vois pas
bien comment le résoudre. Je me décide donc à demander de l'aide :

Voici un exemple parmi d'autre :

Je saisis en colonne B un nombre et je souhaite qu'en colonne C, ce
nombre s'affiche en y ajoutant un autre chiffre figé en I5. Exemple :
3 en I5 - 2995 en B10 - 32995 en C10. La macro suivante fait cela
parfaitement :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
Target.Offset(, 1) = [I5] & Format(Target, "000")
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub

Le problème est le suivant : tout va bien si je saisis les nombres un à
un (B10 puis B11 puis B12...). Cependant quelquefois, je récupére une
liste entière de nombres dans un autre fichier que je copie directement
(par exemple copier coller de B10 à B35). Dans ce cas, s'il n'y a pas
"on error resume next", il y a un message d'erreur. S'il y a "On err...,
tout continue mais il n'y a rien qui s'affiche de C10 à C35.

Y-a-t-il une solution pour résoudre ce genre de problème ? Merci par
avance pour vos idées.

Julie

9 réponses

Avatar
JB
Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub

JB
http://boisgontierjacques.free.fr


On 21 sep, 10:54, JulieH wrote:
Bonjour à toutes et tous,

J'ai souvent le même problème avec Worksheet_change et je ne vois pas
bien comment le résoudre. Je me décide donc à demander de l'aide :

Voici un exemple parmi d'autre :

Je saisis en colonne B un nombre et je souhaite qu'en colonne C, ce
nombre s'affiche en y ajoutant un autre chiffre figé en I5. Exemple :
3 en I5 - 2995 en B10 - 32995 en C10. La macro suivante fait cela
parfaitement :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
Target.Offset(, 1) = [I5] & Format(Target, "000")
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub

Le problème est le suivant : tout va bien si je saisis les nomb res un à
un (B10 puis B11 puis B12...). Cependant quelquefois, je récupére une
liste entière de nombres dans un autre fichier que je copie directement
(par exemple copier coller de B10 à B35). Dans ce cas, s'il n'y a pas
"on error resume next", il y a un message d'erreur. S'il y a "On err...,
tout continue mais il n'y a rien qui s'affiche de C10 à C35.

Y-a-t-il une solution pour résoudre ce genre de problème ? Me rci par
avance pour vos idées.

Julie


Avatar
JulieH
Bonjour et merci pour ton aide,

Evidemment, il y a toujours une solution !!! La modification
fonctionne parfaitement pour ce que j'ai demandé.

Cependant, cela m'a permis de mettre en évidence un nouveau problème
: pour réaliser mes essais, j'ai effacé une plage de données en B et C
en laissant le nombre 4 en I5. La formule a permis d'indiquer 4 en
colonne C (normal, il a considéré qu'il y avait 0 en B) mais aussi 4004
en D. Pourquoi ? alors que normalement la colonne qui est concernée par
la formule est la 2, pas la 3.

De même, si à suivre, j'efface les données de la C, il me note 4 en
D. Et ainsi de suite, au point que je n'y arrive qu'en effaçant cellule
par cellule.

Je ne sais pas si c'est très clair. En résumé le problème est le
suivant : si je comprends bien le code, il permet de mettre une formule
en C lorsque on change quelque chose en colonne B (2). Or les
Worksheet_Change ont souvent des réactions plus compliquées que cela.
Y-a-t-il une explication et des moyens d'y remédier ?

Merci d'avance

Julie



Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub

JB
http://boisgontierjacques.free.fr


On 21 sep, 10:54, JulieH wrote:
Bonjour à toutes et tous,

J'ai souvent le même problème avec Worksheet_change et je ne vois pas
bien comment le résoudre. Je me décide donc à demander de l'aide :

Voici un exemple parmi d'autre :

Je saisis en colonne B un nombre et je souhaite qu'en colonne C, ce
nombre s'affiche en y ajoutant un autre chiffre figé en I5. Exemple :
3 en I5 - 2995 en B10 - 32995 en C10. La macro suivante fait cela
parfaitement :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
Target.Offset(, 1) = [I5] & Format(Target, "000")
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub

Le problème est le suivant : tout va bien si je saisis les nombres un à
un (B10 puis B11 puis B12...). Cependant quelquefois, je récupére une
liste entière de nombres dans un autre fichier que je copie directement
(par exemple copier coller de B10 à B35). Dans ce cas, s'il n'y a pas
"on error resume next", il y a un message d'erreur. S'il y a "On err...,
tout continue mais il n'y a rien qui s'affiche de C10 à C35.

Y-a-t-il une solution pour résoudre ce genre de problème ? Merci par
avance pour vos idées.

Julie






Avatar
JB
Je n'observe pas le pb sur mon poste.

Application.EnableEvents = False évite les événements endogènes.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Application.EnableEvents = False
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
Application.EnableEvents = True
End If
End Sub

JB

On 21 sep, 12:49, JulieH wrote:
Bonjour et merci pour ton aide,

Evidemment, il y a toujours une solution !!! La modification
fonctionne parfaitement pour ce que j'ai demandé.

Cependant, cela m'a permis de mettre en évidence un nouveau probl ème
: pour réaliser mes essais, j'ai effacé une plage de données en B e t C
en laissant le nombre 4 en I5. La formule a permis d'indiquer 4 en
colonne C (normal, il a considéré qu'il y avait 0 en B) mais aussi 40 04
en D. Pourquoi ? alors que normalement la colonne qui est concernée par
la formule est la 2, pas la 3.

De même, si à suivre, j'efface les données de la C, il me note 4 en
D. Et ainsi de suite, au point que je n'y arrive qu'en effaçant cellule
par cellule.

Je ne sais pas si c'est très clair. En résumé le problème est le
suivant : si je comprends bien le code, il permet de mettre une formule
en C lorsque on change quelque chose en colonne B (2). Or les
Worksheet_Change ont souvent des réactions plus compliquées que cela.
Y-a-t-il une explication et des moyens d'y remédier ?

Merci d'avance

Julie




Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub

JB
http://boisgontierjacques.free.fr

On 21 sep, 10:54, JulieH wrote:
Bonjour à toutes et tous,

J'ai souvent le même problème avec Worksheet_change et je ne vois pas
bien comment le résoudre. Je me décide donc à demander de l'aide :

Voici un exemple parmi d'autre :

Je saisis en colonne B un nombre et je souhaite qu'en colonne C, ce
nombre s'affiche en y ajoutant un autre chiffre figé en I5. Exemple :
3 en I5 - 2995 en B10 - 32995 en C10. La macro suivante fait cela
parfaitement :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
Target.Offset(, 1) = [I5] & Format(Target, "000")
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub

Le problème est le suivant : tout va bien si je saisis les n ombres un à
un (B10 puis B11 puis B12...). Cependant quelquefois, je récupére une
liste entière de nombres dans un autre fichier que je copie directem ent
(par exemple copier coller de B10 à B35). Dans ce cas, s'il n'y a pas
"on error resume next", il y a un message d'erreur. S'il y a "On err.. .,
tout continue mais il n'y a rien qui s'affiche de C10 à C35.

Y-a-t-il une solution pour résoudre ce genre de problème ? Merci par
avance pour vos idées.

Julie- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -




Avatar
JulieH
Effectivement, j'ai modifié avec tes deux lignes et cela fonctionne.

Comme je disais que c'est un type de problème que je rencontre souvent,
j'ai essayé dans un autre fichier avec un type d'erreur qui ressemble.
Malheureusement cela ne suffit pas.

Dans cet autre fichier, j'ai la macro suivante qui met des bordures de A
à U lorsque je saisis dans une cellule de A :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 1 And Target <> "" Then
Range(Target, Target.Offset(, 19)).Borders.Weight = xlHairline
End If
End sub

Tout se passe bien lorsque je saisis dans une cellule de A.
Tout se passe bien également lorsque je copie une plage en A (A1:A20
par exemple). Idem pour une plage A1:B20.
Tout se passe bien également si je saisis dans une cellule d'une autre
colonne (I par exemple).
En revanche, si je copie une plage en I (I1:I20 par exemple), il me met
les bordures sur les 19 colonnes suivantes.

Pour moi, en fonction du code, il ne devrait le faire que lorsque je
fais quelque chose en A !!!
EnableEvents n'y change rien.

Merci encore pour ton aide précieuse.
Julie

Je n'observe pas le pb sur mon poste.

Application.EnableEvents = False évite les événements endogènes.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Application.EnableEvents = False
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
Application.EnableEvents = True
End If
End Sub

JB

On 21 sep, 12:49, JulieH wrote:
Bonjour et merci pour ton aide,

Evidemment, il y a toujours une solution !!! La modification
fonctionne parfaitement pour ce que j'ai demandé.

Cependant, cela m'a permis de mettre en évidence un nouveau problème
: pour réaliser mes essais, j'ai effacé une plage de données en B et C
en laissant le nombre 4 en I5. La formule a permis d'indiquer 4 en
colonne C (normal, il a considéré qu'il y avait 0 en B) mais aussi 4004
en D. Pourquoi ? alors que normalement la colonne qui est concernée par
la formule est la 2, pas la 3.

De même, si à suivre, j'efface les données de la C, il me note 4 en
D. Et ainsi de suite, au point que je n'y arrive qu'en effaçant cellule
par cellule.

Je ne sais pas si c'est très clair. En résumé le problème est le
suivant : si je comprends bien le code, il permet de mettre une formule
en C lorsque on change quelque chose en colonne B (2). Or les
Worksheet_Change ont souvent des réactions plus compliquées que cela.
Y-a-t-il une explication et des moyens d'y remédier ?

Merci d'avance

Julie




Bonjour,
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub
JB
http://boisgontierjacques.free.fr
On 21 sep, 10:54, JulieH wrote:
Bonjour à toutes et tous,
J'ai souvent le même problème avec Worksheet_change et je ne vois pas
bien comment le résoudre. Je me décide donc à demander de l'aide :
Voici un exemple parmi d'autre :
Je saisis en colonne B un nombre et je souhaite qu'en colonne C, ce
nombre s'affiche en y ajoutant un autre chiffre figé en I5. Exemple :
3 en I5 - 2995 en B10 - 32995 en C10. La macro suivante fait cela
parfaitement :
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
Target.Offset(, 1) = [I5] & Format(Target, "000")
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub
Le problème est le suivant : tout va bien si je saisis les nombres un à
un (B10 puis B11 puis B12...). Cependant quelquefois, je récupére une
liste entière de nombres dans un autre fichier que je copie directement
(par exemple copier coller de B10 à B35). Dans ce cas, s'il n'y a pas
"on error resume next", il y a un message d'erreur. S'il y a "On err...,
tout continue mais il n'y a rien qui s'affiche de C10 à C35.
Y-a-t-il une solution pour résoudre ce genre de problème ? Merci par
avance pour vos idées.
Julie- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -










Avatar
Boisgontier
Si saisie mono-cellule:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
Range(Target, Target.Offset(, 19)).Borders.Weight = xlHairline
End If
End Sub

Si saisie multi-cellules:

Private Sub Worksheet_Change(ByVal Target As Range)
For Each c In Target
If c.Column = 1 Then
Range(c, c.Offset(, 19)).Borders.Weight = xlHairline
End If
Next
End Sub

JB



"JulieH" a écrit dans le message de news:
%23npZzWE$
Effectivement, j'ai modifié avec tes deux lignes et cela fonctionne.

Comme je disais que c'est un type de problème que je rencontre souvent,
j'ai essayé dans un autre fichier avec un type d'erreur qui ressemble.
Malheureusement cela ne suffit pas.

Dans cet autre fichier, j'ai la macro suivante qui met des bordures de A à
U lorsque je saisis dans une cellule de A :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 1 And Target <> "" Then
Range(Target, Target.Offset(, 19)).Borders.Weight = xlHairline
End If
End sub

Tout se passe bien lorsque je saisis dans une cellule de A.
Tout se passe bien également lorsque je copie une plage en A (A1:A20 par
exemple). Idem pour une plage A1:B20.
Tout se passe bien également si je saisis dans une cellule d'une autre
colonne (I par exemple).
En revanche, si je copie une plage en I (I1:I20 par exemple), il me met
les bordures sur les 19 colonnes suivantes.

Pour moi, en fonction du code, il ne devrait le faire que lorsque je fais
quelque chose en A !!!
EnableEvents n'y change rien.

Merci encore pour ton aide précieuse.
Julie

Je n'observe pas le pb sur mon poste.

Application.EnableEvents = False évite les événements endogènes.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Application.EnableEvents = False
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
Application.EnableEvents = True
End If
End Sub

JB

On 21 sep, 12:49, JulieH wrote:
Bonjour et merci pour ton aide,

Evidemment, il y a toujours une solution !!! La modification
fonctionne parfaitement pour ce que j'ai demandé.

Cependant, cela m'a permis de mettre en évidence un nouveau problème
: pour réaliser mes essais, j'ai effacé une plage de données en B et C
en laissant le nombre 4 en I5. La formule a permis d'indiquer 4 en
colonne C (normal, il a considéré qu'il y avait 0 en B) mais aussi 4004
en D. Pourquoi ? alors que normalement la colonne qui est concernée par
la formule est la 2, pas la 3.

De même, si à suivre, j'efface les données de la C, il me note 4 en
D. Et ainsi de suite, au point que je n'y arrive qu'en effaçant cellule
par cellule.

Je ne sais pas si c'est très clair. En résumé le problème est le
suivant : si je comprends bien le code, il permet de mettre une formule
en C lorsque on change quelque chose en colonne B (2). Or les
Worksheet_Change ont souvent des réactions plus compliquées que cela.
Y-a-t-il une explication et des moyens d'y remédier ?

Merci d'avance

Julie




Bonjour,
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub
JB
http://boisgontierjacques.free.fr
On 21 sep, 10:54, JulieH wrote:
Bonjour à toutes et tous,
J'ai souvent le même problème avec Worksheet_change et je ne
vois pas
bien comment le résoudre. Je me décide donc à demander de l'aide :
Voici un exemple parmi d'autre :
Je saisis en colonne B un nombre et je souhaite qu'en colonne C, ce
nombre s'affiche en y ajoutant un autre chiffre figé en I5. Exemple :
3 en I5 - 2995 en B10 - 32995 en C10. La macro suivante fait cela
parfaitement :
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
Target.Offset(, 1) = [I5] & Format(Target, "000")
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub
Le problème est le suivant : tout va bien si je saisis les
nombres un à
un (B10 puis B11 puis B12...). Cependant quelquefois, je récupére une
liste entière de nombres dans un autre fichier que je copie
directement
(par exemple copier coller de B10 à B35). Dans ce cas, s'il n'y a pas
"on error resume next", il y a un message d'erreur. S'il y a "On
err...,
tout continue mais il n'y a rien qui s'affiche de C10 à C35.
Y-a-t-il une solution pour résoudre ce genre de problème ?
Merci par
avance pour vos idées.
Julie- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -











Avatar
JulieH
Si je comprends bien, on ne peut pas gérer les deux en même temps dans
une même feuille ?

Julie

Si saisie mono-cellule:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
Range(Target, Target.Offset(, 19)).Borders.Weight = xlHairline
End If
End Sub

Si saisie multi-cellules:

Private Sub Worksheet_Change(ByVal Target As Range)
For Each c In Target
If c.Column = 1 Then
Range(c, c.Offset(, 19)).Borders.Weight = xlHairline
End If
Next
End Sub

JB



"JulieH" a écrit dans le message de news:
%23npZzWE$
Effectivement, j'ai modifié avec tes deux lignes et cela fonctionne.

Comme je disais que c'est un type de problème que je rencontre souvent,
j'ai essayé dans un autre fichier avec un type d'erreur qui ressemble.
Malheureusement cela ne suffit pas.

Dans cet autre fichier, j'ai la macro suivante qui met des bordures de A à
U lorsque je saisis dans une cellule de A :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 1 And Target <> "" Then
Range(Target, Target.Offset(, 19)).Borders.Weight = xlHairline
End If
End sub

Tout se passe bien lorsque je saisis dans une cellule de A.
Tout se passe bien également lorsque je copie une plage en A (A1:A20 par
exemple). Idem pour une plage A1:B20.
Tout se passe bien également si je saisis dans une cellule d'une autre
colonne (I par exemple).
En revanche, si je copie une plage en I (I1:I20 par exemple), il me met
les bordures sur les 19 colonnes suivantes.

Pour moi, en fonction du code, il ne devrait le faire que lorsque je fais
quelque chose en A !!!
EnableEvents n'y change rien.

Merci encore pour ton aide précieuse.
Julie

Je n'observe pas le pb sur mon poste.

Application.EnableEvents = False évite les événements endogènes.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Application.EnableEvents = False
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
Application.EnableEvents = True
End If
End Sub

JB

On 21 sep, 12:49, JulieH wrote:
Bonjour et merci pour ton aide,

Evidemment, il y a toujours une solution !!! La modification
fonctionne parfaitement pour ce que j'ai demandé.

Cependant, cela m'a permis de mettre en évidence un nouveau problème
: pour réaliser mes essais, j'ai effacé une plage de données en B et C
en laissant le nombre 4 en I5. La formule a permis d'indiquer 4 en
colonne C (normal, il a considéré qu'il y avait 0 en B) mais aussi 4004
en D. Pourquoi ? alors que normalement la colonne qui est concernée par
la formule est la 2, pas la 3.

De même, si à suivre, j'efface les données de la C, il me note 4 en
D. Et ainsi de suite, au point que je n'y arrive qu'en effaçant cellule
par cellule.

Je ne sais pas si c'est très clair. En résumé le problème est le
suivant : si je comprends bien le code, il permet de mettre une formule
en C lorsque on change quelque chose en colonne B (2). Or les
Worksheet_Change ont souvent des réactions plus compliquées que cela.
Y-a-t-il une explication et des moyens d'y remédier ?

Merci d'avance

Julie




Bonjour,
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub
JB
http://boisgontierjacques.free.fr
On 21 sep, 10:54, JulieH wrote:
Bonjour à toutes et tous,
J'ai souvent le même problème avec Worksheet_change et je ne
vois pas
bien comment le résoudre. Je me décide donc à demander de l'aide :
Voici un exemple parmi d'autre :
Je saisis en colonne B un nombre et je souhaite qu'en colonne C, ce
nombre s'affiche en y ajoutant un autre chiffre figé en I5. Exemple :
3 en I5 - 2995 en B10 - 32995 en C10. La macro suivante fait cela
parfaitement :
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
Target.Offset(, 1) = [I5] & Format(Target, "000")
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub
Le problème est le suivant : tout va bien si je saisis les
nombres un à
un (B10 puis B11 puis B12...). Cependant quelquefois, je récupére une
liste entière de nombres dans un autre fichier que je copie
directement
(par exemple copier coller de B10 à B35). Dans ce cas, s'il n'y a pas
"on error resume next", il y a un message d'erreur. S'il y a "On
err...,
tout continue mais il n'y a rien qui s'affiche de C10 à C35.
Y-a-t-il une solution pour résoudre ce genre de problème ?
Merci par
avance pour vos idées.
Julie- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -













Avatar
Boisgontier
Prendre Multi-cellules .

JB
"JulieH" a écrit dans le message de news:
uw9ny0E$
Si je comprends bien, on ne peut pas gérer les deux en même temps dans une
même feuille ?

Julie

Si saisie mono-cellule:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
Range(Target, Target.Offset(, 19)).Borders.Weight = xlHairline
End If
End Sub

Si saisie multi-cellules:

Private Sub Worksheet_Change(ByVal Target As Range)
For Each c In Target
If c.Column = 1 Then
Range(c, c.Offset(, 19)).Borders.Weight = xlHairline
End If
Next
End Sub

JB



"JulieH" a écrit dans le message de
news: %23npZzWE$
Effectivement, j'ai modifié avec tes deux lignes et cela fonctionne.

Comme je disais que c'est un type de problème que je rencontre souvent,
j'ai essayé dans un autre fichier avec un type d'erreur qui ressemble.
Malheureusement cela ne suffit pas.

Dans cet autre fichier, j'ai la macro suivante qui met des bordures de A
à U lorsque je saisis dans une cellule de A :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 1 And Target <> "" Then
Range(Target, Target.Offset(, 19)).Borders.Weight = xlHairline
End If
End sub

Tout se passe bien lorsque je saisis dans une cellule de A.
Tout se passe bien également lorsque je copie une plage en A (A1:A20
par exemple). Idem pour une plage A1:B20.
Tout se passe bien également si je saisis dans une cellule d'une autre
colonne (I par exemple).
En revanche, si je copie une plage en I (I1:I20 par exemple), il me met
les bordures sur les 19 colonnes suivantes.

Pour moi, en fonction du code, il ne devrait le faire que lorsque je
fais quelque chose en A !!!
EnableEvents n'y change rien.

Merci encore pour ton aide précieuse.
Julie

Je n'observe pas le pb sur mon poste.

Application.EnableEvents = False évite les événements endogènes.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
Application.EnableEvents = False
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
Application.EnableEvents = True
End If
End Sub

JB

On 21 sep, 12:49, JulieH wrote:
Bonjour et merci pour ton aide,

Evidemment, il y a toujours une solution !!! La modification
fonctionne parfaitement pour ce que j'ai demandé.

Cependant, cela m'a permis de mettre en évidence un nouveau
problème
: pour réaliser mes essais, j'ai effacé une plage de données en B et C
en laissant le nombre 4 en I5. La formule a permis d'indiquer 4 en
colonne C (normal, il a considéré qu'il y avait 0 en B) mais aussi
4004
en D. Pourquoi ? alors que normalement la colonne qui est concernée
par
la formule est la 2, pas la 3.

De même, si à suivre, j'efface les données de la C, il me note 4
en
D. Et ainsi de suite, au point que je n'y arrive qu'en effaçant
cellule
par cellule.

Je ne sais pas si c'est très clair. En résumé le problème est le
suivant : si je comprends bien le code, il permet de mettre une
formule
en C lorsque on change quelque chose en colonne B (2). Or les
Worksheet_Change ont souvent des réactions plus compliquées que cela.
Y-a-t-il une explication et des moyens d'y remédier ?

Merci d'avance

Julie




Bonjour,
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub
JB
http://boisgontierjacques.free.fr
On 21 sep, 10:54, JulieH wrote:
Bonjour à toutes et tous,
J'ai souvent le même problème avec Worksheet_change et je ne
vois pas
bien comment le résoudre. Je me décide donc à demander de l'aide :
Voici un exemple parmi d'autre :
Je saisis en colonne B un nombre et je souhaite qu'en colonne C, ce
nombre s'affiche en y ajoutant un autre chiffre figé en I5. Exemple
:
3 en I5 - 2995 en B10 - 32995 en C10. La macro suivante fait cela
parfaitement :
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
Target.Offset(, 1) = [I5] & Format(Target, "000")
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub
Le problème est le suivant : tout va bien si je saisis les
nombres un à
un (B10 puis B11 puis B12...). Cependant quelquefois, je récupére
une
liste entière de nombres dans un autre fichier que je copie
directement
(par exemple copier coller de B10 à B35). Dans ce cas, s'il n'y a
pas
"on error resume next", il y a un message d'erreur. S'il y a "On
err...,
tout continue mais il n'y a rien qui s'affiche de C10 à C35.
Y-a-t-il une solution pour résoudre ce genre de problème ?
Merci par
avance pour vos idées.
Julie- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -















Avatar
JB
http://boisgontierjacques.free.fr/pages_site/evenements.htm#SaisieMultiCell ules

JB

On 21 sep, 11:30, JB wrote:
Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub

JBhttp://boisgontierjacques.free.fr

On 21 sep, 10:54, JulieH wrote:



Bonjour à toutes et tous,

J'ai souvent le même problème avec Worksheet_change et je n e vois pas
bien comment le résoudre. Je me décide donc à demander de l'aide :

Voici un exemple parmi d'autre :

Je saisis en colonne B un nombre et je souhaite qu'en colonne C, ce
nombre s'affiche en y ajoutant un autre chiffre figé en I5. Exemple :
3 en I5 - 2995 en B10 - 32995 en C10. La macro suivante fait cela
parfaitement :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
Target.Offset(, 1) = [I5] & Format(Target, "000")
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub

Le problème est le suivant : tout va bien si je saisis les no mbres un à
un (B10 puis B11 puis B12...). Cependant quelquefois, je récupére u ne
liste entière de nombres dans un autre fichier que je copie directeme nt
(par exemple copier coller de B10 à B35). Dans ce cas, s'il n'y a pas
"on error resume next", il y a un message d'erreur. S'il y a "On err...,
tout continue mais il n'y a rien qui s'affiche de C10 à C35.

Y-a-t-il une solution pour résoudre ce genre de problème ? Merci par
avance pour vos idées.

Julie- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
JulieH
Je pense que cela devrait aller. Merci encore.

Julie

http://boisgontierjacques.free.fr/pages_site/evenements.htm#SaisieMultiCellules

JB

On 21 sep, 11:30, JB wrote:
Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
For i = 1 To Target.Count
Target(i).Offset(, 1) = [I5] & Format(Target(i), "000")
Next i
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub

JBhttp://boisgontierjacques.free.fr

On 21 sep, 10:54, JulieH wrote:



Bonjour à toutes et tous,
J'ai souvent le même problème avec Worksheet_change et je ne vois pas
bien comment le résoudre. Je me décide donc à demander de l'aide :
Voici un exemple parmi d'autre :
Je saisis en colonne B un nombre et je souhaite qu'en colonne C, ce
nombre s'affiche en y ajoutant un autre chiffre figé en I5. Exemple :
3 en I5 - 2995 en B10 - 32995 en C10. La macro suivante fait cela
parfaitement :
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And Target <> "" Then
Target.Offset(, 1) = [I5] & Format(Target, "000")
If [I5] = "" Then
MsgBox "Saisir un nombre en G5"
End If
End If
End Sub
Le problème est le suivant : tout va bien si je saisis les nombres un à
un (B10 puis B11 puis B12...). Cependant quelquefois, je récupére une
liste entière de nombres dans un autre fichier que je copie directement
(par exemple copier coller de B10 à B35). Dans ce cas, s'il n'y a pas
"on error resume next", il y a un message d'erreur. S'il y a "On err...,
tout continue mais il n'y a rien qui s'affiche de C10 à C35.
Y-a-t-il une solution pour résoudre ce genre de problème ? Merci par
avance pour vos idées.
Julie- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -