Microsoft 365 Erreur de code

Marvin57

XLDnaute Occasionnel
Bonjour à toutes et à tous,

alors avant de préparer un fichier modèle ( ce qui va prendre pas mal de temps), je vous place une image de l'erreur que j'ai dans un code.

Peut-être cela suffira pour me donner un conseil ou me guider, sinon il va falloir que je prépare un modèle. Bref, voila l'erreur du code :

erreur code Marvin57.jpg


Merci d'avance à vous.

Marvin57
 
Solution
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.

Car il me donne l'erreur suivante
Très intéressant. Et laquelle ? 😅

patricktoulon

XLDnaute Barbatruc
bonjour à tous
Juste en passant

@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
je lui répondrais "BON' CHANCE";)car il y certainement des sens qu'il n'a pas essayé
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
Le but est simplement de savoir si l'erreur vient de là. Si c'est le cas on affinera.
Et ça s'est arrêté là puisque le demandeur à identifier le problème.
 

patricktoulon

XLDnaute Barbatruc
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
  1. le tab_1 walouh!!!
  2. la colonne "ID" du tab_1 walouh!!!!
  3. 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
 

Marvin57

XLDnaute Occasionnel
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
  1. le tab_1 walouh!!!
  2. la colonne "ID" du tab_1 walouh!!!!
  3. 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
Bonjour patricktoulon et sylvanu,

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 !
 

Marvin57

XLDnaute Occasionnel
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
  1. le tab_1 walouh!!!
  2. la colonne "ID" du tab_1 walouh!!!!
  3. 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,

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 !
 

Marvin57

XLDnaute Occasionnel
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
  1. le tab_1 walouh!!!
  2. la colonne "ID" du tab_1 walouh!!!!
  3. 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,

et pour continuer mes essais;

si j'enlève la ligne

'on sort en claquant la porte si c'est echoué
'If Result Is Nothing Then MsgBox "Valeur non trouvée.": Exit Sub

tout fonctionne.
 

Marvin57

XLDnaute Occasionnel
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
  1. le tab_1 walouh!!!
  2. la colonne "ID" du tab_1 walouh!!!!
  3. 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 patricktoulon,

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
 

Dranreb

XLDnaute Barbatruc
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é.
 

Discussions similaires

Réponses
15
Affichages
363
Réponses
5
Affichages
124
Réponses
2
Affichages
127
Réponses
93
Affichages
2 K
Réponses
17
Affichages
340
Réponses
2
Affichages
179
Réponses
0
Affichages
126
Réponses
9
Affichages
655
  • Résolu(e)
Microsoft 365 Formule SI
Réponses
8
Affichages
184

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel