IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA - Ça fonctionne et puis ça ne fonctionne plus ?!


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut VBA - Ça fonctionne et puis ça ne fonctionne plus ?!
    Bonjour à tous,

    Le contexte:
    Un classeur avec 3 feuilles.
    • Listing du personnel
    • Extraits de compte bancaire
    • Une feuille "Résultats" qui doit recevoir toutes les lignes concernées par mon traitement

    Les extraits de compte bancaires contiennent tous les mouvements de la banque.
    L'objectif de sélectionner dans le listing un membre du personnel et de sortir des extraits de banque tous les acomptes qu'il a reçu.

    Tout se passe bien pour les 2 premières ouvrières et à la 3ème, le module se plante à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While Cells.Find(What:=Nom, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Activate
    avec le message :
    Erreur d'exécution 91
    Variable Objet ou variable de bloc With non définie

    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    Sub InjectionDansRésultats()
    '
    ' InjectionDansRésultats Macro
    '
        Dim DerLg As Currency
        Dim LigCrtRés As Currency
        Dim LigCrtING As Currency
        Dim Montant As Currency
        Dim Comm1 As Currency
        Dim i As Currency
        Dim LigCrtAme As Currency
     
        Dim Nom As String
        Dim Mvt As String
        Dim Comm As String
        Dim Desc As String
        Dim Mois As String
     
        Dim DateMvt As Date
     
        Nom = "00000"
        LigCrtAme = 1
     
        Do While Nom <> ""
            Worksheets("Gap - Aide-ménagères").Activate
            DerLg = 0 ' Si la ligne de la cellule active de ING - Extraits 2023 est inférieure ou égale de à DerLg on sort de la boucle de recherche "Do while find nom"
            LigCrtAme = LigCrtAme + 1
            Nom = Range(Cells(LigCrtAme, 5), Cells(LigCrtAme, 5)).Value ' Enregistrement du nom de l'ouvrière pour laquelle on va rechercher des mvts dans le fichier bancaire
     
            Worksheets("ING - Extraits 2023").Activate ' On passe sur la feuille des extraits de compte
            Range("I1").Select ' on remonte au début.
     
            Do While Cells.Find(What:=Nom, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Activate
                LigCrtING = ActiveCell.Row ' Une fois qu'on est sur la ligne on en enregistre le numéro.
                DateMvt = Range(Cells(LigCrtING, 5), Cells(LigCrtING, 5)).Value ' On mémorise la date du mvt.
                Mvt = Range(Cells(LigCrtING, 4), Cells(LigCrtING, 4)).Value ' On mémorise le n° du mvt.
                Montant = Range(Cells(LigCrtING, 7), Cells(LigCrtING, 7)).Value ' On mémorise le montant du mvt.
                Comm = Range(Cells(LigCrtING, 9), Cells(LigCrtING, 9)).Value ' On mémorise la communication du mvt.
     
                If ActiveCell.Row <= DerLg Then Exit Do ' Si la ligne de la cellule active de ING - Extraits 2023 est inférieure ou égale de à DerLg on sort de la boucle de recherche "Do while find nom"
                DerLg = ActiveCell.Row ' numéro de ligne de la cellule active
     
                Comm1 = 0
     
                If InStr(1, Comm, "ACPT-") > 0 Then Comm1 = 21
                If InStr(1, Comm, "Acompte") > 0 Then Comm1 = 22
     
                For i = 1 To 12
                    Mois = Right("0" & i, 2)
                    If InStr(1, Comm, "A" & Mois & ".23") > 0 Then Comm1 = i
                    If Comm1 = i Then Exit For
                Next
     
                For i = 1 To 12
                    Mois = Right("0" & i, 2)
                    If InStr(1, Comm, "2023/" & Mois & "-1 1 0") > 0 Then Comm1 = i + 100
                    If Comm1 = i + 100 Then Exit For
                Next
     
                Select Case Comm1
                    Case 21
                        Desc = "Acompte du 15"
     
                    Case 22
                        Desc = "Acompte"
     
                    Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
                        Desc = "Acompte ponctuel"
     
                    Case 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112
                        Desc = "Pas concerné"
     
                    Case Else
                        Desc = "Communication inhabituelle"
     
                End Select
     
                If Desc <> "Pas concerné" Then
                    Worksheets("Résultats").Activate
                    LigCrtRés = Cells(Rows.Count, 1).End(xlUp).Row + 1
                    Range(Cells(LigCrtRés, 1), Cells(LigCrtRés, 1)).Value = "ING857"
                    Range(Cells(LigCrtRés, 2), Cells(LigCrtRés, 2)).Value = DateMvt
                    Range(Cells(LigCrtRés, 3), Cells(LigCrtRés, 3)).Value = Mvt
                    Range(Cells(LigCrtRés, 4), Cells(LigCrtRés, 4)).Value = Nom
                    Range(Cells(LigCrtRés, 5), Cells(LigCrtRés, 5)).Value = Montant
                    Range(Cells(LigCrtRés, 10), Cells(LigCrtRés, 10)).Value = Comm
                    Range(Cells(LigCrtRés, 12), Cells(LigCrtRés, 12)).Value = Desc
                End If
     
                Worksheets("ING - Extraits 2023").Activate
                Selection.Font.Bold = True
     
            Loop ' Do While Cells.Find(What:=Nom, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Activate
        Loop ' Do While nom <> ""
     
     
    End Sub 'InjectionDansRésultats()
    Si quelqu'un de plus compétent que moi à une idée, il en est d'avance remercié.

    A bientôt.

    Henri

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 574
    Par défaut
    Salut,

    Pour une simple extraction de données, je pense que Power Query est plus adapté.
    Peux-tu joindre un classeur anonymisé ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Bonjour Deedolith,

    Merci pour ta proposition d'aide.
    Je viens de jeter un coup d'oeil sur une description de Power Query, ça a l'air bien.
    Je ne connaissais pas, je vais voir si je peux en faire quelque chose.

    Il est compliqué d'anonymiser les données car les noms des ouvrières se trouvent un peu partout dans les extraits bancaires, tant en terme de lignes qu'en terme de placement dans la ligne.
    Par contre, je t'ai ajouté un renseignement important que j'avais omis, c'est la ligne de code où le module se plante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While Cells.Find(What:=Nom, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Activate
    J'espère que ça t'éclaire un peu.

    Belle soirée !

    Henri

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,


    l'erreur classique avec l'utilisation de find : si la recherche n'aboutit pas, alors on a un objet Nothing, qu'on ne peut pas activer

    Il faut toujours tester si la variable est à nothing ou non avant de la manipuler

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Bonjour Joe,

    Merci beaucoup pour la réponse qui est logique et vérifiée : la 3ème recherche n'est pas trouvée.
    Reste que mon niveau de compétence n'est pas à votre niveau et que je ne vois pas la syntaxe de l'instruction qui permettra de vérifier si la recherche abouti à nothing.
    J'apprécierais beaucoup un petit coup de main supplémentaire.

    Belle après-midi.

    Henri

  6. #6
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, comme expliqué par joe, je t'ai ajouté une variable rngFound pour vérifier si le résultat de la recherche est nothing.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    Sub InjectionDansRésultats()
     
        Dim DerLg As Currency
        Dim LigCrtRés As Currency
        Dim LigCrtING As Currency
        Dim Montant As Currency
        Dim Comm1 As Currency
        Dim i As Currency
        Dim LigCrtAme As Currency
     
        Dim Nom As String
        Dim Mvt As String
        Dim Comm As String
        Dim Desc As String
        Dim Mois As String
     
        Dim DateMvt As Date
     
        Dim rngFound As Range
     
        Nom = "00000"
        LigCrtAme = 1
     
        Do While Nom <> ""
            Worksheets("Gap - Aide-ménagères").Activate
            DerLg = 0 ' Si la ligne de la cellule active de ING - Extraits 2023 est inférieure ou égale de à DerLg on sort de la boucle de recherche "Do while find nom"
            LigCrtAme = LigCrtAme + 1
            Nom = Range(Cells(LigCrtAme, 5), Cells(LigCrtAme, 5)).Value ' Enregistrement du nom de l'ouvrière pour laquelle on va rechercher des mvts dans le fichier bancaire
     
            Worksheets("ING - Extraits 2023").Activate ' On passe sur la feuille des extraits de compte
            Range("I1").Select ' on remonte au début.
     
            Do
                Set rngFound = Cells.Find(What:=Nom, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
     
                If rngFound Is Nothing Then
                    Exit Do
                Else
                    LigCrtING = rngFound.Row ' Une fois qu'on est sur la ligne on en enregistre le numéro.
                    DateMvt = Range(Cells(LigCrtING, 5), Cells(LigCrtING, 5)).Value ' On mémorise la date du mvt.
                    Mvt = Range(Cells(LigCrtING, 4), Cells(LigCrtING, 4)).Value ' On mémorise le n° du mvt.
                    Montant = Range(Cells(LigCrtING, 7), Cells(LigCrtING, 7)).Value ' On mémorise le montant du mvt.
                    Comm = Range(Cells(LigCrtING, 9), Cells(LigCrtING, 9)).Value ' On mémorise la communication du mvt.
     
                    If ActiveCell.Row <= DerLg Then Exit Do ' Si la ligne de la cellule active de ING - Extraits 2023 est inférieure ou égale de à DerLg on sort de la boucle de recherche "Do while find nom"
                    DerLg = ActiveCell.Row ' numéro de ligne de la cellule active
     
                    Comm1 = 0
     
                    If InStr(1, Comm, "ACPT-") > 0 Then Comm1 = 21
                    If InStr(1, Comm, "Acompte") > 0 Then Comm1 = 22
     
                    For i = 1 To 12
                        Mois = Right("0" & i, 2)
                        If InStr(1, Comm, "A" & Mois & ".23") > 0 Then Comm1 = i
                        If Comm1 = i Then Exit For
                    Next
     
                    For i = 1 To 12
                        Mois = Right("0" & i, 2)
                        If InStr(1, Comm, "2023/" & Mois & "-1 1 0") > 0 Then Comm1 = i + 100
                        If Comm1 = i + 100 Then Exit For
                    Next
     
                    Select Case Comm1
                        Case 21
                            Desc = "Acompte du 15"
     
                        Case 22
                            Desc = "Acompte"
     
                        Case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
                            Desc = "Acompte ponctuel"
     
                        Case 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112
                            Desc = "Pas concerné"
     
                        Case Else
                            Desc = "Communication inhabituelle"
     
                    End Select
     
                    If Desc <> "Pas concerné" Then
                        Worksheets("Résultats").Activate
                        LigCrtRés = Cells(Rows.Count, 1).End(xlUp).Row + 1
                        Range(Cells(LigCrtRés, 1), Cells(LigCrtRés, 1)).Value = "ING857"
                        Range(Cells(LigCrtRés, 2), Cells(LigCrtRés, 2).Value = DateMvt
                        Range(Cells(LigCrtRés, 3), Cells(LigCrtRés, 3).Value = Mvt
                        Range(Cells(LigCrtRés, 4), Cells(LigCrtRés, 4).Value = Nom
                        Range(Cells(LigCrtRés, 5), Cells(LigCrtRés, 5).Value = Montant
                        Range(Cells(LigCrtRés, 10), Cells(LigCrtRés, 10).Value = Comm
                        Range(Cells(LigCrtRés, 12), Cells(LigCrtRés, 12).Value = Desc
                    End If
     
                    Worksheets("ING - Extraits 2023").Activate
                    rngFound.Font.Bold = True
                    Set ActiveCell = rngFound
                End If
            Loop
        Loop
     
    End Sub

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 187
    Par défaut
    Bonjour Franc,

    Merci également pour ton aide.
    Je suis en train de tester. Il reste des bugs mais en tout cas plus à cet endroit.

    Je te tiens au courant.

    Henri

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/04/2015, 17h24
  2. Réponses: 6
    Dernier message: 01/03/2013, 16h59
  3. Programme qui fonctionne puis qui ne fonctionne plus ..
    Par doudou2152 dans le forum Code::Blocks
    Réponses: 1
    Dernier message: 13/05/2010, 12h14
  4. Réponses: 3
    Dernier message: 13/06/2007, 11h22
  5. [JSP][Tomcat]Changement de context -> JSP fonctionne plus
    Par mathieu dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 01/03/2004, 08h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo