Re, bonjour Bruno,
Evidemment si vous testez Result avant de le calculer, ça va pas le faire.
Remplacez par :
VB:
With [Tab_1]
test = IsError([Tab_1[ID]].Find(ListBox10, LookIn:=xlValues))
If test = False Then MsgBox "Valeur non trouvée."
Set Result = [Tab_1[ID]].Find(ListBox10, LookIn:=xlValues)
position = Result.Row - .Row + 1
.Item(position, 6) = .Item(position, 6) - CDbl(TextBox8.Value)
End With
Le but est simplement de savoir si l'erreur vient de là. Si c'est le cas on affinera.
@sylvanu perso j'ai quand même un poil qui est retord avec ton code
sans gravité certes mais étant partisan de l’économie, j'ai du mal avec tes deux find
qui entre nous ne sont pas nécessaires
d'autant plus (et là oui c'est plus grave) qu'il n'y a pas de sortie en cas d'erreur seullement un msgbox qui n'empêche pas le reste du code de s’exécuter jusqu'a l'erreur bien sur si le find ne donne rien
VB:
With [Tab_1]
test = IsError([Tab_1[ID]].Find(ListBox10, LookIn:=xlValues))'beep!!!!!'
If test = False Then MsgBox "Valeur non trouvée."'beep grave !!!!!!!'
Set Result = [Tab_1[ID]].Find(ListBox10, LookIn:=xlValues)'beep!!!!!'
position = Result.Row - .Row + 1
.Item(position, 6) = .Item(position, 6) - CDbl(TextBox8.Value)
End With
si j'ai bien compris l'intention
ceci est plus conforme
Code:
With [Tab_1]
'donnera nothing si find echoué ou object cells(voir item pour listobject si je ne me trompe pas
Set result = [Tab_1[ID]].Find(ListBox10, LookIn:=xlValues)
'on sort en claquant la porte si c'est echoué
If result Is Nothing Then MsgBox "Valeur non trouvée.": Exit Sub
'si on est pas sorti ben ca roule raoule on continu
Position = result.Row - .Row + 1
.Item(Position, 6) = .Item(Position, 6) - CDbl(TextBox8.Value)
End With
alors dans ce contexte avec le peu de code on pourrait parler du bloc with superfétatoire
qui dans ce contexte où Tab_1 en tant que parent n'est utilisé que sur 2 lignes
je reviens donc sur ce qu'a dit notre ami @Marvin57
après plusieurs essais, dans tous les sens, tout fonctionne
Bonjour Patrick,
Attention, il faut avoir suivi tout le fil pour comprendre.
Début : J'ai un code qui plante et je ne comprends pas. Pas de fichier, pas de contexte, juste une image.
Donc on cherche de où ça peut venir; Ca marche sur un PC, pas sur un autre.
D'où l'idée de regarder si au moins ce PC à accès au fichier. Test post #6.
Réponse : fichier non trouvé.
Second step : on intègre le test dans le code final . CECI N'EST QU'UN TEST UNIQUEMENT POUR COMPRENDRE.
Il n'a rien à faire dans le code final. D'où ma phrase au post #10.
re
oui je me doute que ça va plus loin que ça et que c'est juste une partie du code
mais je reviens sur ce que j'ai essayé de t'expliquer
donc plus brièvement ceci
VB:
test = IsError([Tab_1[ID]].Find(ListBox10, LookIn:=xlValues))'beep!!!!!'
na pas le sens de ta démarche car avec cette ligne(Si!!! en erreur par exemple)
et bien l'erreur elle peut venir de 3 endroits
le tab_1 walouh!!!
la colonne "ID" du tab_1 walouh!!!!
le find walouh!!!!
et là ou je suis perplexe c'est qu'en cas d'erreur
donc if test=false....... et bien tu ne sors pas
mais bien au contraire tu refais le même find à la ligne suivante et tu continue
pas Besoins d'avoir le fichier ou le reste du code pour comprendre que ça ne va pas
re
oui je me doute que ça va plus loin que ça et que c'est juste une partie du code
mais je reviens sur ce que j'ai essayé de t'expliquer
donc plus brièvement ceci
VB:
test = IsError([Tab_1[ID]].Find(ListBox10, LookIn:=xlValues))'beep!!!!!'
na pas le sens de ta démarche car avec cette ligne(Si!!! en erreur par exemple)
et bien l'erreur elle peut venir de 3 endroits
le tab_1 walouh!!!
la colonne "ID" du tab_1 walouh!!!!
le find walouh!!!!
et là ou je suis perplexe c'est qu'en cas d'erreur
donc if test=false....... et bien tu ne sors pas
mais bien au contraire tu refais le même find à la ligne suivante et tu continue
pas Besoins d'avoir le fichier ou le reste du code pour comprendre que ça ne va pas
alors j'ai essayé votre code patricktoulon et il m'affiche "Valeur non trouvée". Alors que je clique bien sur une ligne de données existante dans la listbox !
re
oui je me doute que ça va plus loin que ça et que c'est juste une partie du code
mais je reviens sur ce que j'ai essayé de t'expliquer
donc plus brièvement ceci
VB:
test = IsError([Tab_1[ID]].Find(ListBox10, LookIn:=xlValues))'beep!!!!!'
na pas le sens de ta démarche car avec cette ligne(Si!!! en erreur par exemple)
et bien l'erreur elle peut venir de 3 endroits
le tab_1 walouh!!!
la colonne "ID" du tab_1 walouh!!!!
le find walouh!!!!
et là ou je suis perplexe c'est qu'en cas d'erreur
donc if test=false....... et bien tu ne sors pas
mais bien au contraire tu refais le même find à la ligne suivante et tu continue
pas Besoins d'avoir le fichier ou le reste du code pour comprendre que ça ne va pas
par contre, je viens de voir que si après avoir eu le message "Valeur non trouvée" je quitte le userform et je l'ouvre à nouveau, tout à bien été pris en compte !
re
oui je me doute que ça va plus loin que ça et que c'est juste une partie du code
mais je reviens sur ce que j'ai essayé de t'expliquer
donc plus brièvement ceci
VB:
test = IsError([Tab_1[ID]].Find(ListBox10, LookIn:=xlValues))'beep!!!!!'
na pas le sens de ta démarche car avec cette ligne(Si!!! en erreur par exemple)
et bien l'erreur elle peut venir de 3 endroits
le tab_1 walouh!!!
la colonne "ID" du tab_1 walouh!!!!
le find walouh!!!!
et là ou je suis perplexe c'est qu'en cas d'erreur
donc if test=false....... et bien tu ne sors pas
mais bien au contraire tu refais le même find à la ligne suivante et tu continue
pas Besoins d'avoir le fichier ou le reste du code pour comprendre que ça ne va pas
re
oui je me doute que ça va plus loin que ça et que c'est juste une partie du code
mais je reviens sur ce que j'ai essayé de t'expliquer
donc plus brièvement ceci
VB:
test = IsError([Tab_1[ID]].Find(ListBox10, LookIn:=xlValues))'beep!!!!!'
na pas le sens de ta démarche car avec cette ligne(Si!!! en erreur par exemple)
et bien l'erreur elle peut venir de 3 endroits
le tab_1 walouh!!!
la colonne "ID" du tab_1 walouh!!!!
le find walouh!!!!
et là ou je suis perplexe c'est qu'en cas d'erreur
donc if test=false....... et bien tu ne sors pas
mais bien au contraire tu refais le même find à la ligne suivante et tu continue
pas Besoins d'avoir le fichier ou le reste du code pour comprendre que ça ne va pas
je reviens vers le forum pour vous placer le code complet dont il s'agit.
VB:
Private Sub CommandButton5_Click() 'SORTIE DU JOUR
Dim derligne%
On Error Resume Next
If TextBox8 = "" Then
MsgBox "Merci de renseigner la quantité."
TextBox8.SetFocus
Exit Sub
End If
If CDbl(TextBox8.Value) > CDbl(TextBox4.Value) Then
MsgBox ("La quantité sortie est supérieure au stock restant, rectifiez votre donnée.")
TextBox8 = ""
TextBox8.SetFocus
Exit Sub
End If
With [Tab_1]
Set Result = [Tab_1[ID]].Find(ListBox10, LookIn:=xlValues)
position = Result.Row - .Row + 1
.Item(position, 6) = .Item(position, 6) - CDbl(TextBox8.Value)
End With
With [Tab_S]
If .Item(1, 2) <> "" Then derligne = .Rows.Count + 1 Else derligne = 1
.Item(derligne, 1) = TextBox1
.Item(derligne, 2) = TextBox8
.Item(derligne, 3) = ComboBox2
.Item(derligne, 3) = ComboBox12
.Item(derligne, 4) = TextBox5
End With
InitListBox
If MsgBox("Souhaitez-vous enregistrer une autre sortie?", vbYesNo) = vbYes Then
Call UserForm_Initialize
Nettoie
Nettoie2
CommandButton102_Click
Call ACTUALISERTCD
Else
MsgBox ("Le stock a été mis à jour.")
Call UserForm_Initialize
Nettoie
Nettoie2
CommandButton102_Click
Call ACTUALISERTCD
Unload Me
Sheets("SORTIE DU JOUR").Visible = -1
Sheets("SORTIE DU JOUR").Select
End If
End Sub
Bonjour.
Curieux, chez moi pas d'erreur de compilation, mais bien sûr un "Objet requis" à l'exécution vu que le 1er MsgBox affiche tout naturellement "Error" dans mon nouveau classeur.
Quelle erreur ? "Objet requis" signifie qu'une expression qualificatrice (c'est à dire en tête d'une expression et suivie d'un point) ne correspond à aucun objet dûment défini.
Comme par exemple Nothing pour une méthode Find qui a échoué.