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

Comparer deux chaînes de valeur

Rep

XLDnaute Junior
Bonjour à tous !

Je travaille actuellement sur le retraitement d'une balance comptable pour pouvoir extraire des données selon un format spécifié, mais je bute sur la comparaison de chaînes de caractère.

Pour faire rapide, les montants sont répartis par compte, eux-mêmes codifiés spécifiquement par un numéro de compte.
Un exemple :

Le capital social d'une société est de 25 000€.

Dans la balance, on aura ceci:
101300 - Capital social souscrit appelé versé - 25 000€

La codification est une norme (appelée plan comptable), donc commune à toutes les balances comptables. C'est pourquoi je souhaite m'en servir comme base de traitement de données. L'ennui, c'est que la norme sur les numéros de compte s'arrête à 4 voire 5 chiffres.

Dans le plan comptable, le capital social souscrit appelé versé est codifié : 1013

Sachant qu'on est libre des chiffres (tant en quantité qu'en valeur) à insérer après les 4 premiers comme dans l'exemple. En clair, on peut avoir 101300, 101301,1030 etc. pour codifier le capital social souscrit appelé versé.

Je souhaite donc passer par une macro, qui va extraire les valeurs de la balance pour les insérer dans ma matrice. Ma matrice n'est autre que le plan comptable complet (qui regroupe tous les comptes). Je pensais pour cela procéder par comparaison du début de chaque chaîne de caractère comme ceci :


Voici la macro que j'ai commencé à monter:


Les + :
- la macro tourne (je sais, il m'en faut peu )

Les - :
- elle ne me renvoit pas la valeur, même s'il y a correspondance.
- l'exécution est extrêmement lourde du fait d'une comparaison énumérative : chaque valeur de la première liste est comparée à chaque valeur de la seconde.

En parcourant un peu le web, il apparaît que l'utilisation de tableau avec traitement en mémoire est beaucoup plus rapide. Seulement, je ne sais pas du tout comment procéder...

Je vous joins le fichier utilisé.

Merci d'avance pour votre aide,

Nicolas
 

Pièces jointes

  • Matrice_exemple.xlsm
    51.1 KB · Affichages: 105
  • Matrice_exemple.xlsm
    51.1 KB · Affichages: 114
  • Matrice_exemple.xlsm
    51.1 KB · Affichages: 109

david84

XLDnaute Barbatruc
Re : Comparer deux chaînes de valeur

Bonjour Rep,
un exemple explicite valant mieux que moult détails, il serait préférable de noter manuellement les résultats attendus sur ton fichier avec quelques explications afin d'être sûr de bien comprendre ta demande.
A+
 

Rep

XLDnaute Junior
Re : Comparer deux chaînes de valeur

Bonjour,

Je pensais mon message explicite... mais c'est vrai que plongé dans le problème, on en oublie d'être clair

J'ai deux feuilles de calcul : balance_générale et matrice. Voici un exemple de contenu:

Code:
balance_générale:
101311 | 25 000€
106200 | 2 500€
.....
Code:
matrice:
1010 | [vide]
1011 | [vide]
1012 | [vide]
1013 | [vide]
1060 | [vide]
1061 | [vide]
1062 | [vide]
1063 | [vide]
.......

Je veux arriver, par comparaison avec balance_générale, à :
Code:
matrice:
1010 | [vide]
1011 | [vide]
1012 | [vide]
1013 | 25 000€
1060 | [vide]
1061 | [vide]
1062 | 2 500€
1063 | [vide]
.......

J'espère avoir été suffisamment clair !

Merci
 

pierrejean

XLDnaute Barbatruc
Re : Comparer deux chaînes de valeur

Bonjour Rep

Salut David

Un essai
Toutefois il y a au moins un problème au niveau du report a nouveau (crediteur et debiteur ne sont pas differenciés)
 

Pièces jointes

  • Matrice_exemple.xlsm
    60.2 KB · Affichages: 92
  • Matrice_exemple.xlsm
    60.2 KB · Affichages: 91
  • Matrice_exemple.xlsm
    60.2 KB · Affichages: 92

Rep

XLDnaute Junior
Re : Comparer deux chaînes de valeur

Bonjour Rep

Salut David

Un essai
Toutefois il y a au moins un problème au niveau du report a nouveau (crediteur et debiteur ne sont pas differenciés)

Alors là bravo, quelle rapidité, c'est exactement ce que je recherche

Merci beaucoup.

Concernant le report à nouveau, je vais m'en arranger.

Merci encore!
 

Hippolite

XLDnaute Accro
Re : Comparer deux chaînes de valeur

Bonjour Nicolas, Bonjour pierrejean, bonjour david

Comme demandé avec des tableaux

J'ai corrigé quelques anomalies
- inversion dans InString
- limité aux 4 premiers caractères de import pour supprimer les fausses détections
- sommation si plusieurs lignes de import répondent au même critère
- supprimé quelques lignes inutiles

A+

edit : Avec le fichier c'est mieux !
 

Pièces jointes

  • Matrice_exemple+.zip
    52.9 KB · Affichages: 64
Dernière édition:

Rep

XLDnaute Junior
Re : Comparer deux chaînes de valeur

Bonsoir Hippolite, bonsoir david84, bonsoir pierrejean,

Je reviens à la charge avec mon fichier

L'utilisation des variables tableaux est vraiment top, mais je ne l'ai découvert que très récemment. J'aimerais savoir s'il est possible d'insérer une ligne dans une variable tableau pour y insérer de nouvelles données...

Voici un bout de code pour vous aiguiller:

Code:
Sub traitement()

'---------- Déclaration des tableaux à partir du fichier d'import et de la matrice ----------
import_bg = import_name.Sheets("Feuil1").Range("A1:C" & import_name.Sheets("Feuil1").Range("A65536").End(xlUp).Row)
matrice = matrice_name.Sheets("import").Range("A1:E" & matrice.Name.Sheets("import").Range("A65536").End(xlUp).Row)

'---------- Importation des données du fichier d'import dans la matrice ----------
For n = LBound(import_bg, 1) To UBound(import_bg, 1)
    For m = LBound(matrice, 1) To UBound(matrice, 1)
        If import_bg(n, 1) = matrice(m, 1) Then
......(insérer une ligne sous la valeur trouvé comme identique).......

Merci d'avance,
 

Rep

XLDnaute Junior
Re : Comparer deux chaînes de valeur

Bonsoir Hyppolite,

Oui c'est ce dont je me suis aperçu, c'est d'ailleurs pour ça que le Redim Preserve que j'avais tenté d'utiliser ne fonctionne pas.

Tant pis, sachant que cette partie ne requiert que peu de ressources, je ne passerai pas par une variable tableau

Edit : et un grand merci pour le fichier mis à disposition !
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…