Menu

Erreur d’exécution '91'

steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention - 31 août 2018 à 10:58 - Dernière réponse : f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention
- 13 sept. 2018 à 08:17
Bonjour,

J'ai créer une base de données, et je rencontre plusieurs petits problèmes.

J'ai actuellement 2063 ligne dans mon tableau "recap" Dans la fenêtre recherche, si j'entre un numéro qui n'existe pas j'ai un message d'erreur " Erreur d’exécution '91' : variable objet ou variable de bloc Whit non définie"
Si je clique sur Fin je sort de mon UserForm et si je clique sur Débogage, je me retrouve sur ma fenêtre de code.
Ma question est la suivante, comment faire, pour afficher simplement un message me disant que la référence entrée n'existe pas.


Mon second problème est que si une personne qui s'est servie de la base de donner, laisse des filtres actifs dans le tableau "récap", quand moi je vais vouloir faire une nouvelle entrée, le numéro "automatique" m'affiche le suivant après le filtre, alors que celui-ci est déjà pris.
Comment faire, pour que même des filtres activés, je peux continuer ma saisie sans risque.

Un grand merci à ceux qui me viendront en aide.
Afficher la suite 

Votre réponse

45 réponses

jordane45 22518 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 31 août 2018 à 11:00
0
Merci
Bonjour,

Sans voir ton code.. impossible de te répondre.
Il faudrait également nous montrer la ligne de code sur laquelle apparaît le message d'erreur (lorsque tu fais débogage )


steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention - 31 août 2018 à 12:09
Sur l''exemple, il recherche le mot "trouvée" comment puis je modifié le code pour ma recherche de ligne ?
Option Explicit

Sub Cherche()
'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String

'********* à adapter ***********
'affectation de valeurs aux variables :
    'on cherche le mot "Trouve"
Valeur_Cherchee = "Trouve"
    'dans la première colonne de la feuille active
Set PlageDeRecherche = ActiveSheet.Columns(1)
'*******************************
jordane45 22518 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 31 août 2018 à 13:37
Dans le lignes de code que je t'ai donné juste avant.. tu remplaces la variable Valeur_Cherchee qui se trouve dans le find
jordane45 22518 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 31 août 2018 à 16:50
Autrement dit :
A la place de ta ligne
l = .Columns(1).Find(RECHER, , , , xlByColumns, xlNext).Row

Il faut :
Set Trouve = .Columns(1).Cells.Find(what:=RECHER, LookAt:=xlWhole)

'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then
    'ici, traitement pour le cas où la valeur n'est pas trouvée
    'par exemple : AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
Else
    'ici, traitement pour le cas où la valeur est trouvée
     l = Trouve.Row
End If
steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention - 4 sept. 2018 à 08:04
J'ai testé, mais j'ai une erreur 9. Qu'est que j'ai loupé ?

jordane45 22518 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention > steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention - 4 sept. 2018 à 09:41
Déjà .. un oubli d'initialisation de variable
Dim Trouve As Range
Commenter la réponse de jordane45
steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention - Modifié par jordane45 le 4/09/2018 à 11:01
0
Merci
Peux tu me dire si cette-fois c'est juste ?

'Pour rechercher les infos

 

Private Sub RECHER_Change()

Dim l As Integer

With Sheets("RECAP")

   

 'l = .Columns(1).Find(RECHER, , , , xlByColumns, xlNext).Row


 SetTrouve = .Columns(1).Cells.Find(What:=RECHER, looKat:=xlWhole)

        'Traitement de l'erreur possible. Si on ne trouve rien :

If Trouve Is Nothing Then

        'Ici traitement pour le cas où la valeur n'est pas trouvée

  Dim Trouve As Range

Else

        'Ici traitement si la valeur est trouvée.

    l = Trouve.Row

End If
jordane45 22518 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 4 sept. 2018 à 11:01
.... et ... tu en as fait quoi de ce que je t'ai indiqué ?
Dim Trouve As Range


NB: Je corrige ton message pour remettre correctement les balises de code... Merci de faire attention à l'avenir.
jordane45 22518 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention > jordane45 22518 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 4 sept. 2018 à 11:02
EDIT... tu l'as mis... mais pas au bon endroit....
Une déclaration de variable... ça se place AVANT de l'utiliser ! (et dans l'idéal.. au début de ton code )
steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention > jordane45 22518 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 4 sept. 2018 à 12:56
Voilà ce que j'ai écrit.
Private Sub RECHER_Change ()
Dim Trouve As Range
With Sheets ("RECAP")

Set Trouve =.Columns(1).Cells.Fond(What:=RECHER,looKat:=xlWole)

If Trouve Is Nothing Then
Else
   l=Trouve.Row
End If


Malheureusement cela ne fonctionne toujours pas,je ne parviens même plus à faire une recherche.

Merci pour ton aide.
f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention - 4 sept. 2018 à 16:18
Bonjour a tous et a toutes
steph575
Set Trouve =.Columns(1).Cells.Fond(What:=RECHER,looKat:=xlWole)
mieux comme ca:
Set Trouve = .Columns(1).Cells.Find(RECHER, , xlValues, xlWhole)


En fin de compte ce que Jordane45 vous avait ecrit.....................................
Commenter la réponse de steph575
steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention - Modifié par jordane45 le 5/09/2018 à 09:18
0
Merci
Bon j'ai suivi vos conseils et voici mon codage.
'Pour rechercher les infos

Private Sub Trouve()

Dim Trouve As Range

If Trouve Is Nothing Then

Else
    l = Trouve.Row
End If

    SetTrouve = .Columns(1).Cells.Find(RECHER, , xlValues, xlWhole)

    NUMBDCM = .Range("A" & l).Value
    DATE_BDCM = .Range("C" & l).Value
    saisiss = .Range("B" & l).Value
    numda = .Range("D" & l).Value
    TC = .Range("E" & l).Value
    FORM = .Range("F" & l).Value
    UNITE = .Range("G" & l).Value
    DAT_ACHT = .Range("H" & l).Value
    MOIS = .Range("I" & l).Value
    FACTUR = .Range("AG" & l).Value
    ENG = .Range("AH" & l).Value
    OBJET = .Range("J" & l).Value
    FOURNI = .Range("K" & l).Value
    MARCHE = .Range("L" & l).Value
    NUM_CDE = .Range("N" & l).Value
    NUMFAC = .Range("O" & l).Value
    NUMCPV = .Range("T" & l).Value
    COUT = .Range("V" & l).Value
    CF = .Range("AA" & l).Value
    DF = .Range("AB" & l).Value
    OBS = .Range("AI" & l).Value
    DATE_DP = .Range("AJ" & l).Value
    NUM_DP = .Range("AK" & l).Value
    AEC = .Range("AL" & l).Value
    DATE_CP = .Range("AM" & l).Value
    CPC = .Range("AN" & l).Value
    WFAE = .Range("AO" & l).Value
    LG = .Range("W" & l).Value
    PCE = .Range("R" & l).Value
    LIBCPV = .Range("U" & l).Value
    LIBPCE = .Range("S" & l).Value
    GM = .Range("P" & l).Value
    LIBGM = .Range("Q" & l).Value
    NUMCA = .Range("AD" & l).Value
    NOMCA = .Range("AF" & l).Value
    Porteur = .Range("AE" & l).Value
    TYP_DEP = .Range("it" & l).Value
     

' Cache bouton nouvelle entrée (évite fausse manip enregistrement 2 fois mm commande)
' Rend visible le bouton modifs
NVLLECMMDE.Visible = False
MODIFS.Visible = True
End Sub


Malheureusement, si je tape un numéro inexistant en effet le message d'erreur ne s'affiche plus, mais si je tape un numéro existant, rien ne se passe. Je ne peux donc plus rien modifier.
f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention - 5 sept. 2018 à 09:17
Bonjour,
Avec ce que vous avez ecrit, m'etonnerai que vous n'ayez pas de msg d'erreur sur numero pas trouve
If Trouve Is Nothing Then
'ici y a pas de exit sub donc erreur
Else
l = Trouve.Row
End If


Comment ce fait-il que ca marche chez moi et pas chez vous
Sur numero existe, mettez un point d'arret sur la ligne Set trouve et passez le curseur souris sur le l et RECHER pour voir leur contenu

Et si marche toujours pas , mettez votre fichier a dispo sans donnees confidentielles, mais des donness quand meme.

Je viens de voir l'énormité dans votre code!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Faudrait peut-etre mettre le set trouve avant le test is nothing non!!!!!!!!!!!!!!!!!!!!!!!!

Et changer le code du test par
If Trouve Is Nothing Then
        exit sub
End If

l = Trouve.Row
....
....
steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention > f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention - 5 sept. 2018 à 09:59
Ça ne marche pas plus... Comment mettre mon fichier à disposition.
jordane45 22518 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 5 sept. 2018 à 09:19
Bonjour,

Tu as oublié un espace après le set :
SetTrouve = .Columns(1).Cells.Find(RECHER, , xlValues, xlWhole)


Set Trouve = .Columns(1).Cells.Find(RECHER, , xlValues, xlWhole)
f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention - 5 sept. 2018 à 09:28
Bonjour jordane45,
Ok, mais le test pas au bon endroit c'est pas mal non plus!!!!
Commenter la réponse de steph575
steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention - 5 sept. 2018 à 10:23
0
Merci
Vous trouverez ici mon fichier.

https://www.cjoint.com/c/HIfiw2TyLCo

Encore merci pour votre aide !
f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention - 5 sept. 2018 à 11:04
Re,

Je regarde la chose.
Y a quand meme kake chose de curieux dans votre code, private sub trouve est lance comment et en plus ne correspond pas a l'image que vous avez mis au depart et le code sur cette image ne correspond pas a celui de votre fichier!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Autre anomalie l'userform2 (image) n'est jamais lancee!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Autre chose, sub Trouve et dim Trouve as range ca colle pas

Alors ou est-ce que ca coince, dans les procedures RECHER_Change ou ??????????????????????????????
jordane45 22518 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 5 sept. 2018 à 11:53
Sans oublier qu'il n'y a plus le feuille d'indiquée dans la sub
 With Sheets("RECAP")


Que le
end if

est pas au bon endroit... (il est juste avant le else.... Oo ) Il devrait se trouver après le else....

Que la sub Trouve n'est jamais apellée.... ou alors je n'ai pas trouvé où ni par quoi



Et puis.. pourquoi en avoir fait un PRIVATE SUB ?
Pourquoi ne pas simplement avoir remplacé ton code de départ par les quelques lignes que je t'ai donné au lieu de vouloir utiliser (bêtement) la SUB fourni dans l'exemple du lien que je t'ai donné ????

Il ne suffit pas de copier/coller du code n'importe comment... il faut essayer de le comprendre !
Il faut aussi se relire pour éviter des anneries de END IF mal placés ...des variables non déclarées ....

De plus.. dire qu'un code ne "marche pas" ... ce n'est pas suffisant .
Le VBA a pour avantage de t'indiquer la ligne qui cloche... et tu disposes de différents moyents pour essayer de comprendre le souci... tel que les points d'arrêts et le mode pas à pas.

As tu un minimum de connaissances en programmation ?

Avant de continuer, prend une grande respiration.... et prend le temps de réflechir à ce que tu souhaites exactement réaliser (les étapes à suivre)....
(en gros :
Dans ma sub toto
A la ligne ...
Je veux chercher dans la feuille "machin" la valeur provenant de ma variable "bidule".
Si la recherche a trouvée quelque chose..; alors...
Sinon....
)
Une fois ce travail réalisé, tu devrais être en mesure d'utiliser les bouts de code qu'il te faut.
Commenter la réponse de steph575
steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention - 5 sept. 2018 à 14:52
0
Merci
Je te remercie, je n'ai aucune connaissance en programmation et je le regrette.
C'est grâce à des exemples que j'en suis arrivé à faire cela.
f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention - 12 sept. 2018 à 16:43
Re,
c'est mon numéro d'enregistrement de mes achats
Vous pouvez developper car je ne vois d'ou il sortirait
steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention > f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention - 12 sept. 2018 à 16:55
Il commence à 00001 et s’agrémente automatiquement lors de chaque nouvel enregistrement. Il permet d'un d'être reporté sur les documents de la commande, permet la recherche afin de modifier la fiche.
Ci-joint la copie de l'original du code. https://www.cjoint.com/c/HIfiw2TyLCo
f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention - 12 sept. 2018 à 17:08
Re,
Ben, rien ne s'affiche quand j'ouvre mon UserForm1, le numéro (NUMBDCM) n'est plus apparent!!!!
Y a pas de code pour
Et sur le fichier que j'ai modifie si enreg modif, ca affiche le prochain numero libre
steph575 21 Messages postés vendredi 23 juin 2017Date d'inscription 12 septembre 2018 Dernière intervention > f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention - 12 sept. 2018 à 18:28
Oui, comment faire pour qu'il s'affiche à nouveau à l'ouverture de l'UserForm ?
f894009 13515 Messages postés dimanche 25 novembre 2007Date d'inscription 20 septembre 2018 Dernière intervention - 13 sept. 2018 à 08:17
Commenter la réponse de steph575