Vlookup vba ne fonctionne pas

Résolu/Fermé
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 21 mars 2013 à 02:57
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 26 mars 2013 à 04:43
Bonjour à tous,

Encore moi! Je croyais faire quelque chose de simple et ça ne fonctionne pas. J'ai lu les tutoriels, fait des recherches.. je ne comprends pas ce qui ne va pas.. dois-je gérer le fait qu'il ne trouve pas de réponse à la recherche?
J'ai déjà essayer de le faire tout simplement en formule avec recherche V, ça ne fonctionnais pas et depuis j'ai découvert le VBA alors c'est toujours mieux de le faire de cette façon..

Alors voilà, à chaque fin de moi, mon logiciel de comptabilité me permet d'exporter mes résultats en Excel, ce que je fais car je dois envoyer des rapports en Excel à des gens par la suite..

alors j'ai un fichier : ici calsseur1.. dans lequel normalement j'aurais plusieurs feuilles
le mois| un graphique| un feuille avec calcul| balance de vérification(bv)|résultas (res)| bilan
et ainsi de suite pour chacun des mois de l'année..
ici pour les besoin de la cause j'ai simplifié au minimum mes feuilles et mes données (j'ai retiré la feuille graphique et mon autre feuille contenant des calculs) aussi pour une question de confidentialité, j'ai changé les chiffres de mes résultats

donc dans la feuille du mois : pour janvier : Janv :
ce sont mes résultats.. pour remplir cette feuille, j'ai le choix d'utiliser soit la feuille bv ou la feuille résultats..
dans ce cas ci j'ai pris résultats..
(en choisissant la feuille bv j'aurais pu faire une recherche par les numéros de compte au lieu des nom.. mais j'ai essayé et ça fonctionnais pas plus..)

mon fichier Excel est une présentation différente de mes résultats qui viennent de mon logiciel de comptabilité, j'additionne des cases.., je dois m'en tenir à une certaine mise en page..

Mais voilà que mes données exportées de mon logiciel de comptabilité semble avoir des espaces, devant et derrière les données j'ai mis un bouton dans la feuille résultat qui devrait régler ceci d'abord :


Sub enleverespaces()
Application.ScreenUpdating = False
Dim A As Range
With Sheets("res01")
For Each A In Columns("A:A").SpecialCells(xlCellTypeConstants, 23)
A.Value = Replace(A.Text, Chr(32), vbNullString)
A.Value = Replace(A.Text, Chr(160), vbNullString)
Next
Application.ScreenUpdating = True
End With
End Sub



ensuite avec le bouton dans la feuille janvier je vais chercher avec Vlookup les données dans ma feuille résultat et je voudrais les placer et les additionner (selon les cas)

Résultat : ça ne fonctionne qu'au premier..
Je sais que la deuxième rechercher devrait donner 0 mais je tombe erreur 400 avec aucun détail..

probablement que mon problème vient du fait que je ne gère pas l'erreur du au fait que la recherche est infructueuse?

quelqu'un aurait la gentillesse et la capacité de me donner un coup de main?
merci à l'avance
Mélanie

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


A voir également:

7 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 311
21 mars 2013 à 08:02
bonjour,

Pour effacer les espaces devant et derrière des textes la fonction VBA est TRIM(" le texte ")



Pourquoi as tu pratiquement les m^me macros dans le module janv et thisworkbook ?

Ton classeur réel couvre t il toute l'année ?
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
21 mars 2013 à 15:31
Bonjour Michel

oui mon classeur couvre toute l'année..


alors j'ai un fichier : ici calsseur1.. dans lequel normalement j'aurais plusieurs feuilles
le mois| un graphique| un feuille avec calcul| balance de vérification(bv)|résultas (res)| bilan
et ainsi de suite pour chacun des mois de l'année..


ici pour les besoin de la cause j'ai simplifié au minimum mes feuilles et mes données (j'ai retiré la feuille graphique et mon autre feuille contenant des calculs) aussi pour une question de confidentialité, j'ai changé les chiffres de mes résultats

je pensais faire un code pour chaque mois

merci de prendre le temps de m'aider
Mélanie
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 311
21 mars 2013 à 16:28
Je m'y mets; réponse certainement demain
je prends comme hypothèse que les résultats (re....) ont toujours la m^me structure: m^mes lignes et colonnes....
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
21 mars 2013 à 16:31
bonjour Michel
le nombre de ligne peux changer, si par exemple il n'y avait pas de vente dans la feuille res01, la ligne vente n'apparaitrait pas.
Par contre si tu parle de ma feuille ou on va mettre le résultat soit janvier dans ce cas-ci, celle là reste toujours la même
encore merci
Mélanie
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 311
21 mars 2013 à 17:20
Ce qui me gène énormément est que les termes ne correspondent pas entre le mois et le résultat
Il serait bon que dans la feuille résultats tu me donnes l'aspect envoyé par ton logiciel de compta
Je t'avoue que je me vois mal parti...
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
21 mars 2013 à 17:30
Bonjour Michel

Effectivement ce que me donne mon logiciel de comptabilité : la feuille res01 et ce qu'il y a dans ma feuille janv ne sont pas les mêmes termes.. c'est pour ça que je dois faire ce fichier.. car nos partenaires d'affaires veulent avoir le même genre de fichier standardiser à tous leur partenaire : feuil janv mais moi mon logiciel de comptabilité me donne la présentation et les termes de la feuil rs02.. à date je vais moi-même chaque moi regrouper les chiffres et les mettre manuellement mais cela me prend un temps fou chaque mois..
Dans mon code fait à date c'est que je spécifie moi-même les données que je veux regrouper ensemble..
Comme par exemple : dans entretien et réparation :
Je sais que dans mon logiciel de comptabilité j'ai la possibilité de tous les comptes inscris dans mon code, mais cela ne veut pas nécessairement dire que ces comptes de dépenses apparaitrons dans chacun des mois..

Sub ENTRETIENETRÉPARATIONS()
With Sheets("Janv")
  .Range("B22").Value = WorksheetFunction.VLookup("ENTRETIENDIVERS", Sheets("Res01").Range("A2:D200"), 2, False) + WorksheetFunction.VLookup("ENTRETIENTERRAIN", Sheets("Res01").Range("A2:D200"), 2, False) + _
   WorksheetFunction.VLookup("ENTRETIENÉQUIPEMENTSÉCHOIRS", Sheets("Res01").Range("A2:D200"), 2, False) + WorksheetFunction.VLookup("ENTRETIENLIGNECHALEUR", Sheets("Res01").Range("A2:D200"), 2, False) + _
   WorksheetFunction.VLookup("ENTRETIENMATÉRIELROULANT", Sheets("Res01").Range("A2:D200"), 2, False) + WorksheetFunction.VLookup("ENTRETIENREMORQUE", Sheets("Res01").Range("A2:D200"), 2, False) + _
   WorksheetFunction.VLookup("ENTRETIENENTREPOT", Sheets("Res01").Range("A2:D200"), 2, False) + WorksheetFunction.VLookup("ENTRETIENBUREAU", Sheets("Res01").Range("A2:D200"), 2, False) + _
   WorksheetFunction.VLookup("ENTRETIENBALAI", Sheets("Res01").Range("A2:D200"), 2, False) + WorksheetFunction.VLookup("PLANEUR", Sheets("Res01").Range("A2:D200"), 2, False)
   
End With
End Sub<code>
</code>

Je sais pas si ce que je dis est clair pour toi?
Je suis consciente que de cette façon à chaque nouveau compte créer dans mon logiciel de comptabilité je devrai changer mon code dans mon fichier mais ça ne me dérange pas.. ça arrive que très rarement et juste que ce soit automatiser ça va me sauver de longues heures à chaque mois

Mélanie
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 311
21 mars 2013 à 18:37
Si tu as par ex ENTRETIENTERRAIN non présent dans Resxx, tu plantes la macro

voici ce que j'avais pondu:

juste 12 macros courtes lançant une macro paramétrée qui fait la liste des libellés présents dans Resxx avec leurs valeurs (Tes espaces parasites sont enlevés)

on parcourt en suite le mois
Lorsque un libellé est présent dans le dico, on a la valeur;sinon on passe; dans ma bidouille un libellé présent, une cellule remplie car je n'avais pas regardé les libellés regroupant des sous libellés(entretien)

Option Explicit
Sub apurer_Janv()
     affecter_Valeur "janv", "res01"
End Sub

Sub apurer_fev()
     affecter_Valeur "fev", "res02"
End Sub

Sub affecter_Valeur(mois, result)
Dim Dico As Object, Lig As Integer, Derlig As Integer
Dim Ref As String, Valeur As String

With Sheets(result)
     'Liste des affectations présentes colonne A et  valeur col B
     Set Dico = CreateObject("scripting.dictionary")
     Derlig = Columns("A").Find("*", , , , , xlPrevious).Row
     For Lig = 8 To Derlig
          If .Cells(Lig, "A") <> "" Then
               'enlevement des espaces parasites y compris dans valeur
               Ref = Trim(.Cells(Lig, "A"))
               Valeur = Trim(.Cells(Lig, "B"))
               'cration du couple affectation-valeurs
               Dico.Add Ref, Valeur
          End If
     Next
End With

With Sheets(mois)
     For Lig = 5 To 49
          Ref = Cells(Lig, "A")
          If Ref <> "" Then
               'Si l 'affectation existe dans Result copie de la valeur transformée en nombre
               If Dico.exists(Ref) Then .Cells(Lig, "C") = (Dico.Item(Ref)) * 1
          End If
     Next
End With
End Sub
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
22 mars 2013 à 15:39
Bonjour Michel

Je te remercie te ta patience,
voici le lien pour le fichier : il s'agit d'un vrai fichier provenant de mon logiciel de comptabilité.
https://www.cjoint.com/?3CwpHWNiUsd

Je travaille ce matin sur ce que tu m'as envoyé.. je te reviens

encore merci
Mélanie
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
22 mars 2013 à 17:03
Bonjour Michel

Je suis en train d'essayer ton code.. Pour l'instant je n'ai mis que janvier et je n'ai pas ajouter toutes les autres cases.. je voulais juste vérifier si ça fonctionnais..

il ne se passe rien.. je vois qu'il travaille mais rien..

J'ai vu ton message

Si pour une raison x ou y, c'est impossible, il faut que tu fasses dans une feuille nouvelle un lexique par ex "Frais location " ==> "Frais de location"

dois-je toujours créer ce lexique? J'aurais tendance à penser que non en regardant le code, je crois que je dois seulement inscrire les bons termes comme ils doivent apparaître dans la feuille result et ça devrait fonctionner?


J'ai regardé le code pas à pas

j'aurais une question : le derlig arrête à 50, c'est normal? 50 est le nombre de ligne dans ma feuille de mois et non dans mes résultats..

et dans la fonction
verif = vide.. normal?


Désolé, peut-être je dis des conneries.. je suis débutante alors j'essaie de comprendre.. je vais te joindre le fichier dans lequel je travaille présentement avec la feuille importer de mon logiciel de comptabilité sans y avoir essayer ton code alors intact.. si ça peut aider..

Mélanie
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
22 mars 2013 à 17:11
Bonjour Michel


tel qu'indiqué dans mon précédent message :
voici le fichier sur lequel j'ai fais mes tests, avec la feuille de mon logiciel intacte


https://www.cjoint.com/?3CwrjVQONtV

merci beaucoup
Mélanie
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 311
22 mars 2013 à 17:40
pour derlig: il manquait un point devant columns("A"): on arrive maintenant à 116

je viens de réessayer pour les frais de transport, (j'ai remis les espaces utiles dans les 2 lignes de Res01): il faut que ce tu appelles soit identique dans Vlookup(libellé_cherché, etc)
j'ai essayé en pas à pas et c'est Ok avec ton premier envoi du classeur: j'ai bien 124 en ventes , 0 en vente epurage et 3 en transport
je te laisse le soin d'écrire les appels pour les autres cellules s...
ci joint la b^te
https://www.cjoint.com/?3CwrH5Se03s

nota laisse tomber mon lien 9 car je me suis rabattu sur les "Vlookup". D'ailleurs, je vais le supprimer
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
22 mars 2013 à 18:20
Bonjour Michel

Je tiens à te remercier pour tout ce que tu fais pour moi.. je sais plus tôt que tu as dit que tu en avais marre et j'aimerais bien ne plus te déranger avec ça mais voilà :

ça ne fonctionne pas tout à fait.. presque mais pas tout à fait

J'ai pris la bête, je l'ai enregistré, j'ai copier mon tableau réel dans la feuille du mois, ce qui exactement le même (j'ai copier la colonne A de ton fichier pour être certaine)
ensuite j'ai copier les vrais feuilles provenant de mon système comptabilité

et quand j'exécute :
ça fonctionne mais ça me met 0 partout ou ça doit mettre des chiffres..

je sais que pour transport c'est ok que ça mette un 0 mais pour les ventes ça aurais dû mettre autre choses..

encore un petit coup de main svp? :)

je te met mon fichier
https://www.cjoint.com/?3CwsulPoWu7

encore merci
Mélanie
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
26 mars 2013 à 04:43
bonjour Michel,

Le problème vient du fait que les espaces ne s'enlèvent pas.. j'ai copié les libellés directement via la feuille résultat dans le code et ça fonctionne!

voici ce que ça a donné :

With Sheets(mois)
     .Range("B5") = chercher_valeur("VENTES                                   ", result)
     .Range("B6") = chercher_valeur("VENTES (ÉTUVAGE)                         ", result)
     .Range("B7") = chercher_valeur("REVENU DE LOCATION                            ", result)
     .Range("B8") = chercher_valeur("ESCOMPTES DE CAISSE CLIENT                    ", result)
     .Range("B14") = chercher_valeur("ESCOMPTES SUR ACHATS                          ", result)
     '.Range ("B15") = chercher_valeur
     '.Range("B16") = chercher_valeur("", result)
     .Range("B17") = chercher_valeur("FRAIS DE TRANSPORT                       ", result) + chercher_valeur("FRAIS DE TRANSPORT AMEX                  ", result)
     .Range("B18") = chercher_valeur("ÉLECTRICITÉ  ET VAPEUR                   ", result)
     '.Range("B19") = chercher_valeur("", result)
     .Range("B20") = chercher_valeur("ENTRETIEN LIFT                           ", result)
      .Range("B21") = chercher_valeur("LIFT LOCATION                                 ", result)
      .Range("B22") = chercher_valeur("PROPANE                                  ", result) + chercher_valeur("DIESEL                                   ", result)
     .Range("B23") = chercher_valeur("ENTRETIEN DIVERS                         ", result) + chercher_valeur("ENTRETIEN ÉQUIPEMENT SÉCHOIRS            ", result) + _
      chercher_valeur("ENTRETIEN LIGNE CHALEUR                  ", result) + chercher_valeur("ENTRETIEN ENTREPOT                       ", result) + chercher_valeur("ENTRETIEN MATERIEL ROULANT               ", result)
      .Range("B24") = chercher_valeur("FRAIS LATTAGE/DÉLATTAGE                  ", result) + chercher_valeur("DIVERS                                   ", result) + _
      chercher_valeur("SANTE ET SECURITE                        ", result) + chercher_valeur("CONTAINER                                ", result) + chercher_valeur("OUTIL                                    ", result)
      .Range("B32") = chercher_valeur("RESTAURANT                                    ", result)
      .Range("B33") = chercher_valeur("FRAIS DE BUREAU                          ", result) + chercher_valeur("MEMBERSHIP ASSOCIATION BOIS              ", result)
      .Range("B34") = chercher_valeur("LOCATION MAT ROULANT (CHEV)              ", result) + chercher_valeur("LOCATION MATÉRIEL ROULANT 2              ", result)
       .Range("B35") = chercher_valeur("PERMIS, TAXES, LICENCES                  ", result) + chercher_valeur("ASSURANCE                                ", result)
      .Range("B36") = chercher_valeur("TÉLÉPHONE                                ", result)
      .Range("B37") = chercher_valeur("HONORAIRE PROFESSIONNEL                  ", result)
      .Range("B38") = chercher_valeur("ESSENCE                                  ", result)
      .Range("B44") = chercher_valeur("AMORTISSEMENT                            ", result)
      .Range("B45") = chercher_valeur("FRAIS DE BANQUE                          ", result) + chercher_valeur("INTÉRÊTS PRÊT IQ                         ", result) + _
      chercher_valeur("FRAIS CAISSE US                          ", result) + chercher_valeur("INTRÉRETS PRET BDC                       ", result)
      
End With
End Sub


merci, je vais mettre le post résolu étant donné que ça fonctionne et je te remercie encore beaucoup pour ton aide, je n'y serais pas arrivé sans toi

mélanie
0