Menu

Erreur d’exécution '91'

Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
- - Dernière réponse : steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
- 14 nov. 2018 à 11:39
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

10 réponses

Meilleure réponse
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
1
Merci
Bonjour,
Question simple: quel est le separateur de decimale de votre EXCEL, un point ou une virgule??

Merci f894009 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM a aidé 33332 internautes ce mois-ci

f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Re,

convertir en nombre les infos textbox's pour modif et nouvelle
        .Range("G" & l).Value = CDbl(HT1)
        .Range("H" & l).Value = CDbl(TTC1)
Commenter la réponse de f894009
Messages postés
23596
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 décembre 2018
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
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
-
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
Messages postés
23596
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 décembre 2018
-
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
Messages postés
23596
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 décembre 2018
-
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
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
-
J'ai testé, mais j'ai une erreur 9. Qu'est que j'ai loupé ?

jordane45
Messages postés
23596
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 décembre 2018
> steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
-
Déjà .. un oubli d'initialisation de variable
Dim Trouve As Range
Commenter la réponse de jordane45
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
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
Messages postés
23596
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 décembre 2018
-
.... 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
Messages postés
23596
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 décembre 2018
> jordane45
Messages postés
23596
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 décembre 2018
-
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
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
> jordane45
Messages postés
23596
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 décembre 2018
-
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
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
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
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
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
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
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
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
> f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Ça ne marche pas plus... Comment mettre mon fichier à disposition.
jordane45
Messages postés
23596
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 décembre 2018
-
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
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Bonjour jordane45,
Ok, mais le test pas au bon endroit c'est pas mal non plus!!!!
Commenter la réponse de steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
0
Merci
Vous trouverez ici mon fichier.

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

Encore merci pour votre aide !
f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
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
Messages postés
23596
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 décembre 2018
-
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
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
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
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Re,
c'est mon numéro d'enregistrement de mes achats
Vous pouvez developper car je ne vois d'ou il sortirait
steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
> f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
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
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
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
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
> f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Oui, comment faire pour qu'il s'affiche à nouveau à l'ouverture de l'UserForm ?
f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Commenter la réponse de steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
0
Merci
Je reviens vers vous car je rencontre à nouveau un soucis, et n'ai pas trouvé de solution au problème.
Je m'explique.

Mon UserForm, renvoi dans mon "Récap_N1" les montant HT et TTC sous format "texte", ce qui a pour conséquence que mes formules dans mon onglet "Computation des seuils N1" ne fonctionnent pas.

Qui peux m'expliquer où est l'erreur dans ma programmation VBA

Merci d'avance.

Mon fichier : https://mon-partage.fr/f/a9c5wg0q/

Commenter la réponse de steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
0
Merci
Bonjour.

Hé oui j'ai encore un soucis, je souhaiterai intégrer dans la numérotation automatique un préfixe afin qu'elle apparaisse dans mon userForm comme ceci : N1 - 00001
Voici mon code, que dois-je modifier pour intégrer mon préfixe.

Private Sub nouveau_num()
Dim Ligne As Long
'numero de la 1ere commande
premnum = 1 'à modifier si nécessaire

Ligne = Sheets("Recap_N1").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
a = Sheets("Recap_N1").Range("A" & Ligne - 1).Value

If a = "N°" Then numc = premnum Else numc = Val(Right(a, 5)) + 1

ndc = WorksheetFunction.Rept("0", 5 - Len(numc)) & numc
NUM_SAF = ndc
f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Re,

Je ne sais pas si je me fais bien comprendre...
Si, mais comment seraient empilees ces donnees???
steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
-
Les unes à la suites des autres sans tri, compte-tenu que chaque n° sera identifié (grâce à toi) comme suis :
N1-00001 ou N3-00001, ce qui permettra qu'il n'y ai pas de doublon.
f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Bonjour,

Ok, je regarde la chose
steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
-
J'ai essayé une macro, mais elle ne veux pas fonctionner...

Option Explicit
Dim i As Integer, j As Integer, k As Integer, lr As Integer, derligne As Integer, lastR As Integer

Subeffacer()
Sheets("Recap").Select
Rows("8:10000").Select
Range("A8").Select
Selection.Deleteshift:=xlUp

End Sub

Subgénérer()

Application.ScreenUpdating = False
effacer

For j = 1 To 2
Sheets(j).Select
derligne = Range("A10000").End(xlUp).Row
For i = 2 To derligne
Sheets(j).Select
Rows(i).Select
Selection.Copy

Sheets("Recap").Select
lr = Range("A10000").End(xlUp).Row + 1
Cells(lr, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False

Next i
Next j


End Sub
f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Bonjour,
Je vous ai un peu oublie…….!!
Il n'y a pas que la copie, il y a aussi la partie modif !!!!!!!!!
Commenter la réponse de steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
0
Merci
La modif peux rester je pense sur des feuilles d'origines, c'est surtout la copie qui m'intéresse beaucoup.
f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Re,

La modif peux rester
Ben facile a faire, inclure la copie sur les deux boutons. Mais si la partie origine vous va OK...
Commenter la réponse de steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
0
Merci
oui mais dans ce cas il ne faut pas que les deux userform soient identiques ?
perso j'ai essayé de reporter un code, mais je n'arrive à aucun résultat.
steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
-
OK c'est génial cela fonctionne, mais je n'arrive pas à mettre en place le tri.
f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Re,

mais je n'arrive pas à mettre en place le tri.
Ben, dans ce que j'ai mis a dispo, y en a pas!!!!!!!
Relisez les post 75 et 76...………………………………..
steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
-
l serai peut être plus simple dans ce cas que je renvoie un format date...
f894009
Messages postés
13790
Date d'inscription
dimanche 25 novembre 2007
Dernière intervention
12 décembre 2018
-
Re,
Ben oui, vois pas pourquoi se compliquer la vie avec des formats a la c..
steph575
Messages postés
37
Date d'inscription
vendredi 23 juin 2017
Dernière intervention
14 novembre 2018
-
J'essaye et je te tien au courant.
Commenter la réponse de steph575