Microsoft 365 Assistance pour optimisation d'un code VBA qui ne fonctionne pas comme souhaité

  • Initiateur de la discussion Initiateur de la discussion desto
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

desto

XLDnaute Junior
Bonjour a tous,
J'espère que vous allez bien.
je viens par ce canal vous solliciter afin que vous m'aidiez à voir ce qui ne va pas dans mon code ci joint.
en effet, j'ai essayé de bidouiller quelque chose pour effectuer une première partie d'une tâche avant de pouvoir completer.
Le code ci joint doit exécuter les actions suivantes:
Parcourir des fichiers Excel dans un dossier, récupérer les informations de la feuille ‘’ EP745_TRX_SPEC_SN_TG ‘’ et faire les traitements ci-après :

  • Compiler dans un premier temps toutes les données de cette feuille spécifique dans le lot de fichier,
  • Regrouper par date de la ‘’D’’ et par pays (SÉNÉGAL et TOGO) de la colonne ‘’B’’
  • Exclure la ligne dont la colonne ‘’J’’ est non-vide et tenir uniquement compte des cellules vides.
  • Exclure également les lignes dont la colonne ‘’C’’ contient la mention ‘’ SMS617R’’
  • Exclure les lignes dont la colonne ‘’A’’ qui contient la mention ‘’ TRANSACTIONS’’

  • Exclure lignes de la colonne ‘’S’’ avec la mention ‘’R’’ en faisant une vérification de la référence figurant dans la colonne ‘’L’’ de telle sorte que toute référence en double dont l’une à la mention ‘’R’’ dans de la colonne ‘’S’’ soit exclue au même titre que les lignes de la colonne ‘’S’’ avec la mention ‘’R’’ ne doit pas être considéré dans ce cas pour déterminer le nombre de transaction à afficher en résultat
  • Exclure les lignes de la colonne ‘’S’’ avec la mention ‘’R’’ en faisant une vérification de la référence figurant dans la colonne ‘’L’’ de telle sorte que toute référence en double dont l’une à la mention ‘’R’’ dans de la colonne ‘’S’’ soit exclue au même titre que les lignes de la colonne ‘’S’’ avec la mention ‘’R’’ avant le calcul de la somme des montant avant de Faire la somme des montants de la colonne ‘’Q’’
  • Améliorer la gestion des dates pour obtenir le format correct
  • Améliorer la conversion des montants pour obtenir les valeurs numériques correctes
  • Inclure l'effacement préalable complet des résultats précédents dans les feuilles Données compilées et Résultats, tout en évitant les redéfinitions et les doublons
  • N’afficher sur la feuille « Résultat » que le cumul des montants par date et par pays
  • Afficher le résultats sur une nouvelle feuilles avec la date, le pays, montant total et le nombre de transactions dans un tableau structuré dans le classeur de la macro
  • les dates sont au format "28OCT24" et les montants sous ce format "100 000,00.
Il se trouve qu'a la fin du traitement, il génère les résultats dans un autre classeur autre que celui de la macro et intègre la dernière ligne avec la mention "TRANSACTIONS" dans les données à ressortir.
Les dates ne remontent également comme il se doit
Aussi, je ne sais pas comment ajouter une vérification pour m'assurer que les informations sont correctes sans refaire le traitement manuel .
J'ai joint le code ainsi que quelques exemples de fichiers qui servent de base de travail.
Je souhaite m'assurer que j'ai pu régler cette première étape avant de poursuivre.
Je vous remercie déjà pour vos précieux conseils qui m'aideront a améliorer mon code
 

Pièces jointes

Dernière édition:
Bonsoir,


Sauf erreur de ma part, tu crées un nouveau classeur dans ton code dans lequel sont mises les données.
Je trouve normal que tu ne retrouve pas les données dans le fichier où se trouve ta macro.
Merci pour ton retour.
Quels modifications doivent-être faites afin que les résultats s'affichent dans le classeur de la macro , que les dates sortent normalement et que la ligne "transactions" ne s'affiche pas comme pays?
 
Merci pour ton retour.
Quels modifications doivent-être faites afin que les résultats s'affichent dans le classeur de la macro , que les dates sortent normalement et que la ligne "transactions" ne s'affiche pas comme pays?
Bonsoir,
Ta demande est un peu confuse par rapport au code que tu as joint.
Lorsque tu l'exécutes une fenêtre d'invite s'ouvre pour choisir le dossier où se trouve les fichiers à parcourir.
Où est sensé se trouver le fichier qui contient le code?

edit: Comment se nomme le fichier dans lequel tu veux récupérer les données?
 
Dernière édition:
Bonsoir,
Ta demande est un peu confuse par rapport au code que tu as joint.
Lorsque tu l'exécutes une fenêtre d'invite s'ouvre pour choisir le dossier où se trouve les fichiers à parcourir.
Où est sensé se trouver le fichier qui contient le code?

edit: Comment se nomme le fichier dans lequel tu veux récupérer les données?
ce sont les fichiers Excel qui doivent être dans le dossier. A partir du moment où les fichiers sont dans le dossier, il suffit juste de sélectionner le dossier et continuer . Le fichier contenant le code est le fichier txt joint
 
si j'ai bien compris ta demande.
La demande est bien comprise; le résultat s'affiche dans la feuille. Mais malgré l'exclusion de la mention "TRANSACTIONS" que j'ai normalement déjà intégré au code, elle apparait alors que je n'ai besoin que de "SÉNÉGAL" et "TOGO".
Aussi, les dates formatées et remontées dans le résultats ne sont pas correctes .
j'ai l'impression que certaines de mes conditions ne fonctionnent pas comme il faut.
 
La demande est bien comprise; le résultat s'affiche dans la feuille. Mais malgré l'exclusion de la mention "TRANSACTIONS" que j'ai normalement déjà intégré au code, elle apparait alors que je n'ai besoin que de "SÉNÉGAL" et "TOGO".
Aussi, les dates formatées et remontées dans le résultats ne sont pas correctes .
j'ai l'impression que certaines de mes conditions ne fonctionnent pas comme il faut.
Je ne comprends pas ton explication après le "Mais malgré".

Ce qui est clair ne l'est pas pas forcément pour lui qui essaie d'aider.

Ton code ne traite qu'une seule feuille ("EP745_TRX_SPEC_SN_TG").

Au lieu de nous dire ce qui ne va pas. Explique-nous ce que tu veux obtenir.
 
VB:
' Date (colonne D = 4) au format JJ/MM/AAAA
 On Error Resume Next
 dateValeur = wsSource.Cells(i, 4).Value
 On Error GoTo 0

La colonne A, ne contient pas de date mais du texte. ceci --> 26OCT24 n'est pas une date.
1746773184199.png


De plus tu as ceci en fin de plage, qui fausse la vrai dernière ligne.
Au final, ton code traite une ligne qui n'a pas les mêmes données que les autres lignes.
1746773403290.png
 
Je ne comprends pas ton explication après le "Mais malgré".

Ce qui est clair ne l'est pas pas forcément pour lui qui essaie d'aider.

Ton code ne traite qu'une seule feuille ("EP745_TRX_SPEC_SN_TG").

Au lieu de nous dire ce qui ne va pas. Explique-nous ce que tu veux obtenir.
Bonjour @cathodique,


Merci pour ton retour. Voici une description précise du résultat attendu pour l’analyse des données dans Excel :


Objectif :
Obtenir, pour chaque date et pour chaque pays (uniquement SÉNÉGAL et TOGO) à partir de la feuille "EP745_TRX_SPEC_SN_TG" :


  1. Le montant total des transactions
  2. Le nombre total de transactions

Instructions de traitement :


A. Filtres globaux à appliquer avant tout calcul :

  • Exclure les lignes où :
    • La colonne A contient « TRANSACTIONS »
    • La colonne C contient « SMS617R »
    • La colonne J est non vide (ne conserver que les lignes où J est vide)

B. Traitement spécifique pour exclure les doublons liés aux références avec la mention "R" :

  • Si deux lignes ou plus ont la même référence (colonne L) et que l'une d'elles a la lettre « R » dans la colonne S, alors toutes les lignes avec cette même référence doivent être exclues (pas seulement celle avec le R).
  • Toutes les lignes avec un « R » dans la colonne S doivent également être exclues, qu'elles soient ou non en doublon.

C. Calculs :

  1. Montant total :
  • Faire la somme des montants (colonne Q) pour les lignes restantes après l’application des filtres ci-dessus, regroupées par Date (colonne B) et par Pays (colonne D — à filtrer sur SÉNÉGAL et TOGO uniquement).

  1. Nombre total de transactions :
  • Compter le nombre de lignes restantes après filtres, toujours groupées par Date et Pays.
J’espère que cette explication est plus claire et aidera à comprendre le résultat attendu.
 
La colonne A, ne contient pas de date mais du texte. ceci --> 26OCT24 n'est pas une date.
Regarde la pièce jointe 1217566

De plus tu as ceci en fin de plage, qui fausse la vrai dernière ligne.
Au final, ton code traite une ligne qui n'a pas les mêmes données que les autres lignes.
Regarde la pièce jointe 1217567
Effectivement , la date indique dans la colonne D est en texte que j'ai essayé de récupérer et mettre au format normal de date sans y arriver.
En ce qui concerne la ligne de la fin, j'ai aussi essayer de l'exclure dans le code avec :
Code:
[CODE=vb]' Exclure les lignes avec "TRANSACTIONS" dans la colonne A
 
Effectivement , la date indique dans la colonne D est en texte que j'ai essayé de récupérer et mettre au format normal de date sans y arriver.
La conversion de cette colonne D, à mon avis est très aléatoire. Car cela dépendra comment elle a été écrit.
Je te propose d'utiliser la date en colonne E, qui est à +1 jour de celle de la colonne D, soit 27/10/2024 au lieu de 26/10/2024 (col D).
Quant "TRANSACTION", elle n'est pas prise en compte dans ton code. Elle se trouve en dernière ligne.
Il suffit de modifier le numéro de la dernière pour qu'elle ne soit plus prise en compte.
 

Pièces jointes

Bonjour à toutes & à tous, bonjour @desto
Juste une remarque :
Avec tes critères
Exclure SMS617R
Exclure Les références dont une occurrence est marquée par un R en colonne "ANNULATION"

Si j'applique ce deuxième critère à l'ensemble des 3 fichiers, je ne ramène aucune ligne vu que tes fichiers ne contiennent que les références SMS617R et SMS601R et que la référence SMS601R est marquée par un R en colonne Annulation du fichier "Diamond_Report_VSS_v1v_27OCT24_25042025120123.xlsx"

Ce dernier filtre doit-il s'appliquer aux fichiers un par un ou globalement à tous les fichiers importés ?

À bientôt
 
Bonjour à toutes & à tous, bonjour @desto
Juste une remarque :
Avec tes critères
Exclure SMS617R
Exclure Les références dont une occurrence est marquée par un R en colonne "ANNULATION"

Si j'applique ce deuxième critère à l'ensemble des 3 fichiers, je ne ramène aucune ligne vu que tes fichiers ne contiennent que les références SMS617R et SMS601R et que la référence SMS601R est marquée par un R en colonne Annulation du fichier "Diamond_Report_VSS_v1v_27OCT24_25042025120123.xlsx"

Ce dernier filtre doit-il s'appliquer aux fichiers un par un ou globalement à tous les fichiers importés ?

À bientôt
Bonjour,

J'avoue que je n'ai pas trop consulté les fichiers.
 
Re
J'avoue que je n'ai pas trop consulté les fichiers
Moi, je m'en suis rendu compte parce que j'ai d'abord importé les fichiers puis appliqué les filtres à la concaténation de ces fichiers et que je ne ramenais aucune ligne ! D'où ma question, faut-il appliquer les filtres à chaque fichier individuellement ou à tous en une seule fois ...
À bientôt
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
225
Réponses
5
Affichages
532
Retour