VBA defaillant dans Excel

Bonjour,

J'essaye de créer un fichier Excel qui reprends les habitudes de Money qui n'est malheureusement plus mis a jour et qui Bug maintenant.

J'ai crée un feuille Programmés.

capture d ecran 564

Un bouton permet une action immédiate.

En principe 10 jours avant la date définie , le crédit ou débit devrait se faire sur la Feuille définie, à la date définie. Un bouton permet d'anticiper le mouvement , toujours à la date définie. Lorsque le mouvement se fait la ligne se met à jour avec la prochaine date suivant la durée choisie. Semaine, mois, semestre, an . En Principe car ça ne marche pas. Un Bug Erreur 13.

Quelqu'un pourrait-il m'aider à changer la ligne défaillant dans la code ?

D'avance Merci

bonjour Pariset et bienvenue,

voici l'erreur . Une des erreurs je présume

capture d ecran 565

rebonjour,

je réitère ma demande. Merci de mettre un fichier (anonymisé) dans lequel on peut reproduire le problème. Pas une copie d'écran dont on ne peut rien faire.

l'erreur semble indiquer que la macro essaie de lire une donnée date, mais qu'elle est tombée sur une donnée qui n'est pas une date.

Est ce le fichier code de mon :

Sub MettreAJourVersements()
Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim i As Long, prochaineDate As Date

' Feuille source
Set wsSource = ThisWorkbook.Sheets("Versements programmés")

' Parcourir les lignes
For i = 2 To wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
If wsSource.Cells(i, 1).Value <= Date + 10 Then
' Définir la feuille cible
On Error Resume Next
Set wsTarget = ThisWorkbook.Sheets(wsSource.Cells(i, 5).Value)
On Error GoTo 0

If Not wsTarget Is Nothing Then
' Transférer données
wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = wsSource.Cells(i, 1).Value
wsTarget.Cells(wsTarget.Rows.Count, 2).End(xlUp).Offset(1, 0).Value = wsSource.Cells(i, 2).Value
wsTarget.Cells(wsTarget.Rows.Count, 3).End(xlUp).Offset(1, 0).Value = wsSource.Cells(i, 3).Value
wsTarget.Cells(wsTarget.Rows.Count, 4).End(xlUp).Offset(1, 0).Value = wsSource.Cells(i, 4).Value

' Mettre à jour prochaine échéance
prochaineDate = wsSource.Cells(i, 1).Value + wsSource.Cells(i, 9).Value
wsSource.Cells(i, 1).Value = prochaineDate
End If
End If
Next i

MsgBox "Versements mis à jour !"
End Sub

edit moderation : code mis entre balises code, en utilisant le bouton "</>" de la barre de menu du message. Merci d'y penser à l'avenir.

La ligne defaillante semble etre : prochaineDate = wsSource.Cells(i, 1).Value + wsSource.Cells(i, 9).Value

Est ce que vous souhaitiez ?

Merci de m'aider

Accessoirement et tant que le dossier ci dessus ne fonctionne pas, j'aimerai telecharger Money in Excel. ou puis je passer cette demande ?

rebonjour,

Est ce le fichier code de mon :

non, il s'agit de mettre ton classeur excel. (en veillant qu'il ne contienne pas de données sensibles).

Mais en poursuivant les recherches de la cause possible de l'erreur, je pense que le problème vient du texte "mois" en colonne i, ce qui ne fait pas de sens et provoque une erreur 13 dans cette instruction. La date étant une donnée numérique on ne peut lui ajouter qu'un nombre, pas une chaine de caractères.

prochaineDate = wsSource.Cells(i, 1).Value + wsSource.Cells(i, 9).Value

Accessoirement et tant que le dossier ci dessus ne fonctionne pas, j'aimerai telecharger Money in Excel. ou puis je passer cette demande ?

il semblerait qu'il existe une version sous office 365

Bonjour,

je suppose que lorsqu'il est indiqué "mois" en colonne i, il faut ajouter un mois à la date en colonne a et lorsqu'il est indiqué "sem" il faut lui ajouter 7 jours.

correction du code sur base de cette supposition.

Sub MettreAJourVersements()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim i As Long, prochaineDate As Date, dl As Long

    ' Feuille source
    Set wsSource = ThisWorkbook.Sheets("Versements programmés")

    ' Parcourir les lignes
    For i = 2 To wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
        If wsSource.Cells(i, 1).Value <= Date + 10 Then
            ' Définir la feuille cible
            On Error Resume Next
            Set wsTarget = ThisWorkbook.Sheets(wsSource.Cells(i, 5).Value)
            On Error GoTo 0

            If Not wsTarget Is Nothing Then
                ' Transférer données
                dl = wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Row + 1
                wsTarget.Cells(dl, 1).Resize(1, 4).Value = wsSource.Cells(i, 1).Resize(1, 4).Value

                ' Mettre à jour prochaine échéance
                Select Case wsSource.Cells(i, 9).Value
                    Case "mois"
                        prochaineDate = Application.EDate(wsSource.Cells(i, 1).Value, 1)
                    Case "sem", "semaine"
                        prochaineDate = wsSource.Cells(i, 1).Value + 7
                End Select
                wsSource.Cells(i, 1).Value = prochaineDate
            End If
        End If
    Next i

    MsgBox "Versements mis à jour !"
End Sub

Oui il me semble. Par exemple pour mois, si c’est indiqué 05/05/2025, lorsqu’il il a été transféré sur la feuille destinataire il doit devenir 05/06/2025

rebonjour,

Oui il me semble

ouch ... Cela signifie-t-il que tu ne sais pas quel résultat tu veux s'il y a mois ou s'il y a sem ?

Le code que j'ai mis ci-dessus ajoute 1 mois à la date quand il y a "mois" en colonne i et 7 jours à la date quand il y a "sem" ou "semaine".

J’ai répondu mais ma réponse a du se perdre. J’écrivais: Si une ligne par exemple prévue pour le 5/05/2025, est envoyée sur la feuille définie, alors elle doit se changer en 05/06/2025.

Re,

C’est le “il me semble” qui m’interpelait. Et donc merci de confirmer que mes suppositions sont exactes.

Rechercher des sujets similaires à "vba defaillant"