Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 fonction vlookup réticente ? (vba) [RESOLU]

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
Voilà j'ai dû rétrécir un max mon appli énorme ( chaque fichier comportait 200 onglets) et j'ai donc refait 2 fichiers avec le minimum
J'ai fait ça il y a 2 ans pour une amie qui gère une Ludothèque et qui font une "Bourse" chaque année .... là 3eme 'Bourse' et encore des bugs
Mais celui ci est vraiment bizarre ??? j'y ai déjà passé pas mal de temps mais 'creux' je ne vois pas pourquoi ? , j'explique le fonctionnement
Les onglets vendeurs sont du copier/coller de fichiers xlxs individuels reçu en inscription à cette Bourse , ensuite tout est rempli auto par des recopies via formules basiques
Le jour de la "Bourse" les gens prennent les jeux et passent en caisse , là le logiciel agit >

- Vous ouvrez le fichier ACHATEURS > VENDEURS va s'ouvrir auto. ( faut le même répertoire )
- Un USF se lance ( et se relance à chaque 'Activate" de l'onglet 'Toutes Les Listes')
Pour les essais : juste entrer le N° acheteur ... il n'y en a qu'un !! ici > choisir un code Jeu dans la liste ou taper CEUX qui fonctionnent sont de 1 à 20
Les box se remplissent bien
Si vous entrez un jeu en code 17xx > Erreur en ligne textbox6 comme ci dessous
VB:
Private Sub CodeJ_AfterUpdate()


Call vendu ' Vérifier si saisie manuelle du code le jeu n'est  pas déjà Vendu

If CodeJ = "" Then Exit Sub

TextBox6.Value = Application.WorksheetFunction.VLookup(CDbl(CodeJ), Sheets("TOUTES LES LISTES").Range("B4:D2005"), 2, 0) ' Recherche du Code et affecte le libellé

Cout = Format(Application.WorksheetFunction.VLookup(CDbl(CodeJ), Sheets("TOUTES LES LISTES").Range("B4:D2005"), 3, 0), "#,##0.00")
If Cout = "" Then MsgBox "Prix non renseigné ": Exit Sub
Prix = Cout

If TextBox6 = "Jeu Inexistant" Or JDV = 1 Then CodeJ = "": Exit Sub
Total = Total + CDbl(Prix)
Tfac = Format(Total, "#,##0.00")
End Sub
Si Essai réussi VALIDER , pour recommencer > EFFACER le code Jeu dans la fiche acheteur 1 car normalement on passe au suivant
Pour moi ce n'est pas un BUG !! mais un ALEA puisque tout le reste fonctionne sauf avec les jeux de la liste de 1700 ? il n'y a que cette fiche qui merdoie ???
dès le code jeu entré > ERREUR
Là je pige pas ce que c'est ??? je ne sais pas interpréter cette erreur
Merci bien de votre aide pour une explication
 

Pièces jointes

  • forumAV.zip
    245.6 KB · Affichages: 13
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Est-ce que ton problème ne viendrait pas simplement du mélange de données en texte et en nombre ?
En tout cas ce mélange est, à mon avis, une très mauvaise idée.



- Vous ouvrez le fichier ACHATEURS > VENDEURS va s'ouvrir auto. ( faut le même répertoire )
Exact.

- Un USF se lance ( et se relance à chaque 'Activate" de l'onglet 'Toutes Les Listes')
Exact.

Pour les essais : juste entrer le N° acheteur ... il n'y en a qu'un !! ici > choisir un code Jeu dans la liste ou taper CEUX qui fonctionnent sont de 1 à 20
Les box se remplissent bien
Non.



Je crois que tu devrais soigner les indentations dans ton code, ce qui te permettrait de mieux voir tes fautes de programmation.
Par exemple une fois cette macro indentée correctement, ça saute aux yeux :
VB:
Private Sub Valid_Click()
'
    Application.ScreenUpdating = False

    NumA = CStr(Num_acha.Value)
    If NumA = "" Then MsgBox "Vous avez oublié de sélectionner un N° Acheteur !": Exit Sub
    If ModeP = "" Then MsgBox " Vous n'avez pas complété le PAIEMENT ! ": Exit Sub
    If CodeJ = "" And Tfac = "" Then MsgBox "Pas de Jeu selectionné !": Exit Sub

    With Worksheets(NumA)

        If Prix <> "" Then
            dl = .Range("B30").End(xlUp).Row + 1
            .Range("B" & dl) = CDbl(CodeJ)
        End If

        For J = 1 To 5
            .Cells(J + 2, 2) = Controls("textbox" & J).Value
        Next J

        Select Case ModeP
        Case "Espèce"
            .Range("D34") = ModeP
            .Range("D33") = CDbl(TextBox8.Value)
        Case "Chèque"
            .Range("D34") = ModeP
        Case "Virement"
            .Range("D34") = ModeP
        End Select

        For y = 11 To 30
            codeA = .Cells(y, 2)
            If codeA = "" Then GoTo fin
            With Workbooks("BOURSE AUX JEUX - vendeurs.xlsm")
                For x = 3 To .Sheets.Count
                    For C = 10 To 29
                        jx = .Sheets(x).Cells(C, 2)
                        If codeA = jx Then .Sheets(x).Cells(C, 5) = .Sheets(x).Cells(C, 4)
                    Next C
                Next x
            End With
        Next y

    End With

fin:
    Application.ScreenUpdating = True
    Raz_usf
    UserForm_Initialize

End Sub
 
Dernière édition:

herve62

XLDnaute Barbatruc
Supporter XLD
Et ça c'est quoi ???
Mais si t'es aussi BALAIZE donne ta solution !!! au lieu de poser des questions absurdes
T'étais comme ça à l'école ??? t'as pas dû aller loin !!!!!!!!!!
Je suis SUR que si JOB , PATRICK , SYLVANU et j'en passe regarde mon sujet , j'aurai un autre style de réponse plus intelligente
 

Pièces jointes

  • vente.jpg
    139.5 KB · Affichages: 10

TooFatBoy

XLDnaute Barbatruc
Mais si t'es aussi BALAIZE donne ta solution !!! au lieu de poser des questions absurdes
Si j'étais balaize, je ne te donnerais pas simplement un axe de recherche, mais plutôt une solution.

Toutefois, la solution est peut-être contenue dans la question : vu que la question concerne le mélange de données en texte et en nombres, la moindre des choses est logiquement de tout mettre dans le même type de données (ici des nombres) et de tester de nouveau.

Ma question ne me semblait pourtant pas absurde, et je la pose de nouveau : pourquoi mélanger des données en texte et des données en nombre ?

J'en ajoute une autre : As-tu au moins essayé de transformer tes textes également en nombres, juste histoire de voir si la macro plante toujours ou pas ?
 
Dernière édition:

dev_co

XLDnaute Occasionnel
As-tu au moins essayé de transformer tes textes également en nombres, juste histoire de voir si la macro plante toujours ou pas ?
ben VAS Y fait le puisque tu sais tu as toutes les billes en main pour le faire !!!!! non ?
Ca fait 3 ans que ce fichier fonctionne ! sauf juste une fiche cette année , c'est pas moi l'utilisateur
pourquoi mélanger des données en texte et des données en nombre ?
Donc ça aurait dû planter les AUTRES ANNEES ... NON ??
là 144 Acheteurs > + de 900 Jeux vendu tout le fichier est OK ! sauf pour cette Fichue fiche qui l'an passé n'a pas posée PB , ALORS EXPLIQUE ? SOIT CONCRET !!
Tu me rappelles un gars sur mon forum informatique ( hyper réputé et top on peut pas mieux) qui répond comme toi JAMAIS RIEN de concret 100000 post !!!!!!!!!! à son acquit par contre le BOSS de ce forum pour un Pb c'est une réponse claire et nette une "TETE" de l'informatique ... va chez Malekal !!!
 

TooFatBoy

XLDnaute Barbatruc
Donc ça aurait dû planter les AUTRES ANNEES ... NON ??
S'il y avait d'autres fiches avec du texte, oui. Mais on n'a pas toutes les fiches pour vérifier leur contenu.

là 144 Acheteurs > + de 900 Jeux vendu tout le fichier est OK ! sauf pour cette Fichue fiche qui l'an passé n'a pas posée PB , ALORS EXPLIQUE ? SOIT CONCRET !!
J'ai déjà expliqué et été concret : il y a des données en textes et d'autres en nombres.
Le code de #1 fait une recherche avec un Cdbl().
Est-ce assez clair ?


ben VAS Y fait le puisque tu sais tu as toutes les billes en main pour le faire !!!!! non ?
Je crois que c'est plutôt au demandeur de s'investir un peu plus et de tester les axes de recherche qu'on lui propose (ce qui de plus lui permettrait probablement de mieux comprendre sa faute).

Mais puisque tu me l'as demandé, je viens de tester, et... chez moi ça marche.
 
Dernière édition:

dev_co

XLDnaute Occasionnel
Ben joins moi ton fichier que mon amie soit contente pour l'an prochain
Là je vais rencontrer Mophée
Je crois que c'est plutôt au demandeur de s'investir un peu plus et de tester les axes de recherche qu'on lui propose
Il y a 2 ans j'ai déjà eu ce soucis similaire difficile à résoudre à l'époque , et c'est ici que ce code m'a été fourni ( JOb ou Dranreb ou ? ) pour y remédier

c'est plutôt au demandeur de s'investir
J'ai déjà passé + de 10 h depuis 1 sem . mais bon apparemment pour toi j'ai rien foutu !!!!!!!!!!!!
?? BIZARRE à par toi , personne ne m'a répondu dans les habitués de mes post ???????
Je vais ruser !!!!!!!!! on va voir
 

TooFatBoy

XLDnaute Barbatruc
J'ai déjà passé + de 10 h depuis 1 sem . mais bon apparemment pour toi j'ai rien foutu !!!!!!!!!!!!
Je ne parlais pas de toi mais des demandeurs en général et donc aussi du créateur de ce fil de discussion, et je ne disais pas qu'il n'avait rien foutu, mais je disais juste qu'il pouvait à minima tester ce qu'on lui propose plutôt que de simplement attendre un fichier corrigé tout cuit.


?? BIZARRE à par toi , personne ne m'a répondu dans les habitués de mes post ???????
Je vais ruser !!!!!!!!! on va voir
Ils ont peut-être peur de se faire, eux aussi, rembarrer malgré une tentative d'aide...
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour
j'arrive je debarque à peine
bon j'ai télechargé le zip

une question
pourquoi n'a tu pas utilisé une feuille pour faire un tableau de liaison en tre le fichier acheteur et vendeur ?
une autre question je constate beaucoup de trucs du genre

VB:
  Select Case ModeP
        Case "Espèce"

            .Range("D34") = ModeP
            .Range("D33") = CDbl(TextBox8.Value)

        Case "Chèque"
            .Range("D34") = ModeP

        Case "Virement"
            .Range("D34") = ModeP

        End Select

il faudra m'expliquer le besoin du select case

je continu mes investigations
 

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
Patrick : Effectivement
Un truc du genre
Code:
If ModeP= "Espèce" Then .Range("D33") = CDbl(TextBox8.Value)
            .Range("D34") = ModeP
Pourrait suffire
Édit : Depuis mon téléphone
Jean marie
 

job75

XLDnaute Barbatruc
Bonjour à tous,

Dans le code de l'UserForm le 1er argument de VLookup utilise CDbl c'est donc un nombre.

Le bug vient du fait qu'en colonne B de la feuille "TOUTES LES LISTES" les valeurs 1761 à 1777 sont des textes.

Pour y remédier il suffit de convertir en nombres (en les revalidant) les mêmes valeurs de la feuille "1761 - 1780" du fichier "BOURSE AUX JEUX - vendeurs.xlsm".

C'est ce que j'ai fait dans le fichier joint.

A+
 

Pièces jointes

  • forumAV.zip
    233.7 KB · Affichages: 2

dev_co

XLDnaute Occasionnel
Bonsoir
merci à vous !!! du concret
J'ai investi cet am en reconstruisant encore un autre fichier exemple et j'ai trouvé aussi j'ai fait une macro qui m'affichait les codes Vartype donc j'ai vu du 8 pour les 1700 et du 5 pour l'autre liste
@job75 exactement ça !!
Bon maintenant le plus long c'est de retourner dans l'appli et se repastiller TOUTES les fiches , cette année ils ont eu 120 vendeurs donc reçu par mail 120 fiches excel ( comme le tableau acheteur) que maintenant je fais transférer ( via une moulinette vba ) dans le fichier VENDEURS avant leur Bourse
Et à mon avis toutes les fiches n'ont pas le même Format de données suffit d'une personne qui se mette à modifier le fichier et voilà !!!!!!!!!!!! l'an passé la fiche 1760 .... existait et il n'y avait pas eu le Pb
Faut que je regarde pour essayer de Vérouiller ....mais je vois pas comment chaque Vendeur complète chez lui le fichier !!!! donc ???? tout peut arriver
@patricktoulon @ChTi160 : vous savez j'essaie d'utiliser du code simple lisible compréhensible facilement , mon amie n'a que des bases de Vba et là ça fonctionne c'est le principal
Encore Merci , et aussi ... j'ai pu comprendre
 

TooFatBoy

XLDnaute Barbatruc
Il te suffit de mettre les cellules de la feuille en alignement standard et tu vois tout de suite si c'est du texte (alignement à gauche) ou un nombre (alignement à droite).


Donc vaut mieux gérer ça dans ta moulinette, avec un truc dans ce genre :
VB:
Sub CTD()
'
    With Range("B5:B44")
        .Value = .Value
    End With

End Sub
 
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…