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

vba - perdu dans les "If Not Intersect"

6 réponses
Avatar
j-pascal
Bonsoir,

Pour la tabulation, je crois pouvoir m'en tirer, mais comment peut-on
forcer la saisie dans les colonnes intermédiaires ?

Ex :

J'ai des colonnes de B à H.

Une saisie en B, inscrit la date du jour en C et passe à la colonne D.
puis se décale à droite jusqu'à revenir en B après la dernière saisie
dans la colonne H.

J'ai ceci :

'--------------------------
If Not Intersect([B:B], target) Is Nothing Then target.Offset(0, 1) =
Date
If Not Intersect([C:G], target) Is Nothing Then target.Offset(0,
1).Select
If Not Intersect([H:H], target) Is Nothing Then target.Offset(1,
-6).Select
'--------------------------

Dès lors que les colonnes B et C possèdent une valeur, comment puis-je
empêcher une tabulation à droite (à partir de D) si la cellule est
vide.

En résumé :

1 - Je saisis une valeur en B
2 - (La date du jour s'inscrit en C) et je passe à D
3 - Si je valide une donnée en D, je passe en E, sinon j'ai un msgbox
qui me dit que je dois saisir une valeur et le curseur revient en D
4 - Idem que précédemment pour les colonnes E et F
5 - Colonne G, pas de saisie obligatoire
6 - H saisie obligatoire, puis retour "target.Offset(1, -6)"

Je ne suis pas sûr que ce test soit possible dans ce type de code, mais
bon ...

Merci pour vos lumières,

JP

6 réponses

Avatar
Daniel.C
Bonjour.
Essaie :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Select Case Target.Column
Case 2
Target.Offset(, 1) = Date
Target.Offset(, 2).Select
Case 4 To 6
If Target = "" Then
MsgBox "saisie obligatoire"
GoTo Err
Else
Target.Offset(, 1).Select
End If
Case 7
Target.Offset(, 1).Select
Case 8
Target.Offset(1, -6).Select
End Select
Err:
Application.EnableEvents = True
End Sub

Cordialement.
Daniel

Bonsoir,

Pour la tabulation, je crois pouvoir m'en tirer, mais comment peut-on forcer
la saisie dans les colonnes intermédiaires ?

Ex :

J'ai des colonnes de B à H.

Une saisie en B, inscrit la date du jour en C et passe à la colonne D.
puis se décale à droite jusqu'à revenir en B après la dernière saisie dans la
colonne H.

J'ai ceci :

'--------------------------
If Not Intersect([B:B], target) Is Nothing Then target.Offset(0, 1) = Date
If Not Intersect([C:G], target) Is Nothing Then target.Offset(0, 1).Select
If Not Intersect([H:H], target) Is Nothing Then target.Offset(1, -6).Select
'--------------------------

Dès lors que les colonnes B et C possèdent une valeur, comment puis-je
empêcher une tabulation à droite (à partir de D) si la cellule est vide.

En résumé :

1 - Je saisis une valeur en B
2 - (La date du jour s'inscrit en C) et je passe à D
3 - Si je valide une donnée en D, je passe en E, sinon j'ai un msgbox qui me
dit que je dois saisir une valeur et le curseur revient en D
4 - Idem que précédemment pour les colonnes E et F
5 - Colonne G, pas de saisie obligatoire
6 - H saisie obligatoire, puis retour "target.Offset(1, -6)"

Je ne suis pas sûr que ce test soit possible dans ce type de code, mais bon
...

Merci pour vos lumières,

JP


Avatar
Youky \(BJ\)
Salut j-pascal,
ca doit faire l'affaire
Youky (BJ)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 8 Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Column < 3 Then Exit Sub
Application.EnableEvents = False
If Target.Column > 7 Then
If Target.Offset(0, -1) = "" Then
Target.Offset(0, -1).Select
Else
Cells(Target.Row + 1, 1).Select: GoTo fin
End If
End If
If Target.Column = 3 Then
If Target.Offset(0, -1) <> "" Then
Target.Offset(0, 0) = Date
Target.Offset(0, 1).Select
GoTo fin
Else
Cells(Target.Row, 2).Select
GoTo fin
End If
End If
If Target.Offset(0, -1) = "" Then Target.Offset(0, -1).Select
fin:
Application.EnableEvents = True
End Sub

"j-pascal" a écrit dans le message de news:

Bonsoir,

Pour la tabulation, je crois pouvoir m'en tirer, mais comment peut-on
forcer la saisie dans les colonnes intermédiaires ?

Ex :

J'ai des colonnes de B à H.

Une saisie en B, inscrit la date du jour en C et passe à la colonne D.
puis se décale à droite jusqu'à revenir en B après la dernière saisie dans
la colonne H.

J'ai ceci :

'--------------------------
If Not Intersect([B:B], target) Is Nothing Then target.Offset(0, 1) = Date
If Not Intersect([C:G], target) Is Nothing Then target.Offset(0, 1).Select
If Not Intersect([H:H], target) Is Nothing Then
target.Offset(1, -6).Select
'--------------------------

Dès lors que les colonnes B et C possèdent une valeur, comment puis-je
empêcher une tabulation à droite (à partir de D) si la cellule est vide.

En résumé :

1 - Je saisis une valeur en B
2 - (La date du jour s'inscrit en C) et je passe à D
3 - Si je valide une donnée en D, je passe en E, sinon j'ai un msgbox qui
me dit que je dois saisir une valeur et le curseur revient en D
4 - Idem que précédemment pour les colonnes E et F
5 - Colonne G, pas de saisie obligatoire
6 - H saisie obligatoire, puis retour "target.Offset(1, -6)"

Je ne suis pas sûr que ce test soit possible dans ce type de code, mais
bon ...

Merci pour vos lumières,

JP




Avatar
j-pascal
Bonsoir Youki,

Ca ne semble pas fonctionner comme je le souhaite car les tabulations
ne se font (apparemment) pas.

Merci néanmoins pour t'être penché sur ce pb.

JP

Salut j-pascal,
ca doit faire l'affaire
Youky (BJ)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 8 Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Column < 3 Then Exit Sub
Application.EnableEvents = False
If Target.Column > 7 Then
If Target.Offset(0, -1) = "" Then
Target.Offset(0, -1).Select
Else
Cells(Target.Row + 1, 1).Select: GoTo fin
End If
End If
If Target.Column = 3 Then
If Target.Offset(0, -1) <> "" Then
Target.Offset(0, 0) = Date
Target.Offset(0, 1).Select
GoTo fin
Else
Cells(Target.Row, 2).Select
GoTo fin
End If
End If
If Target.Offset(0, -1) = "" Then Target.Offset(0, -1).Select
fin:
Application.EnableEvents = True
End Sub

"j-pascal" a écrit dans le message de news:

Bonsoir,

Pour la tabulation, je crois pouvoir m'en tirer, mais comment peut-on
forcer la saisie dans les colonnes intermédiaires ?

Ex :

J'ai des colonnes de B à H.

Une saisie en B, inscrit la date du jour en C et passe à la colonne D.
puis se décale à droite jusqu'à revenir en B après la dernière saisie dans
la colonne H.

J'ai ceci :

'--------------------------
If Not Intersect([B:B], target) Is Nothing Then target.Offset(0, 1) = Date
If Not Intersect([C:G], target) Is Nothing Then target.Offset(0, 1).Select
If Not Intersect([H:H], target) Is Nothing Then target.Offset(1, -6).Select
'--------------------------

Dès lors que les colonnes B et C possèdent une valeur, comment puis-je
empêcher une tabulation à droite (à partir de D) si la cellule est vide.

En résumé :

1 - Je saisis une valeur en B
2 - (La date du jour s'inscrit en C) et je passe à D
3 - Si je valide une donnée en D, je passe en E, sinon j'ai un msgbox qui
me dit que je dois saisir une valeur et le curseur revient en D
4 - Idem que précédemment pour les colonnes E et F
5 - Colonne G, pas de saisie obligatoire
6 - H saisie obligatoire, puis retour "target.Offset(1, -6)"

Je ne suis pas sûr que ce test soit possible dans ce type de code, mais bon
...

Merci pour vos lumières,

JP






Avatar
j-pascal
Bonjour Daniel,

Peut-être que d'autres "événements" parasitent ce code, mais ça ne
fonctionne pas comme je le voudrais. Je vais essayer de traiter les
erreurs possibles d'une autre façon. Merci néanmoins pour ta présente
proposition.

JP

Bonjour.
Essaie :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Select Case Target.Column
Case 2
Target.Offset(, 1) = Date
Target.Offset(, 2).Select
Case 4 To 6
If Target = "" Then
MsgBox "saisie obligatoire"
GoTo Err
Else
Target.Offset(, 1).Select
End If
Case 7
Target.Offset(, 1).Select
Case 8
Target.Offset(1, -6).Select
End Select
Err:
Application.EnableEvents = True
End Sub

Cordialement.
Daniel

Bonsoir,

Pour la tabulation, je crois pouvoir m'en tirer, mais comment peut-on
forcer la saisie dans les colonnes intermédiaires ?

Ex :

J'ai des colonnes de B à H.

Une saisie en B, inscrit la date du jour en C et passe à la colonne D.
puis se décale à droite jusqu'à revenir en B après la dernière saisie dans
la colonne H.

J'ai ceci :

'--------------------------
If Not Intersect([B:B], target) Is Nothing Then target.Offset(0, 1) = Date
If Not Intersect([C:G], target) Is Nothing Then target.Offset(0, 1).Select
If Not Intersect([H:H], target) Is Nothing Then target.Offset(1, -6).Select
'--------------------------

Dès lors que les colonnes B et C possèdent une valeur, comment puis-je
empêcher une tabulation à droite (à partir de D) si la cellule est vide.

En résumé :

1 - Je saisis une valeur en B
2 - (La date du jour s'inscrit en C) et je passe à D
3 - Si je valide une donnée en D, je passe en E, sinon j'ai un msgbox qui
me dit que je dois saisir une valeur et le curseur revient en D
4 - Idem que précédemment pour les colonnes E et F
5 - Colonne G, pas de saisie obligatoire
6 - H saisie obligatoire, puis retour "target.Offset(1, -6)"

Je ne suis pas sûr que ce test soit possible dans ce type de code, mais bon
...

Merci pour vos lumières,

JP




Avatar
Youky \(BJ\)
Les tabulations sont effectuées à l'aide de la touche [Tab] et non la touche
[Enter]
A savoir la touche [Enter] peut avoir divers sens de validation selon le PC.
Cette direction peut être modifiée en menu option, donc il est bien
préférable d'utiliser la touche [Tab]
pour effectuer tes saisies rapides.


--
Youky (BJ)
"j-pascal" a écrit dans le message de news:

Bonsoir Youki,

Ca ne semble pas fonctionner comme je le souhaite car les tabulations ne
se font (apparemment) pas.

Merci néanmoins pour t'être penché sur ce pb.

JP

Salut j-pascal,
ca doit faire l'affaire
Youky (BJ)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 8 Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Column < 3 Then Exit Sub
Application.EnableEvents = False
If Target.Column > 7 Then
If Target.Offset(0, -1) = "" Then
Target.Offset(0, -1).Select
Else
Cells(Target.Row + 1, 1).Select: GoTo fin
End If
End If
If Target.Column = 3 Then
If Target.Offset(0, -1) <> "" Then
Target.Offset(0, 0) = Date
Target.Offset(0, 1).Select
GoTo fin
Else
Cells(Target.Row, 2).Select
GoTo fin
End If
End If
If Target.Offset(0, -1) = "" Then Target.Offset(0, -1).Select
fin:
Application.EnableEvents = True
End Sub

"j-pascal" a écrit dans le message de news:

Bonsoir,

Pour la tabulation, je crois pouvoir m'en tirer, mais comment peut-on
forcer la saisie dans les colonnes intermédiaires ?

Ex :

J'ai des colonnes de B à H.

Une saisie en B, inscrit la date du jour en C et passe à la colonne D.
puis se décale à droite jusqu'à revenir en B après la dernière saisie
dans la colonne H.

J'ai ceci :

'--------------------------
If Not Intersect([B:B], target) Is Nothing Then target.Offset(0, 1) =
Date
If Not Intersect([C:G], target) Is Nothing Then target.Offset(0,
1).Select
If Not Intersect([H:H], target) Is Nothing Then
target.Offset(1, -6).Select
'--------------------------

Dès lors que les colonnes B et C possèdent une valeur, comment puis-je
empêcher une tabulation à droite (à partir de D) si la cellule est vide.

En résumé :

1 - Je saisis une valeur en B
2 - (La date du jour s'inscrit en C) et je passe à D
3 - Si je valide une donnée en D, je passe en E, sinon j'ai un msgbox
qui me dit que je dois saisir une valeur et le curseur revient en D
4 - Idem que précédemment pour les colonnes E et F
5 - Colonne G, pas de saisie obligatoire
6 - H saisie obligatoire, puis retour "target.Offset(1, -6)"

Je ne suis pas sûr que ce test soit possible dans ce type de code, mais
bon ...

Merci pour vos lumières,

JP










Avatar
j-pascal
Bonsoir,

Le terme est effectivement impropre quand je parle de tabulation ; en
fait, je veux dire "déplacement" d'une cellule à l'autre !
Désolé pour ce contresens.

A bientôt,

JP

Les tabulations sont effectuées à l'aide de la touche [Tab] et non la touche
[Enter]
A savoir la touche [Enter] peut avoir divers sens de validation selon le PC.
Cette direction peut être modifiée en menu option, donc il est bien
préférable d'utiliser la touche [Tab]
pour effectuer tes saisies rapides.


--
Youky (BJ)
"j-pascal" a écrit dans le message de news:

Bonsoir Youki,

Ca ne semble pas fonctionner comme je le souhaite car les tabulations ne se
font (apparemment) pas.

Merci néanmoins pour t'être penché sur ce pb.

JP

Salut j-pascal,
ca doit faire l'affaire
Youky (BJ)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 8 Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Column < 3 Then Exit Sub
Application.EnableEvents = False
If Target.Column > 7 Then
If Target.Offset(0, -1) = "" Then
Target.Offset(0, -1).Select
Else
Cells(Target.Row + 1, 1).Select: GoTo fin
End If
End If
If Target.Column = 3 Then
If Target.Offset(0, -1) <> "" Then
Target.Offset(0, 0) = Date
Target.Offset(0, 1).Select
GoTo fin
Else
Cells(Target.Row, 2).Select
GoTo fin
End If
End If
If Target.Offset(0, -1) = "" Then Target.Offset(0, -1).Select
fin:
Application.EnableEvents = True
End Sub

"j-pascal" a écrit dans le message de news:

Bonsoir,

Pour la tabulation, je crois pouvoir m'en tirer, mais comment peut-on
forcer la saisie dans les colonnes intermédiaires ?

Ex :

J'ai des colonnes de B à H.

Une saisie en B, inscrit la date du jour en C et passe à la colonne D.
puis se décale à droite jusqu'à revenir en B après la dernière saisie
dans la colonne H.

J'ai ceci :

'--------------------------
If Not Intersect([B:B], target) Is Nothing Then target.Offset(0, 1) =
Date
If Not Intersect([C:G], target) Is Nothing Then target.Offset(0,
1).Select
If Not Intersect([H:H], target) Is Nothing Then target.Offset(1,
-6).Select
'--------------------------

Dès lors que les colonnes B et C possèdent une valeur, comment puis-je
empêcher une tabulation à droite (à partir de D) si la cellule est vide.

En résumé :

1 - Je saisis une valeur en B
2 - (La date du jour s'inscrit en C) et je passe à D
3 - Si je valide une donnée en D, je passe en E, sinon j'ai un msgbox qui
me dit que je dois saisir une valeur et le curseur revient en D
4 - Idem que précédemment pour les colonnes E et F
5 - Colonne G, pas de saisie obligatoire
6 - H saisie obligatoire, puis retour "target.Offset(1, -6)"

Je ne suis pas sûr que ce test soit possible dans ce type de code, mais
bon ...

Merci pour vos lumières,

JP