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

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:
Bonjour,
Avec Power Query (chargé dans un TCD), voici ce que j'obtiens :
Modif de 16H50


Cependant, quelques transactions ont une valeur nulle dans la colonne Q (Amount). Faut-il les comptabiliser?
 

Pièces jointes

  • 1746788560984.png
    16.8 KB · Affichages: 32
Dernière édition:
Pour la date, je crois avoir trouvé une solution :
VB:
' Convertir la date (colonne D) du format "28OCT24" au format date
            dateTraitement = wsDonnees.Cells(ligneCourante, 4).Value
            If Len(dateTraitement) = 7 Then ' Format attendu: "28OCT24"
                ' Convertir le mois en nombre
                Select Case UCase(Mid(dateTraitement, 3, 3))
                    Case "JAN": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 1, Val(Left(dateTraitement, 2)))
                    Case "FEB", "FÉV": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 2, Val(Left(dateTraitement, 2)))
                    Case "MAR": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 3, Val(Left(dateTraitement, 2)))
                    Case "APR", "AVR": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 4, Val(Left(dateTraitement, 2)))
                    Case "MAY", "MAI": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 5, Val(Left(dateTraitement, 2)))
                    Case "JUN", "JUI": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 6, Val(Left(dateTraitement, 2)))
                    Case "JUL": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 7, Val(Left(dateTraitement, 2)))
                    Case "AUG", "AOÛ": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 8, Val(Left(dateTraitement, 2)))
                    Case "SEP": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 9, Val(Left(dateTraitement, 2)))
                    Case "OCT": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 10, Val(Left(dateTraitement, 2)))
                    Case "NOV": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 11, Val(Left(dateTraitement, 2)))
                    Case "DEC", "DÉC": dateConvertie = DateSerial(2000 + Val(Right(dateTraitement, 2)), 12, Val(Left(dateTraitement, 2)))
                    Case Else: dateConvertie = 0 ' Date invalide
                End Select
            Else
                dateConvertie = 0 ' Format de date non reconnu
            End If
            
            ' Si la date est valide, continuer
            If dateConvertie <> 0 Then
 
ce dernier filtre s'applique à chaque fichier
 
en fait, je n'ai pas voulu utiliser les pseudo-dates de la colonne D, car il y a en colonne E une vraie date.
Mais tu veux utiliser la colonne D, à ta guise voici une fonction pour convertir la colonne D.
VB:
Option Explicit

Function ConvertirDate(txt As Variant) As Variant
    Dim jour As String, mois As String, annee As String
    Dim moisFr As String
    
    ' Vérifier si c'est déjà une date
    If IsDate(txt) Then
        ConvertirDate = txt ' Si c'est une vraie date, on la retourne telle quelle
        Exit Function
    End If
    
    ' Vérifier le format du texte
    If Len(txt) <> 7 Or Not IsNumeric(Left(txt, 2)) Then
        ConvertirDate = Null ' Ignore les valeurs invalides
        Exit Function
    End If

    ' Extraire les parties de la date
    jour = Left(txt, 2)
    mois = Mid(txt, 3, 3)
    annee = Right(txt, 2)

    ' Normaliser le mois
    mois = LCase(Trim(mois))

Select Case mois
    ' Mois anglais
    Case "jan", "janv": moisFr = "01"
    Case "feb", "févr": moisFr = "02"
    Case "mar": moisFr = "03"
    Case "apr", "avr": moisFr = "04"
    Case "may", "mai": moisFr = "05"
    Case "jun", "juin": moisFr = "06"
    Case "jul", "juil": moisFr = "07"
    Case "aug", "août": moisFr = "08"
    Case "sep": moisFr = "09"
    Case "oct": moisFr = "10"
    Case "nov": moisFr = "11"
    Case "dec", "déc": moisFr = "12"
    Case Else
        ConvertirDate = Null ' Ignore les mois inconnus
        Exit Function
End Select

    ' Déterminer le siècle
    If CInt(annee) >= 30 Then
        annee = "19" & annee ' XXe siècle
    Else
        annee = "20" & annee ' XXIe siècle
    End If

    ' Construire la date sous format "jj/mm/aaaa"
    ConvertirDate = DateValue(jour & "/" & moisFr & "/" & annee)
End Function

'utilisation dans ton code comme ci-dessous:
'dateValeur = ConvertirDate(wsSource.Cells(i, 4).Value)
 
ce dernier filtre s'applique à chaque fichier
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…