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 :
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.
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
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 :
----------------------------
Dans la balance comptable :
101301 - Capital social - 25 000€
----------------------------
Dans ma matrice :
1013 - Capital social
----------------------------
Dans ma macro :
Comparaison de la chaîne de caractère de la matrice "1013" avec le début de la chaîne de caractère de la balance "101301" et si correspondance, copie du montant (25 000€ donc), dans la matrice
Voici la macro que j'ai commencé à monter:
Sub Traitement()
nbl_matrice = Sheets("matrice").Range("A1").CurrentRegion.Rows.Count
nbl_import = Sheets("import").Range("A1").CurrentRegion.Rows.Count
For cpte_matrice = 1 To nbl_matrice
no_cpte_matrice = Sheets("matrice").Cells(cpte_matrice, 1)
For cpte_bg = 1 To nbl_import
no_cpte_import = Sheets("import").Cells(cpte_bg, 1)
If InStr(1, no_cpte_matrice, no_cpte_import) > 0 Then
Sheets("matrice").Cells(cpte_matrice, 3) = Sheets("import").Cells(cpte_bg, 3)
GoTo next_cpte_matrice
Else
Sheets("matrice").Cells(cpte_matrice, 3) = 0
End If
Next
next_cpte_matrice:
cpte_bg = 1
Next
End Sub
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