Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide,
alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== >
Merci de votre aide.
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide,
alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== >
Merci de votre aide.
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide,
alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== >
Merci de votre aide.
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide, alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== >
Merci de votre aide.
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide, alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== >
Merci de votre aide.
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide, alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== >
Merci de votre aide.
bonjour,
en charchant à respecter d'assez près la structure de ton programme
tu mets les procédures uivantes dans le module Thisworkbook de ton projet et
ca marchera pour toutes les feuilles de ton classeur
Si tu veux que ca ne marche que pour quelques feuilles , il faut que tu
fasses un test sur sh.name dans la procédure suivante.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
If Intersect(Target, Range("C2:C600")) Is Nothing And Intersect(Target,
Range("F2:F600")) Is Nothing Then Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Not Intersect(Target, Range("C2:C600")) Is Nothing Then
movecell -1, 3, Target
Else
movecell 0, -3, Target
End If
Application.EnableEvents = True
End Sub
Sub movecell(ligne, col, cellinaction As Range)
If cellinaction = "" Then
cellinaction.Offset(0, -1) = ""
Else
cellinaction.Offset(0, -1) = Now
ActiveCell.Offset(ligne, col).Select
End If
End Sub
Espère avoir bien compris ton prioblème
A+Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide, alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== > >
Merci de votre aide.
bonjour,
en charchant à respecter d'assez près la structure de ton programme
tu mets les procédures uivantes dans le module Thisworkbook de ton projet et
ca marchera pour toutes les feuilles de ton classeur
Si tu veux que ca ne marche que pour quelques feuilles , il faut que tu
fasses un test sur sh.name dans la procédure suivante.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
If Intersect(Target, Range("C2:C600")) Is Nothing And Intersect(Target,
Range("F2:F600")) Is Nothing Then Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Not Intersect(Target, Range("C2:C600")) Is Nothing Then
movecell -1, 3, Target
Else
movecell 0, -3, Target
End If
Application.EnableEvents = True
End Sub
Sub movecell(ligne, col, cellinaction As Range)
If cellinaction = "" Then
cellinaction.Offset(0, -1) = ""
Else
cellinaction.Offset(0, -1) = Now
ActiveCell.Offset(ligne, col).Select
End If
End Sub
Espère avoir bien compris ton prioblème
A+
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide, alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== > >
Merci de votre aide.
bonjour,
en charchant à respecter d'assez près la structure de ton programme
tu mets les procédures uivantes dans le module Thisworkbook de ton projet et
ca marchera pour toutes les feuilles de ton classeur
Si tu veux que ca ne marche que pour quelques feuilles , il faut que tu
fasses un test sur sh.name dans la procédure suivante.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
If Intersect(Target, Range("C2:C600")) Is Nothing And Intersect(Target,
Range("F2:F600")) Is Nothing Then Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Not Intersect(Target, Range("C2:C600")) Is Nothing Then
movecell -1, 3, Target
Else
movecell 0, -3, Target
End If
Application.EnableEvents = True
End Sub
Sub movecell(ligne, col, cellinaction As Range)
If cellinaction = "" Then
cellinaction.Offset(0, -1) = ""
Else
cellinaction.Offset(0, -1) = Now
ActiveCell.Offset(ligne, col).Select
End If
End Sub
Espère avoir bien compris ton prioblème
A+Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide, alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== > >
Merci de votre aide.
re,
les Application.enablevents sont superfétatoires car les modifications
automatiques ayant lieu sur des cellules n'appartenant pas aux ranges
spécifiés (C2:C600 et F2:F600), il n'y a pas de risque de boucle
infernale.
J'attire toutefois ton attention sur le fait qu'une suppression de plus
d'une cellule provoque une erreur sur l'instruction If
Target.Offset(0, -1)
<> "" Then Exit Sub.
En conséquence et pour s'en prémunir, ecrire en haut de la procédure on
error resume next si tu enlèves les application.enableevents , autrement
gerer l'erreur par un gestionnaire en fin de programme pour rétablir
Application.enablevents=true
A+bonjour,
en charchant à respecter d'assez près la structure de ton programme
tu mets les procédures uivantes dans le module Thisworkbook de ton
projet et
ca marchera pour toutes les feuilles de ton classeur
Si tu veux que ca ne marche que pour quelques feuilles , il faut que tu
fasses un test sur sh.name dans la procédure suivante.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
Application.EnableEvents = False
If Intersect(Target, Range("C2:C600")) Is Nothing And Intersect(Target,
Range("F2:F600")) Is Nothing Then Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Not Intersect(Target, Range("C2:C600")) Is Nothing Then
movecell -1, 3, Target
Else
movecell 0, -3, Target
End If
Application.EnableEvents = True
End Sub
Sub movecell(ligne, col, cellinaction As Range)
If cellinaction = "" Then
cellinaction.Offset(0, -1) = ""
Else
cellinaction.Offset(0, -1) = Now
ActiveCell.Offset(ligne, col).Select
End If
End Sub
Espère avoir bien compris ton prioblème
A+Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide,
alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > > > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== > > >
Merci de votre aide.
re,
les Application.enablevents sont superfétatoires car les modifications
automatiques ayant lieu sur des cellules n'appartenant pas aux ranges
spécifiés (C2:C600 et F2:F600), il n'y a pas de risque de boucle
infernale.
J'attire toutefois ton attention sur le fait qu'une suppression de plus
d'une cellule provoque une erreur sur l'instruction If
Target.Offset(0, -1)
<> "" Then Exit Sub.
En conséquence et pour s'en prémunir, ecrire en haut de la procédure on
error resume next si tu enlèves les application.enableevents , autrement
gerer l'erreur par un gestionnaire en fin de programme pour rétablir
Application.enablevents=true
A+
bonjour,
en charchant à respecter d'assez près la structure de ton programme
tu mets les procédures uivantes dans le module Thisworkbook de ton
projet et
ca marchera pour toutes les feuilles de ton classeur
Si tu veux que ca ne marche que pour quelques feuilles , il faut que tu
fasses un test sur sh.name dans la procédure suivante.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
Application.EnableEvents = False
If Intersect(Target, Range("C2:C600")) Is Nothing And Intersect(Target,
Range("F2:F600")) Is Nothing Then Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Not Intersect(Target, Range("C2:C600")) Is Nothing Then
movecell -1, 3, Target
Else
movecell 0, -3, Target
End If
Application.EnableEvents = True
End Sub
Sub movecell(ligne, col, cellinaction As Range)
If cellinaction = "" Then
cellinaction.Offset(0, -1) = ""
Else
cellinaction.Offset(0, -1) = Now
ActiveCell.Offset(ligne, col).Select
End If
End Sub
Espère avoir bien compris ton prioblème
A+
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide,
alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > > > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== > > >
Merci de votre aide.
re,
les Application.enablevents sont superfétatoires car les modifications
automatiques ayant lieu sur des cellules n'appartenant pas aux ranges
spécifiés (C2:C600 et F2:F600), il n'y a pas de risque de boucle
infernale.
J'attire toutefois ton attention sur le fait qu'une suppression de plus
d'une cellule provoque une erreur sur l'instruction If
Target.Offset(0, -1)
<> "" Then Exit Sub.
En conséquence et pour s'en prémunir, ecrire en haut de la procédure on
error resume next si tu enlèves les application.enableevents , autrement
gerer l'erreur par un gestionnaire en fin de programme pour rétablir
Application.enablevents=true
A+bonjour,
en charchant à respecter d'assez près la structure de ton programme
tu mets les procédures uivantes dans le module Thisworkbook de ton
projet et
ca marchera pour toutes les feuilles de ton classeur
Si tu veux que ca ne marche que pour quelques feuilles , il faut que tu
fasses un test sur sh.name dans la procédure suivante.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
Application.EnableEvents = False
If Intersect(Target, Range("C2:C600")) Is Nothing And Intersect(Target,
Range("F2:F600")) Is Nothing Then Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Not Intersect(Target, Range("C2:C600")) Is Nothing Then
movecell -1, 3, Target
Else
movecell 0, -3, Target
End If
Application.EnableEvents = True
End Sub
Sub movecell(ligne, col, cellinaction As Range)
If cellinaction = "" Then
cellinaction.Offset(0, -1) = ""
Else
cellinaction.Offset(0, -1) = Now
ActiveCell.Offset(ligne, col).Select
End If
End Sub
Espère avoir bien compris ton prioblème
A+Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide,
alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > > > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== > > >
Merci de votre aide.
Bonsoir et merci de votre aide
Je vais essayer d'être plus précis:
-1ere étape
en colonne B: affichage automatique de la date du jour
si données(saisies par utilisateur) en colonne C
ex: valeur de B2 = date du jour dès que C2 a été rempli par l'utilisateur
du
classeur et qu'il a validé sa saisie par Entrée
-2ème étape
Lors de la validation de la saisie (par Entrée), selection automatique de
la
prochaine cellule à saisir
(dans l'exemple la cellule F2 sera selectionnée après que B2 soit remplie)
-3ème étape
L'utilisateur saisit les données en colonne F (dans l'exemple en F2), puis
valide (par touche Entrée)
La selection se fait alors sur la cellule juste en dessous de C2, donc en
C3
et ainsi de suite
(en colonne D et E , il y des formules basés sur le contenu de la colonne
C)
J'ai teste le code du précédent message
Il fonctionne, sauf qu'il inscrit la date également en colonne E.
(Je précise que le classeur est destinée à une personne débutante, qui ne
connait pas Excel, le but
étant de limité au maximum les saisies et manipulation qu'elle aura à
effectuer)
J'espère que j'ai décris clairement le but recherché.
Est qu'une autre voie (par userform par exemple) serait plus commode?
Par exemple un clic dans la cellule vide en colonne C->Userform1.Show
(avec
un TextBox.Caption=Format(Now,......), deux autres textbox, l'un pour
valeur
en C, l'autre pour valeur en F, et un commandbutton pour injecter les
valeurs saises dans l'userform dans la feuille active?
Ou dois-je offrir une formation sur Excel à ma collègue débutante?
Merci à ceux qui pourront m'aider en VBA...., et sont heureux de ne pas
connaitre ma collègue....
"anomymousA" a écrit dans le
message
de news:re,
les Application.enablevents sont superfétatoires car les modifications
automatiques ayant lieu sur des cellules n'appartenant pas aux ranges
spécifiés (C2:C600 et F2:F600), il n'y a pas de risque de boucle
infernale.J'attire toutefois ton attention sur le fait qu'une suppression de plus
d'une cellule provoque une erreur sur l'instruction If
Target.Offset(0, -1)<> "" Then Exit Sub.
En conséquence et pour s'en prémunir, ecrire en haut de la procédure on
error resume next si tu enlèves les application.enableevents , autrement
gerer l'erreur par un gestionnaire en fin de programme pour rétablir
Application.enablevents=true
A+bonjour,
en charchant à respecter d'assez près la structure de ton programme
tu mets les procédures uivantes dans le module Thisworkbook de ton
projet etca marchera pour toutes les feuilles de ton classeur
Si tu veux que ca ne marche que pour quelques feuilles , il faut que
tu
fasses un test sur sh.name dans la procédure suivante.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
Application.EnableEvents = False
If Intersect(Target, Range("C2:C600")) Is Nothing And
Intersect(Target,
Range("F2:F600")) Is Nothing Then Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Not Intersect(Target, Range("C2:C600")) Is Nothing Then
movecell -1, 3, Target
Else
movecell 0, -3, Target
End If
Application.EnableEvents = True
End Sub
Sub movecell(ligne, col, cellinaction As Range)
If cellinaction = "" Then
cellinaction.Offset(0, -1) = ""
Else
cellinaction.Offset(0, -1) = Now
ActiveCell.Offset(ligne, col).Select
End If
End Sub
Espère avoir bien compris ton prioblème
A+Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de
l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la
valide,
alorsla selection se fait sur la
cellule C3 etc etc ...
============================================= > > > > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== > > > >
Merci de votre aide.
Bonsoir et merci de votre aide
Je vais essayer d'être plus précis:
-1ere étape
en colonne B: affichage automatique de la date du jour
si données(saisies par utilisateur) en colonne C
ex: valeur de B2 = date du jour dès que C2 a été rempli par l'utilisateur
du
classeur et qu'il a validé sa saisie par Entrée
-2ème étape
Lors de la validation de la saisie (par Entrée), selection automatique de
la
prochaine cellule à saisir
(dans l'exemple la cellule F2 sera selectionnée après que B2 soit remplie)
-3ème étape
L'utilisateur saisit les données en colonne F (dans l'exemple en F2), puis
valide (par touche Entrée)
La selection se fait alors sur la cellule juste en dessous de C2, donc en
C3
et ainsi de suite
(en colonne D et E , il y des formules basés sur le contenu de la colonne
C)
J'ai teste le code du précédent message
Il fonctionne, sauf qu'il inscrit la date également en colonne E.
(Je précise que le classeur est destinée à une personne débutante, qui ne
connait pas Excel, le but
étant de limité au maximum les saisies et manipulation qu'elle aura à
effectuer)
J'espère que j'ai décris clairement le but recherché.
Est qu'une autre voie (par userform par exemple) serait plus commode?
Par exemple un clic dans la cellule vide en colonne C->Userform1.Show
(avec
un TextBox.Caption=Format(Now,......), deux autres textbox, l'un pour
valeur
en C, l'autre pour valeur en F, et un commandbutton pour injecter les
valeurs saises dans l'userform dans la feuille active?
Ou dois-je offrir une formation sur Excel à ma collègue débutante?
Merci à ceux qui pourront m'aider en VBA...., et sont heureux de ne pas
connaitre ma collègue....
"anomymousA" <anomymousA@discussions.microsoft.com> a écrit dans le
message
de news:A0FF2AE7-B887-4AAE-9D25-DC41EDB5F940@microsoft.com...
re,
les Application.enablevents sont superfétatoires car les modifications
automatiques ayant lieu sur des cellules n'appartenant pas aux ranges
spécifiés (C2:C600 et F2:F600), il n'y a pas de risque de boucle
infernale.
J'attire toutefois ton attention sur le fait qu'une suppression de plus
d'une cellule provoque une erreur sur l'instruction If
Target.Offset(0, -1)
<> "" Then Exit Sub.
En conséquence et pour s'en prémunir, ecrire en haut de la procédure on
error resume next si tu enlèves les application.enableevents , autrement
gerer l'erreur par un gestionnaire en fin de programme pour rétablir
Application.enablevents=true
A+
bonjour,
en charchant à respecter d'assez près la structure de ton programme
tu mets les procédures uivantes dans le module Thisworkbook de ton
projet et
ca marchera pour toutes les feuilles de ton classeur
Si tu veux que ca ne marche que pour quelques feuilles , il faut que
tu
fasses un test sur sh.name dans la procédure suivante.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
Application.EnableEvents = False
If Intersect(Target, Range("C2:C600")) Is Nothing And
Intersect(Target,
Range("F2:F600")) Is Nothing Then Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Not Intersect(Target, Range("C2:C600")) Is Nothing Then
movecell -1, 3, Target
Else
movecell 0, -3, Target
End If
Application.EnableEvents = True
End Sub
Sub movecell(ligne, col, cellinaction As Range)
If cellinaction = "" Then
cellinaction.Offset(0, -1) = ""
Else
cellinaction.Offset(0, -1) = Now
ActiveCell.Offset(ligne, col).Select
End If
End Sub
Espère avoir bien compris ton prioblème
A+
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de
l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la
valide,
alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > > > > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== > > > >
Merci de votre aide.
Bonsoir et merci de votre aide
Je vais essayer d'être plus précis:
-1ere étape
en colonne B: affichage automatique de la date du jour
si données(saisies par utilisateur) en colonne C
ex: valeur de B2 = date du jour dès que C2 a été rempli par l'utilisateur
du
classeur et qu'il a validé sa saisie par Entrée
-2ème étape
Lors de la validation de la saisie (par Entrée), selection automatique de
la
prochaine cellule à saisir
(dans l'exemple la cellule F2 sera selectionnée après que B2 soit remplie)
-3ème étape
L'utilisateur saisit les données en colonne F (dans l'exemple en F2), puis
valide (par touche Entrée)
La selection se fait alors sur la cellule juste en dessous de C2, donc en
C3
et ainsi de suite
(en colonne D et E , il y des formules basés sur le contenu de la colonne
C)
J'ai teste le code du précédent message
Il fonctionne, sauf qu'il inscrit la date également en colonne E.
(Je précise que le classeur est destinée à une personne débutante, qui ne
connait pas Excel, le but
étant de limité au maximum les saisies et manipulation qu'elle aura à
effectuer)
J'espère que j'ai décris clairement le but recherché.
Est qu'une autre voie (par userform par exemple) serait plus commode?
Par exemple un clic dans la cellule vide en colonne C->Userform1.Show
(avec
un TextBox.Caption=Format(Now,......), deux autres textbox, l'un pour
valeur
en C, l'autre pour valeur en F, et un commandbutton pour injecter les
valeurs saises dans l'userform dans la feuille active?
Ou dois-je offrir une formation sur Excel à ma collègue débutante?
Merci à ceux qui pourront m'aider en VBA...., et sont heureux de ne pas
connaitre ma collègue....
"anomymousA" a écrit dans le
message
de news:re,
les Application.enablevents sont superfétatoires car les modifications
automatiques ayant lieu sur des cellules n'appartenant pas aux ranges
spécifiés (C2:C600 et F2:F600), il n'y a pas de risque de boucle
infernale.J'attire toutefois ton attention sur le fait qu'une suppression de plus
d'une cellule provoque une erreur sur l'instruction If
Target.Offset(0, -1)<> "" Then Exit Sub.
En conséquence et pour s'en prémunir, ecrire en haut de la procédure on
error resume next si tu enlèves les application.enableevents , autrement
gerer l'erreur par un gestionnaire en fin de programme pour rétablir
Application.enablevents=true
A+bonjour,
en charchant à respecter d'assez près la structure de ton programme
tu mets les procédures uivantes dans le module Thisworkbook de ton
projet etca marchera pour toutes les feuilles de ton classeur
Si tu veux que ca ne marche que pour quelques feuilles , il faut que
tu
fasses un test sur sh.name dans la procédure suivante.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
Application.EnableEvents = False
If Intersect(Target, Range("C2:C600")) Is Nothing And
Intersect(Target,
Range("F2:F600")) Is Nothing Then Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Not Intersect(Target, Range("C2:C600")) Is Nothing Then
movecell -1, 3, Target
Else
movecell 0, -3, Target
End If
Application.EnableEvents = True
End Sub
Sub movecell(ligne, col, cellinaction As Range)
If cellinaction = "" Then
cellinaction.Offset(0, -1) = ""
Else
cellinaction.Offset(0, -1) = Now
ActiveCell.Offset(ligne, col).Select
End If
End Sub
Espère avoir bien compris ton prioblème
A+Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de
l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la
valide,
alorsla selection se fait sur la
cellule C3 etc etc ...
============================================= > > > > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== > > > >
Merci de votre aide.
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide,
alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== >
Merci de votre aide.
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide,
alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== >
Merci de votre aide.
Bonjour
J'utilise le code ci-dessous pour faciliter la saisie de l'utilisateur
(ce qui fonctionne bien)
je voudrais juste compléter le code pour que :
une fois dans la saisie effectuée dans la colonne F
la selection se fasse en en ligne C+1
Exemple:
L'utilisateur saisit en C2, la date du jour s'affiche en B2, puis la
selection se fait en F2, l'utilisateur effectue sa saisie, la valide,
alors
la selection se fait sur la
cellule C3 etc etc ...
============================================= > Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Target, Range("C2:C600")) Is Nothing Then: Exit Sub
If Target.Offset(0, -1) <> "" Then Exit Sub
If Target = "" Then
Target.Offset(0, -1) = ""
Else
Target.Offset(0, -1) = Now
ActiveCell.Offset(-1, 4).Range("A1").Select
End If
End Sub
============================================== >
Merci de votre aide.
En conséquence pour adapter le code il te faut remplacer dans la procédure
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
la ligne movecell 0, -3, Target
par Target.Offset(1, -3).Select
et ca marche !
Effectivement cela fonctionne
En conséquence pour adapter le code il te faut remplacer dans la procédure
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
la ligne movecell 0, -3, Target
par Target.Offset(1, -3).Select
et ca marche !
Effectivement cela fonctionne
En conséquence pour adapter le code il te faut remplacer dans la procédure
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As
Range)
la ligne movecell 0, -3, Target
par Target.Offset(1, -3).Select
et ca marche !
Effectivement cela fonctionne