erreur d’exécution '91' variable objet gniagniagnia :)

Romao

XLDnaute Nouveau
Bonjour à tous,

Je me suis lancé dans VBA il y a peu et j'ai déjà eu l'occasion de corriger pas mal d'erreur en consultant les différents sujets du forum mais cette fois je tombe sur un os... Comme le dit le titre, c'est une erreur '91'. Je pense avoir correctement définit mes variables mais je sens que le problème est ailleurs... sans savoir où !!

Voici le code :

Code:
Sub Livraison()

Dim a As String
Dim b As Integer

a = InputBox("Entrez le nom de la monture livrée")
b = InputBox("Entrez la quantité livrée")

Sheets("Inventaire").Select

If b < 0 Then
MsgBox "Attention, la valeur doit être positive !!", vbRetryCancel, "Attention !!"
Else: Cells.Find(What:=a, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase _
:=False, SearchFormat:=False).Activate

End If

ActiveCell.Offset(0, 1).Select
ActiveCell = ActiveCell + b

Sheets("Livraisons").Select

Do While Range("C7").Value <> Empty
ActiveCell.Offset(1, 0).Select
Loop

ActiveCell.Value = Date
ActiveCell.Offset(0, 1) = a
ActiveCell.Offset(0, 2) = b

End Sub

Ca bloque dans le cells.find... Est-ce que quelqu'un saurait m'aider ? :)
 

Pierrot93

XLDnaute Barbatruc
Re : erreur d’exécution '91' variable objet gniagniagnia :)

Bonjour,

sans doute la valeur recherchée n'a pas été trouvé... pour éviter l'erreur et provoquer la sortie de procédure, il faut utiliser une variable objet... petit exemple ci-dessous :
Code:
Dim x As Range
Set x = Columns(1).Find(Date, , xlValues, xlWhole, , , False)
If x Is Nothing Then Exit Sub

bonne journée
@+
 

JNP

XLDnaute Barbatruc
Re : erreur d’exécution '91' variable objet gniagniagnia :)

Bonjour Romao et bienvenue :),
On n'utilise jamais .Find directement, sauf s'il s'agit de chercher une valeur qu'on est sûr de trouver (issu d'un combobox par exemple :rolleyes:).
De plus, on évite très sérieusement les Select et Activate, et on référence systématiquement les feuilles pour éviter les problèmes :p...
Ta boucle tourne à vide, vu que tu ne fait rien pour remplir C7, et que c'est cette cellule que tu testes à chaque fois :eek:...
Bref
Code:
Sub Livraison()
Dim a As String
Dim b As Integer
Dim Cel As Range
Dim DerLigne As Integer
a = InputBox("Entrez le nom de la monture livrée")
b = InputBox("Entrez la quantité livrée")
With Sheets("Inventaire")
If b < 0 Then
MsgBox "Attention, la valeur doit être positive !!", vbRetryCancel, "Attention !!"
Else
Set Cel = .Cells.Find(What:=a, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase _
:=False, SearchFormat:=False).Activate
If Cel Is Nothing Then MsgBox "Monture inexistante !": Exit Sub
End If
Cel.Offset(0, 1) = Cel.Offset(0, 1) + b
End With
With Sheets("Livraisons")
DerLigne = .Range("C35000").End(xlUp).Row + 1
.Range("C" & DerLigne).Value = Date
.Range("D" & DerLigne) = a
.Range("E" & DerLigne) = b
End With
End Sub
Risque de mieux marcher (sans garantie sans fichier de test :mad:...)
Bonne journée :cool:
Ajout : Salut Pierrot :). Si seulement il n'y avait eu que ça :p...
 

Romao

XLDnaute Nouveau
Re : erreur d’exécution '91' variable objet gniagniagnia :)

Bonjour Pierrot93 :)

La clé est sûrement là (j'ai lu que c'était souvent le cas avec les Cells.find) mais je suis étonné parce que la valeur devrait être trouvée sans problème. Enfin, je te fais confiance ^^

Par contre ("ouh qu'il est chiant celui-là !" - Désolé :( ) serait-il possible de m'expliquer un peu ton bout de code stp ? Je n'y comprends pas grand chose à vrai dire, et j'aimerais mieux comprendre afin que ça ne se reproduise plus.

Par avance, merci :)
 

Romao

XLDnaute Nouveau
Re : erreur d’exécution '91' variable objet gniagniagnia :)

Bonjour Romao et bienvenue :),
On n'utilise jamais .Find directement, sauf s'il s'agit de chercher une valeur qu'on est sûr de trouver (issu d'un combobox par exemple :rolleyes:).
De plus, on évite très sérieusement les Select et Activate, et on référence systématiquement les feuilles pour éviter les problèmes :p...
Ta boucle tourne à vide, vu que tu ne fait rien pour remplir C7, et que c'est cette cellule que tu testes à chaque fois :eek:...
Bref
Code:
Sub Livraison()
Dim a As String
Dim b As Integer
Dim Cel As Range
Dim DerLigne As Integer
a = InputBox("Entrez le nom de la monture livrée")
b = InputBox("Entrez la quantité livrée")
With Sheets("Inventaire")
If b < 0 Then
MsgBox "Attention, la valeur doit être positive !!", vbRetryCancel, "Attention !!"
Else
Set Cel = .Cells.Find(What:=a, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase _
:=False, SearchFormat:=False).Activate
If Cel Is Nothing Then MsgBox "Monture inexistante !": Exit Sub
End If
Cel.Offset(0, 1) = Cel.Offset(0, 1) + b
End With
With Sheets("Livraisons")
DerLigne = .Range("C35000").End(xlUp).Row + 1
.Range("C" & DerLigne).Value = Date
.Range("D" & DerLigne) = a
.Range("E" & DerLigne) = b
End With
End Sub
Risque de mieux marcher (sans garantie sans fichier de test :mad:...)
Bonne journée :cool:
Ajout : Salut Pierrot :). Si seulement il n'y avait eu que ça :p...

Ouch !!

Merci ^^ J'avais vu que ma boucle n'était pas bien géniale mais je m'attardais sur ma première erreur. Ca évite une seconde question :p Merci beaucoup, pour ça et pour tout le reste :) Je teste de suite.
 

Pierrot93

XLDnaute Barbatruc
Re : erreur d’exécution '91' variable objet gniagniagnia :)

Re,

la méthode "find" renvoie un objet "range", je déclare donc une variable de ce type que j'initialise par la méthode "find", si la valeur n'est pas trouvée, l'objet n'est pas initialisé et sa valeur reste à "nothing" c'est ce que test le "if"...

Regarde également la solution de JNP:), beaucoup plus courageux que moi... :)
 

Romao

XLDnaute Nouveau
Re : erreur d’exécution '91' variable objet gniagniagnia :)

Je viens de tester et il y a une nouvelle erreur au niveau du Set. Je joins le fichier pour que ce soit plus clair.
 

Pièces jointes

  • Inventaire.xls
    58.5 KB · Affichages: 68
  • Inventaire.xls
    58.5 KB · Affichages: 86
  • Inventaire.xls
    58.5 KB · Affichages: 82

Romao

XLDnaute Nouveau
Re : erreur d’exécution '91' variable objet gniagniagnia :)

Toujours le même, enfin celui donné par JNP : Livraison()

Apparemment, j'ai une erreur 1004 ici :

Code:
Set Cel = .Cells.Find(What:=a, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase _
:=False, SearchFormat:=False).Activate
If Cel Is Nothing Then MsgBox "Monture inexistante !": Exit Sub
 

Pierrot93

XLDnaute Barbatruc
Re : erreur d’exécution '91' variable objet gniagniagnia :)

Re,

supprime le ".activate"
Code:
Set Cel = .Cells.Find(What:=a, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase _
:=False, SearchFormat:=False)
 

Discussions similaires

Réponses
2
Affichages
759

Statistiques des forums

Discussions
312 496
Messages
2 088 983
Membres
103 997
dernier inscrit
SET2A