Excel : macro ou autres fonctions ?

  • Créateur du sujet Créateur du sujet omni
  • Date de début Date de début

omni

Membre expert
Club iGen
17 Mars 2007
1 244
45
Bonsoir,
j'exporte de mon logiciel compta un état mensuel qui permet de comparer le "réalisé" mensuel avec le budget annuel. Cette comparaison me permet de produire des tableaux pour chacun des directeurs concernés (d'où la macro qui me permet de distinguer les comptes de chacun des intéressés).

Mais ce logiciel est "vieux", il utilise Acces, et on ne peut guère y toucher. Ainsi je ne peux y avoir accès via ODBC et/ou Query. Sinon je pense que ma demande pourrait se résoudre assez facilement.

En fait dans mon extraction (je ne peux pas la modifier car le logiciel n'offre pas de possibilité) je récupère un fichier composé de 13 colonnes et de 1400 lignes :

Section
Sens
CodeArticle
CodeChapitre
LibelleArticle
CodeOperation
CodeService
CodeFonction
Budgétisé
Engage
Liquide
Réalisé
Disponible

Malheureusement le code service n'est pas "en français", il s'agit d'un code comptable, composé de chiffre et de lettre, du type : 20.1 ou 520.B1 etc…
Or ces codes correspondent à des services du type : école maternelle "truc", ou Piscine, ou Ateliers…

Ce ne serait rien si je n'avais pas environ 160 services avec des noms parfois à rallonge.

Mon rêve, trouver une manipulation qui permette à chaque export de créer une colonne supplémentaire qui contiendrait les noms "français" des codes de la colonne précédente.
En effet, cela serait d'autant plus utile que régulièrement, je fait des graphique à destination des élus pour qu'ils puissent suivre la consommation des budgets, et les comparer d'une année sur l'autre.

Si le logiciel compta était fait avec une base de données relationnelle, j'aurais pu via Query, faire correspondre la table code, avec la table nom des services, mais là ?

Aujourd'hui, je fonctionne en filtrant les codes un par un puis en tapant le nom du service correspondant… ==Très fastidieux et consommateur de temps.

Si vous avez une idée, ce sera avec plaisir.

En vous remerciant
 
Tu peux assez facilement arriver à un résultat assez proche de ce qu'on obtient avec une base de données en utilisant la fonction RECHERCHEV() dans Excel.

En gros, et si j'ai bien compris :

Dans une feuille, tu saisis tous tes services en mettant le code dans une colonne et le libellé dans la suivante. Tu sélectionnes le champ (sans les en-têtes) et le nommes (par ex. "BibleServices") après l'avoir trié pour que les codes soient bien rangés par ordre croissant.

Lorsque tu ouvres un fichier mensuel, tu lui insères une copie de ta feuille. Ensuite, tu ajoutes la colonne dans laquelle tu veux tes libellés (mettons la colonne H) et tu saisis en H2 la fonction =RECHERCHEV(G2;BibleServices;2;FAUX) Cette fonction ira chercher dans la table le contenu de la deuxième colonne sur la ligne qui correspond au code trouvé en G2. S'il n'y a pas de code correspondant dans la table, tu auras un message d'erreur (et tu sauras qu'il faut corriger la table).

Il te reste à recopier vers le bas autant que de besoin et si tu le veux, faire un Copier/collage spécial "Valeurs" sur la colonne H pour neutraliser l'ensemble.
 
  • J’aime
Réactions: meskh
Merci,
Par contre désolé je ne comprends pas :"Tu sélectionnes le champ (sans les en-têtes) et le nommes (par ex. "BibleServices") après l'avoir trié pour que les codes soient bien rangés par ordre croissant." Le champs ???
Puis quand j'ouvre mon fichier composé d'une feuille, je dois insérer dans cette feuille la copie des deux colonnes créées précédemment, ou insérer la feuille complète en tant que "base" où la fonction RechercheV ira chercher ?
Je suis un quelque peu obtus parfois, et je bloque sur des "bêtises".
Merci à toi, je creuse.
Dernière précision : dans le fichier extrait de la compta, le même code service peut bien sûr apparaître sur une multitude de lignes différentes.
 
Dernière édition:
Alors quand on gère des données avec Excel, voici comment on traduit les termes "base de données" :

Champs = colonnes
Fiche (ou "enregistrement") = ligne

donc tu entres dans une autre feuille du classeur ta liste des codes et de leurs signification, et tu la définis de la seconde (la première ce ne sont pas des données mais les titres des colonnes … les noms de champs) à la dernière ligne (en y posant un nom, par exemple).
 
Alors quand on gère des données avec Excel, voici comment on traduit les termes "base de données" :

Champs = colonnes
Fiche (ou "enregistrement") = ligne

donc tu entres dans une autre feuille du classeur ta liste des codes et de leurs signification, et tu la définis de la seconde (la première ce ne sont pas des données mais les titres des colonnes … les noms de champs) à la dernière ligne (en y posant un nom, par exemple).

Juste : je la définis ??? Oui je sais Aie !!!!
Merci pour les précisions de vocabulaire, c'est bien utile.
Et merci pour votre aide à tous. Un jour je serai grand…
 
"Tu sélectionnes le champ (sans les en-têtes) et le nommes (par ex. "BibleServices") après l'avoir trié pour que les codes soient bien rangés par ordre croissant." Le champs ???
Désolé, le matin je n'ai pas toujours les idées bien claires du premier coup. J'aurais dû écrire : "Tu sélectionnes la plage A2:B161, puis tu cliques dans le champ qui est juste au-dessus de l'en-tête de colonne A (et dans lequel on lit A2 en principe, à ce moment) pour y saisir le nom BibleServices et enfin tu tapes sur la touche Entrée".

Puis quand j'ouvre mon fichier composé d'une feuille, je dois insérer dans cette feuille la copie des deux colonnes créées précédemment, ou insérer la feuille complète en tant que "base" où la fonction RechercheV ira chercher ?
Là par contre j'avais bon du premier coup : tu insères une copie de ta feuille. Pas de la plage, la feuille en entier (bon, ça pourrait aussi se faire avec la plage mais on va rester simple et pratique).

dans le fichier extrait de la compta, le même code service peut bien sûr apparaître sur une multitude de lignes différentes.
Oui, oui, c'est justement pour ça que le fonctionnement décrit, assez similaire à ce qui se passe dans une base de données, est bien adapté à ce genre de choses.
 
Bien alors cela fonctionne, à peu près… C'est à dire que pour les premières lignes (code 01) il m'inscrit bien "Services financiers" comme écrit dans ma feuille de correspondance code==>libellés.
Par contre dès qu'il y a un autre code le 251 par exemple il note ≠N/A.
Je continue…
 
Par contre dès qu'il y a un autre code le 251 par exemple il note ≠N/A.
Comme vu précédemment, lorsqu'il ne trouve pas de correspondance exacte dans la base, il affiche le code d'erreur. Il te faut rechercher la cause de l'erreur. Logiquement, tu n'as pas le code 251 dans ta liste, ou pas comme tu le penses : si par exemple la colonne G2 est au format texte, alors il faut que dans ta base la première colonne soit aussi au format texte, sinon, il ne trouvera rien.

Si c'est bien ça, tu vois ce qu'il te reste à faire. Ou, plus simple, il te faut d'abord convertir en nombres les codes dans ta colonne G. Pour cela, tu tapes le nombre 1 dans une cellule libre. Tu la sélectionnes, tu la copies. Ensuite, tu sélectionnes ta colonne G et tu fais un collage spécial en cochant la case "Multiplication", ce qui aura pour effet de convertir tous tes codes en nombres. D'après ta description, ça peut aussi être l'inverse (des nombres dans la colonne G et du texte dans la base) mais c'est évidemment le traitement inverse qu'il faut alors appliquer.

Si ce n'est pas ça, essaye de comprendre pourquoi la fonction ne trouve pas le code 251 dans la base. Au besoin, décris plus précisément la situation ici, qu'on puisse essayer de comprendre...
 
Oui effectivement, mes colonnes codes = du format texte. Obligé car j'ai besoin de pouvoir faire la distinction entre 01 et 1 = Compta…
J'ai vérifié : dans ma table de correspondance, mes codes sont bien en format texte aussi.

Mais problème : quand je regarde le format des codes dans ma "table" effectivement il indique "Texte". Mais, si je le retape là il se met en texte !!!
Et du coup la feuille des comptes se met à jour comme par miracle.
Explications : quand j'ai importé mes codes puis que j'ai sélectionné la colonne où ils sont inscrits pour la formater en texte, en réalité ils n'ont pas été "formatés". Je dois les retaper en texte !
 
Oui, comme vu précédemment, le format texte présente quelques particularités dans le domaine de la conversion : dans un sens comme dans l'autre, il faut valider le contenu de la cellule pour que le changement de format s'applique. Heureusement, on dispose de solutions de contournement qui permettent de se simplifier (un peu) la vie.

Dans un cas (transformer en nombre des chiffres), on multiplie par 1, comme décrit précédemment.

En sens inverse, on peut le faire assez rapidement aussi (bien plus que la ressaisie) en passant par une colonne intermédiaire. En C2 tu tapes =Texte(A2;"000") puis tu copies vers le bas : tes codes seront convertis en texte sur trois caractères (ex : 001, 002, etc). Tu pourras alors copier ces cellules et faire un collage spécial "valeurs" vers les cellules correspondantes dans la colonne A (préalablement passée au format texte).
 
Merci encore pour toutes ces astuces qui facilitent la vie !