VBA sous excel pour afficher des échéanciers

  • Initiateur de la discussion Initiateur de la discussion carol
  • 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 !

carol

XLDnaute Nouveau
Bonjour,
Je suis une débutante en VBA sous Excel,
J'ai un exercice ou on me demande d'écrire sous excel la Macro Commande qui permet de produire une ventilation des factures non réglées uniquement regroupées par le numéro du compte client , et ventillées en fonction de l'écart entre une date et la date d'échéance.
Je vous joints l'exercice pour vous permettre de voire de quoi il s'agit réellement.
Merci d'avance pour l'aide.
 

Pièces jointes

Bonjour

Voici un exemple d'utilisation d'un tableau en se basant sur ton fichier Exemple.
(Il est surprenant que l'on demande à des débutants d'utiliser des tableaux )
Code:
Sub a()[COLOR="seagreen"]'Exemple de création d'un tableau[/COLOR]
[COLOR="seagreen"]'Déclarations des variables[/COLOR]
Dim Tablo, a&, b&, i&, j&, xStr$
[COLOR="seagreen"]'On remplit le tableau (je préfère utiliser le terme Array)[/COLOR]
Tablo = Range("C3").CurrentRegion.Offset(1).Value
a = UBound(Tablo, 1)
b = UBound(Tablo, 2)
    For i = 1 To 1
        For j = 1 To b
        xStr = xStr & "| " & Tablo(i, j)
        Next j
    Next i
  [COLOR="seagreen"]  'ici on affiche la première ligne dans une MsgBox[/COLOR]
    MsgBox Mid(xStr, 2, 9 ^ 9)
   [COLOR="seagreen"] 'Autre exemple ici on affiche toutes les valeurs du tableau[/COLOR]
   [COLOR="seagreen"] 'dans la fenêtre Exécution de VBE[/COLOR]
    For i = 1 To a
        For j = 1 To b
    Debug.Print Tablo(i, j)
        Next j
    Next i
End Sub

PS: Ne crois pas que l'on va te faire ton exercice de A à Z ( cela n'aurait pas de sens)
sans que tu mettes la main à la pâte !
Désormais tu as déjà de quoi commencer à travailler
 
Dernière édition:
Re

Je mets en ligne l'exposé de ton exercice
(comme le suggère Lien supprimé)
Vous disposez d'un extrait de l'échéancier des Clients de la société (dans l'onglet CompteClients).

Vous devez écrire la Macro Commande qui permet de produire une ventilation des factures non réglées uniquement regroupées par le numéro du compte client , et ventilées en fonction de l'écart entre la date du 14/01/2006
et la date d'échéance prévue.
Si l'écart est négatif, cela veut dire que la facture est échue et non réglée.
Il s'agit d'un retard de paiement.
Attention : ce n'est pas un détail par facture qui est demandé dans la feuille "Échéancier", mais bien une ligne par compte client.

Lorsque la tâche est terminée, c'est la feuille "Échéancier" qui doit être active !.
Bon courage et bon travail. Pour vous aider : Suivez la procédure

1) Chargez les Numéros de clients, montants de factures, Etats de factures et différence en jours dans un tableau temporaire (éventuellement, ne chargez que les factures non réglées)

2) Pour chaque numéro de client de la page echéancier, recherchez dans le tableau temporaire les montants (factures non réglées) à affecter dans les case "retard", <=30j, <=60j, +60 j

PS: j'ai corrigé quelques fautes d'orthographes 😉
 
Dernière édition:
Re : VBA sous excel pour afficher des échéanciers

Je m'excuse de n'avoir pas posté la mocro qu'on a écrite !
voici notre macro a nous :

Sub echeance()
Dim ech(10, 4)
Dim regle As String
Dim retard As Integer
Dim cli As String
Dim nbrec As Integer
nbrec = 0

Application.Worksheets("ComptesClients").Activate
Application.Range("B4").Select
While ActiveCell <> ""
cli = ActiveCell.Value
regle = ActiveCell.Offset(0, 4).Value
retard = ActiveCell.Offset(0, 5).Value

If regle = "O" Then GoTo suite
If retard > 0 Then GoTo suite
' recherche du code cli
For i = 1 To nbrec
If ech(i, 1) <> cli Then GoTo s2
ech(i, 2) = ech(i, 2) + ActiveCell.Offset(0, 7).Value
ech(i, 3) = ech(i, 3) + ActiveCell.Offset(0, 8).Value
ech(i, 4) = ech(i, 4) + ActiveCell.Offset(0, 9).Value
GoTo suite
s2:
Next i
ech(i, 1) = cli
ech(i, 2) = ActiveCell.Offset(0, 7).Value
ech(i, 3) = ActiveCell.Offset(0, 8).Value
ech(i, 4) = ActiveCell.Offset(0, 9).Value
nbrec = i
suite:
ActiveCell.Offset(1, 0).Activate
Wend
Application.Worksheets("echeancier").Activate
Application.Range("A2").Select
For j = 1 To nbrec
ActiveCell.Value = ech(j, 1)
tot = 0
For k = 2 To 4
tot = tot + Val(ech(j, k))
ActiveCell.Offset(0, k).Value = Val(ech(j, k))
Next k
ActiveCell.Offset(0, 1).Value = tot
ActiveCell.Offset(1, 0).Activate
Next j
End Sub
 
Re

Merci pour le feedback. Je vois que vous avez bien travaillé 😉

En utilisant les balise [NOPARSE]
Code:
Ici code de ma macro
[/NOPARSE],tu rendras ton message plus lisible 😉

Je me suis permis quelques modifs de votre code
Tu peux les tester pour voir, stp ?
Code:
Sub echeance()
Dim regle$, cli$, retard%, nbrec%, tot%, i&, j&, rech(10, 4)
nbrec = 0
With Worksheets("ComptesClients")
    .Range("B4").Select
    While ActiveCell <> ""
        cli = ActiveCell.Value
        regle = ActiveCell.Offset(, 4).Value
        retard = ActiveCell.Offset(, 5).Value
        If regle = "O" Then GoTo suite
        If retard > 0 Then GoTo suite
    ' recherche du code cli
        For i = 1 To nbrec
            If ech(i, 1) <> cli Then GoTo s2
            ech(i, 2) = ech(i, 2) + ActiveCell.Offset(, 7).Value
            ech(i, 3) = ech(i, 3) + ActiveCell.Offset(, 8).Value
            ech(i, 4) = ech(i, 4) + ActiveCell.Offset(, 9).Value
    GoTo suite
s2:
    Next i
        ech(i, 1) = cli
        ech(i, 2) = ActiveCell.Offset(, 7).Value
        ech(i, 3) = ActiveCell.Offset(, 8).Value
        ech(i, 4) = ActiveCell.Offset(, 9).Value
        nbrec = i
suite:
    ActiveCell.Offset(1).Activate
    Wend
    End With
    With Worksheets("echeancier")
    .Range("A2").Select
        For j = 1 To nbrec
            ActiveCell.Value = ech(j, 1)
            tot = 0
            For k = 2 To 4
                tot = tot + Val(ech(j, k))
                ActiveCell.Offset(0, k).Value = Val(ech(j, k))
            Next k
            ActiveCell.Offset(, 1).Value = tot
            ActiveCell.Offset(1).Activate
        Next j
    End With
End Sub
 
Re : VBA sous excel pour afficher des échéanciers

Ok,J'ai essayé ta macro mais ca marche je savais pas comment on utilise les balises
sinon voici notre solutio
Dim cli As String
Dim nbrec As Integer
nbrec = 0

Application.Worksheets("ComptesClients").Activate
Application.Range("B4").Select
While ActiveCell <> ""
cli = ActiveCell.Value
regle = ActiveCell.Offset(0, 4).Value
retard = ActiveCell.Offset(0, 5).Value

If regle = "O" Then GoTo suite
If retard > 0 Then GoTo suite
' recherche du code cli
For i = 1 To nbrec
If ech(i, 1) <> cli Then GoTo s2
ech(i, 2) = ech(i, 2) + ActiveCell.Offset(0, 7).Value
ech(i, 3) = ech(i, 3) + ActiveCell.Offset(0, 8).Value
ech(i, 4) = ech(i, 4) + ActiveCell.Offset(0, 9).Value
GoTo suite
s2:
Next i
ech(i, 1) = cli
ech(i, 2) = ActiveCell.Offset(0, 7).Value
ech(i, 3) = ActiveCell.Offset(0, 8).Value
ech(i, 4) = ActiveCell.Offset(0, 9).Value
nbrec = i
suite:
ActiveCell.Offset(1, 0).Activate
Wend
Application.Worksheets("echeancier").Activate
Application.Range("A2").Select
For j = 1 To nbrec
ActiveCell.Value = ech(j, 1)
tot = 0
For k = 2 To 4
tot = tot + Val(ech(j, k))
ActiveCell.Offset(0, k).Value = Val(ech(j, k))
Next k
ActiveCell.Offset(0, 1).Value = tot
ActiveCell.Offset(1, 0).Activate
Next j
End Sub
 
Re : Re: VBA sous excel pour afficher des échéanciers

Je n'ai pas bien copié la macro précédente
voici la macro telle ecrite par nous pour résoudre l'exo.
Sub echeance()
Dim ech(10, 4)
Dim regle As String
Dim retard As Integer
Dim cli As String
Dim nbrec As Integer
nbrec = 0

Application.Worksheets("ComptesClients").Activate
Application.Range("B4").Select
While ActiveCell <> ""
cli = ActiveCell.Value
regle = ActiveCell.Offset(0, 4).Value
retard = ActiveCell.Offset(0, 5).Value

If regle = "O" Then GoTo suite
If retard > 0 Then GoTo suite
' recherche du code cli
For i = 1 To nbrec
If ech(i, 1) <> cli Then GoTo s2
ech(i, 2) = ech(i, 2) + ActiveCell.Offset(0, 7).Value
ech(i, 3) = ech(i, 3) + ActiveCell.Offset(0, 8).Value
ech(i, 4) = ech(i, 4) + ActiveCell.Offset(0, 9).Value
GoTo suite
s2:
Next i
ech(i, 1) = cli
ech(i, 2) = ActiveCell.Offset(0, 7).Value
ech(i, 3) = ActiveCell.Offset(0, 8).Value
ech(i, 4) = ActiveCell.Offset(0, 9).Value
nbrec = i
suite:
ActiveCell.Offset(1, 0).Activate
Wend
Application.Worksheets("echeancier").Activate
Application.Range("A2").Select
For j = 1 To nbrec
ActiveCell.Value = ech(j, 1)
tot = 0
For k = 2 To 4
tot = tot + Val(ech(j, k))
ActiveCell.Offset(0, k).Value = Val(ech(j, k))
Next k
ActiveCell.Offset(0, 1).Value = tot
ActiveCell.Offset(1, 0).Activate
Next j
End Sub
 
Re


C'est votre macro, donc c'est sur elle que vous serez noté

Mes modifs sont juste illustratives du fait que l'on peut (et c'est recommandé) éviter les Select et Activace tout en laissant le code VBA fonctionnel.

Content d'avoir pu vous aider.

A+ pour d'autres aventures VBAistiques 😉

PS: dans ton code tu as mis des ; à la fin de tes étiquettes
C'est des : qu'il faut

Bon week-end, jeunes padawans 🙂
 
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
3
Affichages
298
Retour