vba - perdu dans les "If Not Intersect"

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #18416641
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


Youky \(BJ\)
Le #18416631
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"
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




j-pascal
Le #18422761
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"
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






j-pascal
Le #18422751
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




Youky \(BJ\)
Le #18427031
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"
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"
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










j-pascal
Le #18431081
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"
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"
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












Publicité
Poster une réponse
Anonyme