Mettre 2 macros en une seule

Bonjour,

N'étant pas doué du tout en VBA, je requiers une fois encore votre aide.

J'ai écrit une macro pour générer des factures sur une feuille (Consultation) avec un bouton (feuille Facture). Je voudrais que ce même bouton crée une facture selon le critère Oui sur une colonne de Consultation mais également une facture sur le même critère Oui dans la feuille Suivi Forfait Epilation.

Je n'y arrive pas.
Faut-il 2 macros avec 2 boutons ou peut-on combiner les deux?
J'ai essayé avec 2 variables mais je ne m'en sors pas mieux.

Merci pour votre aide.

J'ai réussi à avancer un peu mais j'ai une erreur que je ne comprends pas au lancement de la macro

Hello Crazylib,

Peux-tu me donner un peu plus d'information stp
Ta demande concerne tes deux macros "retrocession_export" et "facturation_export" ?
Quelle est la différence entre ces deux macros ?

Si je comprend bien, ta macro s'active depuis la feuille Consultation et créer une facture (feuille Facture), l'exporte en PDF, puis insérer ces données dans la feuille Suivi Forfait Epilation, selon le critère Oui/Non de la colonne N de la feuille Consultation ?

A+,
Kilian

Macro mis à part dans un premier temps, tout part de la feuille Données clients.

On remplit cette feuille et en fonction des cases cochées oui de J à Q, les valeurs sont recopiées par formules dans les feuilles correspondantes (ce serait plus évident en VBA mais je ne sais pas faire).

La macro retrocession_export fonctionne bien.

La macro facturation_export me signale une erreur "L'indice n'appartient pas à la sélection" au niveau de
rgsean = Sheets(onglet_Achat_Seance).Range("A2").End(xlDown).Row

Les deux premières parties de cette macro (pour les feuilles Consultation et Suivi Forfait Séance fonctionnent.

La macro doit vérifier si dans la colonne facture il y a la valeur "Oui". Dans ce cas là elle recopie dans la feuille facture les différentes valeurs puis remplace "Oui" par "Editée" pour ne pas imprimer chaque fois les factures depuis le début.

Le remplissage des feuilles par VBA n'est pas obligatoire et fonctionne très bien par formule. Certaine formules pourrait être revu, mais ne connaissant pas les correspondances, je laisse ça de côté.

Ce que je ne comprend pas bien, c'est depuis où et à quel moment ta macro est déclenché ?
De plus tu aimerais, au déclanchement de la macro, contrôler toutes les feuilles (qui sont remplis depuis Données clients) et créer toutes les factures qui n'ont pas encore été créés ?

Voici une solution à tester (macro InvoiceToExport), basé sur ta macro facturation_export.

Je n'ai fait que pour le premier tableau, tu trouveras le code commenté, tu n'as plus qu'à copier/coller et changer les informations nécessaire pour les autres feuilles.

A+

la macro se déclenche quand elle rencontre la valeur "Oui" dans la colonne Facture sur 3 pages "Consultation", "Suivi Forfait Epilation" et "Achat Séance".

La macro est déclenchée par le bouton situé sur la feuille "Facture". Si j'enlève la boucle For Z = 2 To rgsean la macro fonctionne. Les factures des feuilles "Consultation" et "Suivi Forfait Epilation" sont créées.

Jette un coup d'oeil à mon code dans le post précédent.
Le problème dans ton code est que tes boucles sont imbriquées alors qu'elles ne devraient pas.

Dès que tu as fini avec ton If, ferme le puis dès que tu as fini avec ta boucle, ferme la.

Regarde également la partie sur la déclaration des feuilles, tes variables ne sont pas utile car tu remplace du texte par du texte.

A dispo si besoin, A+

Ta macro ne me crée aucune facture alors que selon les critères voulus elle devrait en créer une

Oups, oui petite erreur de numéro de colonne, la colonne N correspond à la 14 et non 22...
Il y a également un autre oublie de ma part, tu peux remplacer le nom du tableau comme ci-dessous :

image

A+

cette fois les factures sont bien éditées pour la feuille Consultation mais elles sont rééditées à chaque fois. Et sur l'impression, cela m'imprime 2 feuilles alors que je n'en ai qu'une

Oui, car il faut également changer le 22 par 14.

image

Pour les deux pages, il s'agit de la zone d'impression de la feuille Facture qui doit être défini (affichage -> Avec Saut de page, modifier la zone).
Ou alors, ajouter un paramètre à l'exportation, tu peux modifier les dernières lignes de l'exportation comme ça :

                ' Variable contenant les informations du nom du PDF
                Dim strName As String, strRefClient As String, strRefAchat As String, strPath As String
                strName = .Range("H3").Value ' Nom dans la feuille Facture
                strRefClient = rngTabConsult(i, 4).Value ' Colonne D
                strRefAchat = rngTabConsult(i, 5).Value ' Colonne E
                strPath = ThisWorkbook.Path & "/" & "Facture " & strName & "/" & "Facture Client " & strRefClient & " - " & strRefAchat & ".pdf"
                Application.DisplayAlerts = False ' Désactive les alertes
                ' Exporte la facture en pdf
                .ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPath, OpenAfterPublish:=False, IgnorePrintAreas:=False, from:=1, To:=1
                Application.DisplayAlerts = True ' Ne pas oublier de réactiver les alertes

A+

j'ai corrigé la réédition de la facture. C'était la même erreur de cellule

Par contre pourquoi est ce que j'ai 2 feuilles qui s'imprime? Je ne veux que la 1ère

C'est expliqué dans mon dernier message...

Voici un fichier entièrement corrigé.

Je ne pourrai pas plus aider pour se soir.

Belle soirée,
Kilian

Merci beaucoup.

Cela marche Nickel. Je ne comprends pas tout et ça m'agace un peu car je ne saurai pas réutiliser tout ça. Je vais essayer de tout étudier.

J'aimerais comprendre mon erreur sur ma macro. Si quelqu'un sait m'expliquer mon erreur...

Bonjour,

En essayant de dépanner Joco sur ce fil https://forum.excel-pratique.com/excel/beug-avec-excel-196332, j'ai découvert votre demande et ai regardé hier sur votre souci.
Killan m'ayant devancé, il ne sert à rien que je vous donne un code sachant que votre souci est résolu.

Toutefois, lorsque j'ai lu votre code j'ai l'impression que vous vouliez faire 3 factures en utilisant les données des onglets consultation, suivi forfait épilation et achat séance. D'où je n'ai pas compris votre question de mettre 2 macros en une.

Juste deux commentaires :
- Vous utilisez des tableaux structurés et vous ne devez jamais avoir de lignes sans données dans ce genre de tableaux
- Pour le code, l'utilisation de boucle ne me parait pas un bon choix car le code va toujours balayer toutes lignes pour vérifier si un oui existe ou pas. Actuellement cela fonctionne bien parce que votre tableau n'a que 100 lignes mais si vous en avez 500 sur chacun des feuilles ... cela va ralentir l'exécution.
Dans votre cas, si j'ai bien vu vous utilisez 3 boucles. Imaginez 3 x 500 lignes....
Pour ce qui est du PDF, on pouvait aussi appeler un code séparément. Cela évitait de faire 3 x les mêmes lignes.

La macro facturation_export me signale une erreur "L'indice n'appartient pas à la sélection" au niveau de
rgsean = Sheets(onglet_Achat_Seance).Range("A2").End(xlDown).Row

J'aimerais comprendre mon erreur sur ma macro.

Simplement que le nom de votre onglet Achat Séance contient un espace après la lettre "e" de séance.

Si terminé pensez à cloturer le fil

Crdlt

Merci à tous les deux pour votre aide.

Toujours sur ce fichier, sauriez vous me dire pourquoi les mises en forme conditionnelles que j'ai sur la feuille Suivi Forfait Epilation ne fonctionne pas ?

Bonjour

De quelles MFC parlez-vous, il y en a plusieurs ...
exemple si on prend H6 et H1, les mFC sont différentes

Pouvez-vous préciser

Rechercher des sujets similaires à "mettre macros seule"