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

Pb sur un contrôle de données

7 réponses
Avatar
Isa
Bonjour,

Lors de la saisie d'une liste déroulante, je veux vérifier si le contenu
existe bien dans la liste et qu'il est sur 4 positions. Je fais donc ceci sur
Worksheet_Change :

' MAJ de la liste déroulante n° de projet si n° projet inexistant

' Je cherche la ligne active
i = ActiveCell.Row

' La liste déroulante projet va de la ligne 5 à 36, donc on fait le
contrôle sur ces lignes là
If i >= 5 And i <= 36 Then
If Target.Address = "$A$" & i Then
If IsError(Application.Match(Target.Value, [Project], 0)) Then
' Si la cellule a une valeur
If Target.Value <> "" Then
' Si le n° de projet est sur 4 positions
If Len(Target.Value) = 4 Then
If MsgBox("Ce projet n'existe pas dans la liste,
voulez-vous le rajouter ?", vbYesNo) = vbYes Then
[Project].End(xlDown).Offset(1, 0) = Target.Value
Sheets("Project").[Project].Sort
Key1:=Sheets("Project").Range("A2")
Else
Application.Undo
modif = modif - 1
End If
Else
MsgBox ("La longueur de ce projet n'est pas
correcte, veuillez le ressaisir."), vbCritical
Application.Undo
modif = modif - 1
End If
End If
End If
End If
End If

Cela fonctionne très bien si l'utilisateur saisit puis va ensuite sur une
cellule à côté sur la même ligne mais cela ne marche plus s'il va sur une
autre cellule (pas sur la même ligne).
Ceci vient de ma condition : If Target.Address = "$A$" & i Then

Comment puis-je faire en sorte que le contrôle se fasse dès que
l'utilisateur sort de la cellule et clique sur n'importe laquelle autre.
Merci de vos réponses.

7 réponses

Avatar
JB
Bonsoir,

' Je cherche la ligne active
i = Target.Row

http://cjoint.com/?ektkVEdYj6

JB



On 10 avr, 17:18, Isa wrote:
Bonjour,

Lors de la saisie d'une liste déroulante, je veux vérifier si le conte nu
existe bien dans la liste et qu'il est sur 4 positions. Je fais donc ceci sur
Worksheet_Change :

    ' MAJ de la liste déroulante n° de projet si n° projet inexi stant

    ' Je cherche la ligne active
    i = ActiveCell.Row

    ' La liste déroulante projet va de la ligne 5 à 36, donc on fa it le
contrôle sur ces lignes là
    If i >= 5 And i <= 36 Then
        If Target.Address = "$A$" & i Then
            If IsError(Application.Match(Target.Value, [Projec t], 0)) Then
                ' Si la cellule a une valeur
                If Target.Value <> "" Then
                    ' Si le n° de projet est sur 4 p ositions
                    If Len(Target.Value) = 4 Then
                        If MsgBox("Ce projet n'exi ste pas dans la liste,
voulez-vous le rajouter ?", vbYesNo) = vbYes Then
                           [Project].End(xlDow n).Offset(1, 0) = Target.Value
                           Sheets("Project").[ Project].Sort
Key1:=Sheets("Project").Range("A2")
                        Else
                           Application.Undo
                           modif = modif - 1
                        End If
                    Else
                        MsgBox ("La longueur de ce projet n'est pas
correcte, veuillez le ressaisir."), vbCritical
                        Application.Undo
                        modif = modif - 1
                    End If
                End If
            End If
        End If
    End If

Cela fonctionne très bien si l'utilisateur saisit puis va ensuite sur un e
cellule à côté sur la même ligne mais cela ne marche plus s'il va sur une
autre cellule (pas sur la même ligne).
Ceci vient de ma condition : If Target.Address = "$A$" & i Then

Comment puis-je faire en sorte que le contrôle se fasse dès que
l'utilisateur sort de la cellule et clique sur n'importe laquelle autre.
Merci de vos réponses.


Avatar
Isa
Bonjour,

Merci de ta réponse.
J'ai testé ta solution et ça marche, seulement je ne comprends pas la
différence entre Target.Row et ActiveCell.Row. Pour moi, ça renvoie la même
chose.
Peux-tu m'expliquer ?

Autre question : dans ton fichier exemple, si tu supprimes la ligne 2 de
l'onglet Project (suppression du projet aa), la liste déroulante de projet ne
fonctionne plus. (C'est la question que j'ai posé + bas dans le post Pb liste
déroulante). Comment remédier à ce pb (Les utilisateurs doivent pouvoir
modifier l'onglet Project avec ajout, modif ou suppression ?).

Merci.

Isa.

"JB" wrote:

Bonsoir,

' Je cherche la ligne active
i = Target.Row

http://cjoint.com/?ektkVEdYj6

JB



On 10 avr, 17:18, Isa wrote:
Bonjour,

Lors de la saisie d'une liste déroulante, je veux vérifier si le contenu
existe bien dans la liste et qu'il est sur 4 positions. Je fais donc ceci sur
Worksheet_Change :

' MAJ de la liste déroulante n° de projet si n° projet inexistant

' Je cherche la ligne active
i = ActiveCell.Row

' La liste déroulante projet va de la ligne 5 à 36, donc on fait le
contrôle sur ces lignes là
If i >= 5 And i <= 36 Then
If Target.Address = "$A$" & i Then
If IsError(Application.Match(Target.Value, [Project], 0)) Then
' Si la cellule a une valeur
If Target.Value <> "" Then
' Si le n° de projet est sur 4 positions
If Len(Target.Value) = 4 Then
If MsgBox("Ce projet n'existe pas dans la liste,
voulez-vous le rajouter ?", vbYesNo) = vbYes Then
[Project].End(xlDown).Offset(1, 0) = Target.Value
Sheets("Project").[Project].Sort
Key1:=Sheets("Project").Range("A2")
Else
Application.Undo
modif = modif - 1
End If
Else
MsgBox ("La longueur de ce projet n'est pas
correcte, veuillez le ressaisir."), vbCritical
Application.Undo
modif = modif - 1
End If
End If
End If
End If
End If

Cela fonctionne très bien si l'utilisateur saisit puis va ensuite sur une
cellule à côté sur la même ligne mais cela ne marche plus s'il va sur une
autre cellule (pas sur la même ligne).
Ceci vient de ma condition : If Target.Address = "$A$" & i Then

Comment puis-je faire en sorte que le contrôle se fasse dès que
l'utilisateur sort de la cellule et clique sur n'importe laquelle autre.
Merci de vos réponses.






Avatar
JB
Bonjour,

http://cjoint.com/?elmfdNQQEu

Target.Row donne le no de la ligne de saisie(5 par ex)
Après la saisie le curseur descend d'une ligne
Activecell.Row=6

Dans project, j'ai ajouté pour que la liste soit triée et sans vide
même si on vide une cellule .

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
[A1:A1000].Sort Key1:=Sheets("Project").Range("A2"),
Header:=xlGuess
End If
End Sub


JB


On 11 avr, 11:45, Isa wrote:
Bonjour,

Merci de ta réponse.
J'ai testé ta solution et ça marche, seulement je ne comprends pas la
différence entre Target.Row et ActiveCell.Row. Pour moi, ça renvoie la même
chose.
Peux-tu m'expliquer ?

Autre question : dans ton fichier exemple, si tu supprimes la ligne 2 de
l'onglet Project (suppression du projet aa), la liste déroulante de proj et ne
fonctionne plus. (C'est la question que j'ai posé + bas dans le post Pb liste
déroulante). Comment remédier à ce pb (Les utilisateurs doivent pouv oir
modifier l'onglet Project avec ajout, modif ou suppression ?).

Merci.

Isa.



"JB" wrote:
Bonsoir,

    ' Je cherche la ligne active
    i = Target.Row

http://cjoint.com/?ektkVEdYj6

JB

On 10 avr, 17:18, Isa wrote:
Bonjour,

Lors de la saisie d'une liste déroulante, je veux vérifier si le c ontenu
existe bien dans la liste et qu'il est sur 4 positions. Je fais donc c eci sur
Worksheet_Change :

    ' MAJ de la liste déroulante n° de projet si n° projet i nexistant

    ' Je cherche la ligne active
    i = ActiveCell.Row

    ' La liste déroulante projet va de la ligne 5 à 36, donc o n fait le
contrôle sur ces lignes là
    If i >= 5 And i <= 36 Then
        If Target.Address = "$A$" & i Then
            If IsError(Application.Match(Target.Value, [Pr oject], 0)) Then
                ' Si la cellule a une valeur
                If Target.Value <> "" Then
                    ' Si le n° de projet est sur 4 positions
                    If Len(Target.Value) = 4 The n
                        If MsgBox("Ce projet n 'existe pas dans la liste,
voulez-vous le rajouter ?", vbYesNo) = vbYes Then
                           [Project].End(x lDown).Offset(1, 0) = Target.Value
                           Sheets("Project ").[Project].Sort
Key1:=Sheets("Project").Range("A2")
                        Else
                           Application.Und o
                           modif = modif - 1
                        End If
                    Else
                        MsgBox ("La longueur d e ce projet n'est pas
correcte, veuillez le ressaisir."), vbCritical
                        Application.Undo
                        modif = modif - 1
                    End If
                End If
            End If
        End If
    End If

Cela fonctionne très bien si l'utilisateur saisit puis va ensuite su r une
cellule à côté sur la même ligne mais cela ne marche plus s'il va sur une
autre cellule (pas sur la même ligne).
Ceci vient de ma condition : If Target.Address = "$A$" & i Then

Comment puis-je faire en sorte que le contrôle se fasse dès que
l'utilisateur sort de la cellule et clique sur n'importe laquelle autr e.
Merci de vos réponses.- Masquer le texte des messages précédents -



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




Avatar
Isa
Ca ne marche toujours pas, la donnée source de la liste déroulante devient :
ÞCALER(Project!#REF!;;;NBVAL(Project!$A:$A)-1)
donc erreur et la liste ne se déroule plus.

Je t'explique exactement ce que je fais :
Sur l'onglet Project, je sélectionne la ligne 2, puis clique droit supprimer
(donc la ligne du projet "aaaa" disparaît).
Et là, je repasse sur la feuil1 et la liste déroulante ne fonctionne plus.
(je n'avais pas eu l'idée de faire ça mais un utilisateur me l'a fait et
donc m'a mentionné le pb.)
Merci.


"JB" wrote:

Bonjour,

http://cjoint.com/?elmfdNQQEu

Target.Row donne le no de la ligne de saisie(5 par ex)
Après la saisie le curseur descend d'une ligne
Activecell.Row=6

Dans project, j'ai ajouté pour que la liste soit triée et sans vide
même si on vide une cellule .

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
[A1:A1000].Sort Key1:=Sheets("Project").Range("A2"),
Header:=xlGuess
End If
End Sub


JB


On 11 avr, 11:45, Isa wrote:
Bonjour,

Merci de ta réponse.
J'ai testé ta solution et ça marche, seulement je ne comprends pas la
différence entre Target.Row et ActiveCell.Row. Pour moi, ça renvoie la même
chose.
Peux-tu m'expliquer ?

Autre question : dans ton fichier exemple, si tu supprimes la ligne 2 de
l'onglet Project (suppression du projet aa), la liste déroulante de projet ne
fonctionne plus. (C'est la question que j'ai posé + bas dans le post Pb liste
déroulante). Comment remédier à ce pb (Les utilisateurs doivent pouvoir
modifier l'onglet Project avec ajout, modif ou suppression ?).

Merci.

Isa.



"JB" wrote:
Bonsoir,

' Je cherche la ligne active
i = Target.Row

http://cjoint.com/?ektkVEdYj6

JB

On 10 avr, 17:18, Isa wrote:
Bonjour,

Lors de la saisie d'une liste déroulante, je veux vérifier si le contenu
existe bien dans la liste et qu'il est sur 4 positions. Je fais donc ceci sur
Worksheet_Change :

' MAJ de la liste déroulante n° de projet si n° projet inexistant

' Je cherche la ligne active
i = ActiveCell.Row

' La liste déroulante projet va de la ligne 5 à 36, donc on fait le
contrôle sur ces lignes là
If i >= 5 And i <= 36 Then
If Target.Address = "$A$" & i Then
If IsError(Application.Match(Target.Value, [Project], 0)) Then
' Si la cellule a une valeur
If Target.Value <> "" Then
' Si le n° de projet est sur 4 positions
If Len(Target.Value) = 4 Then
If MsgBox("Ce projet n'existe pas dans la liste,
voulez-vous le rajouter ?", vbYesNo) = vbYes Then
[Project].End(xlDown).Offset(1, 0) = Target.Value
Sheets("Project").[Project].Sort
Key1:=Sheets("Project").Range("A2")
Else
Application.Undo
modif = modif - 1
End If
Else
MsgBox ("La longueur de ce projet n'est pas
correcte, veuillez le ressaisir."), vbCritical
Application.Undo
modif = modif - 1
End If
End If
End If
End If
End If

Cela fonctionne très bien si l'utilisateur saisit puis va ensuite sur une
cellule à côté sur la même ligne mais cela ne marche plus s'il va sur une
autre cellule (pas sur la même ligne).
Ceci vient de ma condition : If Target.Address = "$A$" & i Then

Comment puis-je faire en sorte que le contrôle se fasse dès que
l'utilisateur sort de la cellule et clique sur n'importe laquelle autre.
Merci de vos réponses.- Masquer le texte des messages précédents -



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








Avatar
JB
C'est 'normal'.
Avec la version jointe, Il faut cliquer sur A2 et appuyer avec Sup. La
liste est réorganisée immédiatement avec ce code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
[A2:A1000].Sort Key1:=Sheets("Project").Range("A2"),
Header:=xlGuess
End If
End Sub

http://cjoint.com/?elo0EIS7kn

JB


On 11 avr, 14:31, Isa wrote:
Ca ne marche toujours pas, la donnée source de la liste déroulante dev ient :
ÞCALER(Project!#REF!;;;NBVAL(Project!$A:$A)-1)
donc erreur et la liste ne se déroule plus.

Je t'explique exactement ce que je fais :
Sur l'onglet Project, je sélectionne la ligne 2, puis clique droit suppr imer
(donc la ligne du projet "aaaa" disparaît).
Et là, je repasse sur la feuil1 et la liste déroulante ne fonctionne p lus.
(je n'avais pas eu l'idée de faire ça mais un utilisateur me l'a fait et
donc m'a mentionné le pb.)
Merci.



"JB" wrote:
Bonjour,

http://cjoint.com/?elmfdNQQEu

Target.Row donne le no de la ligne de saisie(5 par ex)
Après la saisie le curseur descend d'une ligne
Activecell.Row=6

Dans project, j'ai ajouté pour que la liste soit triée et sans vide
même si on vide une cellule .

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 1 And Target.Count = 1 Then
    [A1:A1000].Sort Key1:=Sheets("Project").Range("A2"),
Header:=xlGuess
  End If
End Sub

JB

On 11 avr, 11:45, Isa wrote:
Bonjour,

Merci de ta réponse.
J'ai testé ta solution et ça marche, seulement je ne comprends pas la
différence entre Target.Row et ActiveCell.Row. Pour moi, ça renvoi e la même
chose.
Peux-tu m'expliquer ?

Autre question : dans ton fichier exemple, si tu supprimes la ligne 2 de
l'onglet Project (suppression du projet aa), la liste déroulante de projet ne
fonctionne plus. (C'est la question que j'ai posé + bas dans le post Pb liste
déroulante). Comment remédier à ce pb (Les utilisateurs doivent pouvoir
modifier l'onglet Project avec ajout, modif ou suppression ?).

Merci.

Isa.

"JB" wrote:
Bonsoir,

    ' Je cherche la ligne active
    i = Target.Row

http://cjoint.com/?ektkVEdYj6

JB

On 10 avr, 17:18, Isa wrote:
Bonjour,

Lors de la saisie d'une liste déroulante, je veux vérifier si le contenu
existe bien dans la liste et qu'il est sur 4 positions. Je fais do nc ceci sur
Worksheet_Change :

    ' MAJ de la liste déroulante n° de projet si n° proj et inexistant

    ' Je cherche la ligne active
    i = ActiveCell.Row

    ' La liste déroulante projet va de la ligne 5 à 36, do nc on fait le
contrôle sur ces lignes là
    If i >= 5 And i <= 36 Then
        If Target.Address = "$A$" & i Then
            If IsError(Application.Match(Target.Value, [Project], 0)) Then
                ' Si la cellule a une valeur
                If Target.Value <> "" Then
                    ' Si le n° de projet est sur 4 positions
                    If Len(Target.Value) = 4 Then
                        If MsgBox("Ce proj et n'existe pas dans la liste,
voulez-vous le rajouter ?", vbYesNo) = vbYes Then
                           [Project].E nd(xlDown).Offset(1, 0) = Target.Value
                           Sheets("Pro ject").[Project].Sort
Key1:=Sheets("Project").Range("A2")
                        Else
                           Application .Undo
                           modif = m odif - 1
                        End If
                    Else
                        MsgBox ("La longue ur de ce projet n'est pas
correcte, veuillez le ressaisir."), vbCritical
                        Application.Undo
                        modif = modif - 1
                    End If
                End If
            End If
        End If
    End If

Cela fonctionne très bien si l'utilisateur saisit puis va ensuit e sur une
cellule à côté sur la même ligne mais cela ne marche plus s'il va sur une
autre cellule (pas sur la même ligne).
Ceci vient de ma condition : If Target.Address = "$A$" & i Then

Comment puis-je faire en sorte que le contrôle se fasse dès qu e
l'utilisateur sort de la cellule et clique sur n'importe laquelle autre.
Merci de vos réponses.- Masquer le texte des messages précéd ents -



- Afficher le texte des messages précédents -- Masquer le texte de s messages précédents -



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






Avatar
Isa
Ok, donc il ne faut pas faire de suppression de la ligne entière sinon ça
plante.
Merci.

"JB" wrote:

C'est 'normal'.
Avec la version jointe, Il faut cliquer sur A2 et appuyer avec Sup. La
liste est réorganisée immédiatement avec ce code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
[A2:A1000].Sort Key1:=Sheets("Project").Range("A2"),
Header:=xlGuess
End If
End Sub

http://cjoint.com/?elo0EIS7kn

JB


On 11 avr, 14:31, Isa wrote:
Ca ne marche toujours pas, la donnée source de la liste déroulante devient :
ÞCALER(Project!#REF!;;;NBVAL(Project!$A:$A)-1)
donc erreur et la liste ne se déroule plus.

Je t'explique exactement ce que je fais :
Sur l'onglet Project, je sélectionne la ligne 2, puis clique droit supprimer
(donc la ligne du projet "aaaa" disparaît).
Et là, je repasse sur la feuil1 et la liste déroulante ne fonctionne plus.
(je n'avais pas eu l'idée de faire ça mais un utilisateur me l'a fait et
donc m'a mentionné le pb.)
Merci.



"JB" wrote:
Bonjour,

http://cjoint.com/?elmfdNQQEu

Target.Row donne le no de la ligne de saisie(5 par ex)
Après la saisie le curseur descend d'une ligne
Activecell.Row=6

Dans project, j'ai ajouté pour que la liste soit triée et sans vide
même si on vide une cellule .

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
[A1:A1000].Sort Key1:=Sheets("Project").Range("A2"),
Header:=xlGuess
End If
End Sub

JB

On 11 avr, 11:45, Isa wrote:
Bonjour,

Merci de ta réponse.
J'ai testé ta solution et ça marche, seulement je ne comprends pas la
différence entre Target.Row et ActiveCell.Row. Pour moi, ça renvoie la même
chose.
Peux-tu m'expliquer ?

Autre question : dans ton fichier exemple, si tu supprimes la ligne 2 de
l'onglet Project (suppression du projet aa), la liste déroulante de projet ne
fonctionne plus. (C'est la question que j'ai posé + bas dans le post Pb liste
déroulante). Comment remédier à ce pb (Les utilisateurs doivent pouvoir
modifier l'onglet Project avec ajout, modif ou suppression ?).

Merci.

Isa.

"JB" wrote:
Bonsoir,

' Je cherche la ligne active
i = Target.Row

http://cjoint.com/?ektkVEdYj6

JB

On 10 avr, 17:18, Isa wrote:
Bonjour,

Lors de la saisie d'une liste déroulante, je veux vérifier si le contenu
existe bien dans la liste et qu'il est sur 4 positions. Je fais donc ceci sur
Worksheet_Change :

' MAJ de la liste déroulante n° de projet si n° projet inexistant

' Je cherche la ligne active
i = ActiveCell.Row

' La liste déroulante projet va de la ligne 5 à 36, donc on fait le
contrôle sur ces lignes là
If i >= 5 And i <= 36 Then
If Target.Address = "$A$" & i Then
If IsError(Application.Match(Target.Value, [Project], 0)) Then
' Si la cellule a une valeur
If Target.Value <> "" Then
' Si le n° de projet est sur 4 positions
If Len(Target.Value) = 4 Then
If MsgBox("Ce projet n'existe pas dans la liste,
voulez-vous le rajouter ?", vbYesNo) = vbYes Then
[Project].End(xlDown).Offset(1, 0) = Target.Value
Sheets("Project").[Project].Sort
Key1:=Sheets("Project").Range("A2")
Else
Application..Undo
modif = modif - 1
End If
Else
MsgBox ("La longueur de ce projet n'est pas
correcte, veuillez le ressaisir."), vbCritical
Application.Undo
modif = modif - 1
End If
End If
End If
End If
End If

Cela fonctionne très bien si l'utilisateur saisit puis va ensuite sur une
cellule à côté sur la même ligne mais cela ne marche plus s'il va sur une
autre cellule (pas sur la même ligne).
Ceci vient de ma condition : If Target.Address = "$A$" & i Then

Comment puis-je faire en sorte que le contrôle se fasse dès que
l'utilisateur sort de la cellule et clique sur n'importe laquelle autre.
Merci de vos réponses.- Masquer le texte des messages précédents -



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



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










Avatar
JB
On peut supprimer les autres mais pas la première de Decaler():

ÞCALER(Project!$A$2;;;NBVAL(Project!$A:$A)-1)

JB

On 11 avr, 15:31, Isa wrote:
Ok, donc il ne faut pas faire de suppression de la ligne entière sinon ça
plante.
Merci.



"JB" wrote:
C'est 'normal'.
Avec la version jointe, Il faut cliquer sur A2 et appuyer avec Sup. La
liste est réorganisée immédiatement avec ce code:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 1 And Target.Count = 1 Then
    [A2:A1000].Sort Key1:=Sheets("Project").Range("A2"),
Header:=xlGuess
  End If
End Sub

http://cjoint.com/?elo0EIS7kn

JB

On 11 avr, 14:31, Isa wrote:
Ca ne marche toujours pas, la donnée source de la liste déroulante devient :
ÞCALER(Project!#REF!;;;NBVAL(Project!$A:$A)-1)
donc erreur et la liste ne se déroule plus.

Je t'explique exactement ce que je fais :
Sur l'onglet Project, je sélectionne la ligne 2, puis clique droit s upprimer
(donc la ligne du projet "aaaa" disparaît).
Et là, je repasse sur la feuil1 et la liste déroulante ne fonction ne plus.
(je n'avais pas eu l'idée de faire ça mais un utilisateur me l'a f ait et
donc m'a mentionné le pb.)
Merci.

"JB" wrote:
Bonjour,

http://cjoint.com/?elmfdNQQEu

Target.Row donne le no de la ligne de saisie(5 par ex)
Après la saisie le curseur descend d'une ligne
Activecell.Row=6

Dans project, j'ai ajouté pour que la liste soit triée et sans v ide
même si on vide une cellule .

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 1 And Target.Count = 1 Then
    [A1:A1000].Sort Key1:=Sheets("Project").Range("A2"),
Header:=xlGuess
  End If
End Sub

JB

On 11 avr, 11:45, Isa wrote:
Bonjour,

Merci de ta réponse.
J'ai testé ta solution et ça marche, seulement je ne comprends pas la
différence entre Target.Row et ActiveCell.Row. Pour moi, ça re nvoie la même
chose.
Peux-tu m'expliquer ?

Autre question : dans ton fichier exemple, si tu supprimes la lign e 2 de
l'onglet Project (suppression du projet aa), la liste déroulante de projet ne
fonctionne plus. (C'est la question que j'ai posé + bas dans le post Pb liste
déroulante). Comment remédier à ce pb (Les utilisateurs doiv ent pouvoir
modifier l'onglet Project avec ajout, modif ou suppression ?).

Merci.

Isa.

"JB" wrote:
Bonsoir,

    ' Je cherche la ligne active
    i = Target.Row

http://cjoint.com/?ektkVEdYj6

JB

On 10 avr, 17:18, Isa wrote:
Bonjour,

Lors de la saisie d'une liste déroulante, je veux vérifier si le contenu
existe bien dans la liste et qu'il est sur 4 positions. Je fai s donc ceci sur
Worksheet_Change :

    ' MAJ de la liste déroulante n° de projet si n° projet inexistant

    ' Je cherche la ligne active
    i = ActiveCell.Row

    ' La liste déroulante projet va de la ligne 5 à 36 , donc on fait le
contrôle sur ces lignes là
    If i >= 5 And i <= 36 Then
        If Target.Address = "$A$" & i Then
            If IsError(Application.Match(Target.Va lue, [Project], 0)) Then
                ' Si la cellule a une valeur
                If Target.Value <> "" Then
                    ' Si le n° de projet est sur 4 positions
                    If Len(Target.Value) = 4 Then
                        If MsgBox("Ce projet n'existe pas dans la liste,
voulez-vous le rajouter ?", vbYesNo) = vbYes Then
                           [Projec t].End(xlDown).Offset(1, 0) = Target.Value
                           Sheets( "Project").[Project].Sort
Key1:=Sheets("Project").Range("A2")
                        Else
                           Applica tion..Undo
                           modif = modif - 1
                        End If
                    Else
                        MsgBox ("La lo ngueur de ce projet n'est pas
correcte, veuillez le ressaisir."), vbCritical
                        Application.Un do
                        modif = modi f - 1
                    End If
                End If
            End If
        End If
    End If

Cela fonctionne très bien si l'utilisateur saisit puis va en suite sur une
cellule à côté sur la même ligne mais cela ne marche p lus s'il va sur une
autre cellule (pas sur la même ligne).
Ceci vient de ma condition : If Target.Address = "$A$" & i T hen

Comment puis-je faire en sorte que le contrôle se fasse dè s que
l'utilisateur sort de la cellule et clique sur n'importe laque lle autre.
Merci de vos réponses.- Masquer le texte des messages préc édents -



- Afficher le texte des messages précédents -- Masquer le text e des messages précédents -



- Afficher le texte des messages précédents -- Masquer le texte de s messages précédents -



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