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

Microsoft 365 [VBA] Macro pour automatiser une sortie

asso78Lim

XLDnaute Nouveau
Bonjour à toutes et à tous,
Tout d'abord je tenais à remercier les intervenants du forum pour leurs implications et les solutions mise à disposition de tous !

J'ai un problème que je n'arrive pas à résoudre malgré plusieurs tentatives et moultes recherches, mes compétences en VBA sont très limités mais la plupart du temps j'arrive à m'en sortir à l'aide du forum (encore merci!).

J'ai un tableau qui recense toutes les dépenses liées à mon petit commerce et qui s'actualise à chaque nouvel achat.
Pour chaque produit j'ai un budget à ne pas dépasser lors de mes commandes que je modifie en fonction de mes besoins chaque mois.
Les achats réalisés sont inscris manuellement sur un autre tableau à l'aide d'un userform.
Travaillant avec des personnes d'un certain âge qui n'arrive pas toujours à utiliser excel, j'aimerais automatiser cette action pour éviter des erreurs et limiter le stress que ça peut représenter par "peur de mal faire".


Voici mon problème,
Dans le fichier excel joint il y'a 3 feuilles : "Achat", "Budget", "Résumé"

J'aimerais qu'en cliquant sur un bouton :

-Les références présentes dans la feuille budget se mette automatiquement à jour (en les soustrayant) en fonction des références présentes sur la feuille "Achat"

-Dans la feuille "Résumé", j'essaye (mais en vain) de retranscrire les achats réalisés à la suite avec les informations de la référence (qui se trouve dans la feuille "Budget"), le montant de la commande et le budget final après la commande.
(J'ai fais un exemple sur le fichier joint, c'est plus compréhensible qu'une explication hasardeuse)

-Si lors d'un clic l'un des budgets devient négatif prévenir l'utilisateur.

Pour le premier point j'ai réussi à bidouiller quelque chose mais avec un code incompréhensible, j'ai l'espoir que quelqu'un pourra me proposer un code plus simple.
Pour le deuxième point j'ai essayé de nombreux code mais je ne comprend pas toutes les subtilités et il est pour moi impossible de réaliser ça tout seul.

Merci à vous d'avoir pris le temps de me lire (c'était long désolé) et je remercie d'avance les intervenants qui prendront le temps de me répondre si solution il existe.
En vous souhaitant une excellente journée,

Asso
 

Pièces jointes

  • modèle (1) (2) (2).xlsm
    31.9 KB · Affichages: 5
Dernière édition:
Solution
Bonjour Asso, Staple1600,

nouveau fichier, avec la simplification proposée par Staple.

VB:
Option Explicit

Dim T

Private Sub WriteLig(j&, i&)
  Dim cel As Range, réf$, dsg$, bdg&, ect As String * 3: réf = T(i, 1): dsg = "?"
  With Worksheets("Budget")
    Set cel = .Columns(2).Find(réf, , -4163, 1, 1)
    If cel Is Nothing Then Exit Sub 'sortir de la sub si référence non trouvée
    dsg = .Cells(cel.Row, 3): bdg = .Cells(cel.Row, 5): ect = .Cells(cel.Row, 6)
  End With
  With Worksheets("Résumé").Cells(j, 2)
    .Value = Date
    .Offset(, 1) = StrConv(Format(Date, "dddd"), 3) 'jour de la semaine
    .Offset(, 2) = "Achat"  'Type de mouvement
    .Offset(, 3) = "Frs X"  'Fournisseur
    .Offset(, 4) = réf...

Staple1600

XLDnaute Barbatruc
Bonjour asso78lim, le forum

Si tu as déjà quelques morceaux de code VBA, ceux ne seront pas dans ton fichier exemple car il est au format xlsx (format qui ne peut contenir de macros VBA).

Tu devrais joindre une version xlsm que l'on puisse voir à quoi ressemble ton code VBA
 
Dernière édition:

asso78Lim

XLDnaute Nouveau
Bonjour Staple1600, merci pour ta réponse en effet le fichier ne prend pas en charge les macros.

Voici un fichier prenant en charges les macros.
Je m'excuse d'avance pour l'absurdité de ce code VBA mais j'ai essayé d'utiliser les ressources à ma disposition ne comprenant pas les mécanismes de ce dernier.
Il n'y a que la partie pour essayer de faire une soustraction, pour la deuxième problématique je n'ai pas les compétences requises.
Mon champ d'action se résume à des choses très basique...
 

Staple1600

XLDnaute Barbatruc
Bonjour Phil69970

Merci d'avoir relevé ma coquille.
J'ai corrigé.

Sinon si j'étais moi, deux options s'offrirait à lui
1) mettre les mains dans le cambouis
2) conseiller la section Téléchargements pour voir si dans l'existant, il n'y aurait pas une appli qui fasse déjà l'affaire.


Comme on est samedi, et que j'ai mal aux pieds, je conseille l'option 2
 

asso78Lim

XLDnaute Nouveau
Bonjour Phil69970 !

@Staple1600 J'ai déjà regardé dans la section téléchargements, les applications proposés sont vraiment bien mais le fichier que j'ai envoyé et lié à deux autres classeurs excel pour d'autres raisons que les achats

Je pense qu'il ne me reste plus qu'a mettre les mains dans le cambouis si personne d'autre n'a de solution

Merci pour ta réponse !
 
Dernière édition:

asso78Lim

XLDnaute Nouveau
Après de nombreuse recherche j'ai enfin réussi à réaliser ma soustraction comme j'ai envie de le faire, si quelqu'un peut y jeter un petit coup d'oeil et voir ce qu'il est possible d'améliorer

La macro marche mais elle m'ajoute une dernière ligne vide dans la feuille "Budget" je ne comprend pas pourquoi...

EDIT : J'ai trouvé la "solution" pour la soustraction mais toujours une ligne vide qui s'ajoute à la fin du tableau dans la feuille "Budget"
 
Dernière édition:

asso78Lim

XLDnaute Nouveau
Re @Staple1600, j'ai édité mon poste du dessus avec un nouveau fichier joint!

Sur la feuille achat il n'y a rien à saisir, le tableau est un tableau qui se met à jour automatiquement à l'aide de powerquery.
Pour la feuille "résumé", la date qui doit être inscrit est la date du jour.
Dans notre exemple ce sera le 14/05/2022 et dans jour Dimanche !


EDIT : J'ai recréée un fichier minimaliste que j'adapterai ensuite au fichier de base à l'aide des solutions apportées.
C'est pour ça que certains aspects du classeur peuvent paraître abstrait.

EDIT 2 : Je m'attaque maintenant à la partie 2 du problème qui est d'incrémenter les informations dans le tableau de la feuille "Résumé"
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Comme tu utilises des tableaux, voici un essai
(pour recopier la dernière du tableau Achat dans le tableau Budget)
VB:
Sub Essai()
Dim loA As ListObject, loB As ListObject, sREF, sQT
Set loA = Sheets("Achat").ListObjects(1)
With loA
  sREF = .ListRows(.ListRows.Count).Range.Cells(1).Value
  sQT = .ListRows(.ListRows.Count).Range.Cells(1, 2).Value
End With
Set loB = Sheets("Budget").ListObjects(1)
loB.ListRows.Add
With loB
    .ListRows(.ListRows.Count).Range.Cells(1, 2).Value = sREF
    .ListRows(.ListRows.Count).Range.Cells(1, 4).Value = sQT
End With
End Sub

NB: Cette macro a été écrite selon ce que j'avais compris.
Mais il semble que je me suis trompé .
 

asso78Lim

XLDnaute Nouveau
Sympa le code!

Pour la feuille "Budget" j'ai uniquement besoin de faire une soustraction à partir des références de la feuille "Achat" que j'ai en parti réussi avec la macro dans mon fichier joint, le seul problème c'est que ça me rajoute une ligne vide à la fin du tableau de la feuille "Budget" avec un 0 dans la colonne budget alloué je ne comprend pas pourquoi

Merci de prendre de ton temps pour mon problème
 

asso78Lim

XLDnaute Nouveau
Je viens de peut-être trouver une solution mais je ne comprend pas comment utiliser la boucle...
Voici un fichier joint avec le nouveau bouton "Test 2".
J'ai à peu près trouver l'idée mais maintenant faut que j'arrive à comprendre ou ça cloche...

EDIT : Je viens de trouver une erreur que j'ai corrigé, il ne me manque plus qu'a réussir la boucle et je pense avoir fais un grand pas, fichier joint actualisé..
 
Dernière édition:

asso78Lim

XLDnaute Nouveau
En fin de compte aucune des deux macros ne fonctionne après plusieurs essai que ce soit les soustractions qui marche une fois sur deux ou copier les données sur une autre feuille

Je posterai un fichier joint quand j'aurais trouvé une solution!
 

Discussions similaires

Réponses
3
Affichages
638
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…