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

VBA Excel 2003 - Message d'erreur 91

8 réponses
Avatar
nuit6
Bonjour,
Lorsque j'ex=E9cute le code suivant en cliquant sur un bouton, situ=E9 sur
une feuille, auquel j'ai affect=E9 la macro, =E7a fontionne tr=E8s bien.
Par contre lorsque je le mets sur l'=E9v=E8nement "Change" de cette
feuille, le message "variable objet ou variable de bloc With non
d=E9finie" s'affiche quand il arrive sur Selection.Find...
Merci d'avance pour votre aide !


Private Sub Worksheet_Change(ByVal Target As Range)
Dim vNomFeuille
Dim vValeur
Dim vCompteur
Dim vAdresseRetour
Dim vAdresse
Dim vAdresseBis
vNomFeuille =3D ActiveSheet.Name
vValeur =3D ActiveCell.Value
vAdresseRetour =3D ActiveCell.Address
Application.Goto Sheets("Controle").Range("A1")
Selection.Find(What:=3DvValeur, After:=3DActiveCell, LookIn:=3DxlValues,
LookAt _
:=3DxlWhole, SearchOrder:=3DxlByRows, SearchDirection:=3DxlNext,
MatchCase:=3D _
False, SearchFormat:=3DFalse).Activate
vAdresse =3D ActiveCell.Address
Selection.FindNext(After:=3DActiveCell).Activate
vAdresseBis =3D ActiveCell.Address
If vAdresse =3D vAdresseBis Then
GoTo fin
Else
MsgBox "Ce num=E9ro a d=E9j=E0 =E9t=E9 saisi."
End If
fin:
Sheets(vNomFeuille).Select
Range(vAdresseRetour).Select
End Sub

8 réponses

Avatar
nuit6
Je viens d'essayer de faire comme ça :
Sheets("Controle").Select
Range("A1").Select
Range("A1:A335").Select
Selection.Find(What:=vValeur, After:¬tiveCell, LookIn:=xlValues,
LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate
et à ce moment j'ai ce message d'erreur :
La méthode Range de la classe a échoué
Avatar
anonymousA
Bonjour,

si j'ai compris ce que tu veux faire c'est tester si une valeur a déjà
été saisie , ces valeurs étant stockées sur une feuille appelée
controle.
Dans ces conditions, ce qui suit devrait faire l'affaire . Attention à
la troncature des lignes par le logiciel de messagerie.Il faut tout
avoir sur la même ligne pour l'instruction.

Private Sub Worksheet_Change(ByVal Target As Range)


If Not IsEmpty(Target) And Not
Sheets("controle").Cells.Find(what:=Target.Value, lookat:=xlWhole,
LookIn:=xlValues) Is Nothing Then MsgBox "déja saisi"


End Sub


A+


On 1 fév, 12:51, "" wrote:
Bonjour,
Lorsque j'exécute le code suivant en cliquant sur un bouton, situé sur
une feuille, auquel j'ai affecté la macro, ça fontionne très bien.
Par contre lorsque je le mets sur l'évènement "Change" de cette
feuille, le message "variable objet ou variable de bloc With non
définie" s'affiche quand il arrive sur Selection.Find...
Merci d'avance pour votre aide !

Private Sub Worksheet_Change(ByVal Target As Range)
Dim vNomFeuille
Dim vValeur
Dim vCompteur
Dim vAdresseRetour
Dim vAdresse
Dim vAdresseBis
vNomFeuille = ActiveSheet.Name
vValeur = ActiveCell.Value
vAdresseRetour = ActiveCell.Address
Application.Goto Sheets("Controle").Range("A1")
Selection.Find(What:=vValeur, After:¬tiveCell, LookIn:=xlValu es,
LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate
vAdresse = ActiveCell.Address
Selection.FindNext(After:¬tiveCell).Activate
vAdresseBis = ActiveCell.Address
If vAdresse = vAdresseBis Then
GoTo fin
Else
MsgBox "Ce numéro a déjà été saisi."
End If
fin:
Sheets(vNomFeuille).Select
Range(vAdresseRetour).Select
End Sub


Avatar
MichDenis
L'erreur "91" est provoquée par la méthode Find. Lorsque cette dernière
ne trouve pas dans la plage indiquée l'information désirée, cela provoque
une erreur 91.

Dim Rg as range
On error resume next
With selection
Set Rg = .Find(What:=vValeur, After:¬tiveCell, LookIn:=xlValues, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:úlse).Activate
If not Rg is nothing then
Rg.select
else
Msgbox "Rien trouvé."
end if


a écrit dans le message de news:

Bonjour,
Lorsque j'exécute le code suivant en cliquant sur un bouton, situé sur
une feuille, auquel j'ai affecté la macro, ça fontionne très bien.
Par contre lorsque je le mets sur l'évènement "Change" de cette
feuille, le message "variable objet ou variable de bloc With non
définie" s'affiche quand il arrive sur Selection.Find...
Merci d'avance pour votre aide !


Private Sub Worksheet_Change(ByVal Target As Range)
Dim vNomFeuille
Dim vValeur
Dim vCompteur
Dim vAdresseRetour
Dim vAdresse
Dim vAdresseBis
vNomFeuille = ActiveSheet.Name
vValeur = ActiveCell.Value
vAdresseRetour = ActiveCell.Address
Application.Goto Sheets("Controle").Range("A1")
Selection.Find(What:=vValeur, After:¬tiveCell, LookIn:=xlValues,
LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate
vAdresse = ActiveCell.Address
Selection.FindNext(After:¬tiveCell).Activate
vAdresseBis = ActiveCell.Address
If vAdresse = vAdresseBis Then
GoTo fin
Else
MsgBox "Ce numéro a déjà été saisi."
End If
fin:
Sheets(vNomFeuille).Select
Range(vAdresseRetour).Select
End Sub
Avatar
nuit6
Merci pour vos réponses !
Merci pour ton code anonymousA. Le problème c'est que dans la feuille
"controle" ce sont les valeurs contenues dans plusieurs autres
feuilles (collage avec liaison). Donc quand je rentre une valeur dans
une de ces feuilles, il y a forcément le message "déjà saisi"
puisqu'il trouve la valeur qui vient d'être saisie. Comment faire pour
chercher toutes les occurrences ? Merci d'avance !
Avatar
anonymousA
Là , je ne suis plus sur de tout comprendre. Peux-tu réexpliquer
exactement ce que tu veux.
Le code que je t'ai envoyé ne fait que deux choses:
-il vérifie que ce que tu saisis dans une feuille donnée ( celle qui
contient dans son module le code ) n'existe pas déjà dans la feuille
donnée.
-il te permet d'effacer des éléments dans ta feuille de base sans
envoyer le message "Déjà saisi".

A+


On 2 fév, 12:48, "" wrote:
Merci pour vos réponses !
Merci pour ton code anonymousA. Le problème c'est que dans la feuille
"controle" ce sont les valeurs contenues dans plusieurs autres
feuilles (collage avec liaison). Donc quand je rentre une valeur dans
une de ces feuilles, il y a forcément le message "déjà saisi"
puisqu'il trouve la valeur qui vient d'être saisie. Comment faire pour
chercher toutes les occurrences ? Merci d'avance !


Avatar
nuit6
Alors voilà :
J'ai un classeur avec plusieurs feuilles et je voudrais saisir des
nombres dans ces différentes feuilles sans entrer de doublon. J'ai
donc rajouter une feuille "controle" en collant avec liaison les
cellules susceptibles de recevoir des données. Quand je rentre un
nombre je voudrais que le code vérifie dans la feuille "controle" s'il
a déjà été saisi. Avec ce que tu m'as envoyé il le trouve forcé ment
une fois puisque c'est celui que je viens d'entrer. Je souhaiterais
donc savoir comment faire un Next.
Merci d'avance !
Avatar
JB
On 1 fév, 12:51, "" wrote:
Bonjour,
Lorsque j'exécute le code suivant en cliquant sur un bouton, situé sur
une feuille, auquel j'ai affecté la macro, ça fontionne très bien.
Par contre lorsque je le mets sur l'évènement "Change" de cette
feuille, le message "variable objet ou variable de bloc With non
définie" s'affiche quand il arrive sur Selection.Find...
Merci d'avance pour votre aide !

Private Sub Worksheet_Change(ByVal Target As Range)
Dim vNomFeuille
Dim vValeur
Dim vCompteur
Dim vAdresseRetour
Dim vAdresse
Dim vAdresseBis
vNomFeuille = ActiveSheet.Name
vValeur = ActiveCell.Value
vAdresseRetour = ActiveCell.Address
Application.Goto Sheets("Controle").Range("A1")
Selection.Find(What:=vValeur, After:¬tiveCell, LookIn:=xlValu es,
LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate
vAdresse = ActiveCell.Address
Selection.FindNext(After:¬tiveCell).Activate
vAdresseBis = ActiveCell.Address
If vAdresse = vAdresseBis Then
GoTo fin
Else
MsgBox "Ce numéro a déjà été saisi."
End If
fin:
Sheets(vNomFeuille).Select
Range(vAdresseRetour).Select
End Sub


Bonjour,

ListeContole est le nom de champ de la feuille Controle:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
If Application.CountIf([ListeControle], Target) > 1 And Target <> ""
Then
MsgBox "Doublon"
'Target = Empty
End If
End If
End Sub

http://cjoint.com/?cfkfz1UlPB

Cordialement JB

Avatar
nuit6
Merci bcp ! Bonne journée.