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

Execution d'une macro en fonction d'une ligne

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 !

monimeka

XLDnaute Nouveau
Dans mon classeur j'ai plusieurs feuilles.
J'ai créé une macro qui prends des valeurs dans les quatre premières pour les mettre en page dans une cinquième.
Pour chaque feuille j'ai pris les valeurs sur la ligne 1.
Tout fonctionne parfaitement. 😎

Tout devient beaucoup plus compliqué lorsque je regarde les 180 autres lignes qui attendent que je leur crée la même macro.... 😱

Mon manque de connaissances en VBA n'empêche en effet d'automatiser l'utilisation de la 1er macro comme modèle pour lancer les macros des différentes lignes. (pour m'éviter de la recopier 180 fois)

j'espère que j'ai été assez clair...
😱 J'attends vos coup de pouce 😱

Merci d'avance
 
Re : Execution d'une macro en fonction d'une ligne

re
Voila, je donne le code excel (mon fichier entier est trop gros).

Les 4 premières feuilles font référence a 4 cuistots et a leur ventes.
La troisième est la pour m'aider a manipuler mes macros.
La facture du client est faite dans la 5 ème.
La 6eme feuille sert d'archive a la compta.

j'ai dû moi même prendre le classeur tel quel ( a part la feuille traitement et les macros) Je suis ultra novice en VBA et vous comprendrez en regardant mon code. Je l'ai constituer en collant des petits bout de macros enregistrés grâce a l'outil d'Excel "enregistrer une macro". j'ai du ruser pour pallier a mes lacunes en programmation. Le code n'est pas beau , jen suis sur mais il fonctionne.

mais revenons a mon "problème"....je veux utiliser cette macro comme modèle pour créer (a la demande et pas tout en même temps) les factures des autres clients.

MERCI

Code:
Sub edition_facture()
'Je copie 3 lignes de la 1ere feuilles pour les placé dans la feuille traitement (collage special)
    Sheets("Lefevre").Select
    Range("C1:K3,C5:K5").Select
    Range("C5").Activate
    Selection.Copy
    Sheets("traitement").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=True, Transpose:=False
' je fais la meme copie dans la feuille suivante
    Sheets("Carpentier").Select
    Range("C1:K3,C5:K5").Select
    Range("C5").Activate
    Selection.Copy
    Sheets("traitement").Select
'mais cette fois je copie 9 colonnes plus loin.
    Range("J1").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=True, Transpose:=False
        
    Sheets("Bytebier").Select
    Range("C1:K3,C5:K5").Select
    Range("C5").Activate
    Selection.Copy
    Sheets("traitement").Select
    Range("S1").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=True, Transpose:=False
        
    Sheets("Nedelec").Select
    Range("C1:K3,C5:K5").Select
    Range("C5").Activate
    Selection.Copy
    Sheets("traitement").Select
    Range("AB1").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=True, Transpose:=False
        
  'j'ai des colonnes completement vides dans "traitement" jes les supprimes grace à bhbh (XLDL)
    Sheets("traitement").Select
 Range(Cells(4, 1), Cells(4, [IV1].End(xlToLeft).Column)).SpecialCells(xlCellTypeBlanks).EntireColumn.Delete
'je selectionne ce dont jai besoin dans "traitement" pour créer "facture"
    Range("A1:S4").Select
    Selection.Copy
    Sheets("Facture").Select
    Range("B6").Select
'collage spécial
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=True
    Range("A1").Select
    Sheets("traitement").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A1").Select
    Sheets("Facture").Select
End Sub

'jai ma belle facture.

PS je mets quand meme le XLS mais allégé de quelques feuilles.
 

Pièces jointes

Re : Execution d'une macro en fonction d'une ligne

😱 super...!!

ça donne vraiment envie de comprendre comment ça marche tout ça...🙄

Je crois que ça ne marche pas avec le client 1.
Après il y aura une amélioration pour ce premier jet. En effet une fois la facture éditée toutes les chiffres contenus dans les lignes du client (dans chaque feuilles cuistot) doivent être supprimées. La seule trace qu'il doit rester de ses achats se trouve dans une autre feuille destinée a la compta. elle enregistre, en temps réel, la somme des totaux de la colonne L de chaque feuille cuistot pour chaque client. (cette feuille fonctionne parfaitement dans mon document original)
C'est d'ailleurs a partir de cette feuille que de devrait pouvoir lancer l'édition de facture. Il faut donc que tu m'expliques comment déplacer la "boite-formulaire".


Merci, merci, merci...
 
Re : Execution d'une macro en fonction d'une ligne

Re-,

Je crois que ça ne marche pas avec le client 1.
😕
chez moi, j'ai fait les essais avec, justement, il n'y avait que lui qui consommait....😀

J'avais déjà pensé à la suppression du client, une fois la facture éditée, mais un autre "client" 😀😀 (et c'est peu de le dire, regarde le fil ICI, avec humour, bien sûr) m'a un peu accaparé ce soir

Pour la dernière, je pense que tu devrais joindre le document avec cette feuille récap, afin que je puisse voir la structure.
Si tu ne peux pas la joindre sur le site, je t'enverrai mon adresse mail via message privé, ainsi, je pourrai le mettre ici pour que tout le monde en profite, et puisse l'améliorer
 
Re : Execution d'une macro en fonction d'une ligne

J'ai lu... l'autre fil et ta patience et ton altruisme m'impressionnent 😱

je pense que tu devrais joindre le document avec cette feuille récap, afin que je puisse voir la structure...

...ainsi, je pourrai le mettre ici pour que tout le monde en profite, et puisse l'améliorer

Je me demandais justement comment te remercier de toute cette attention. Je te ferais donc un beau topo du cahier des charges avec le fichier original et celui de notre discussion pour que tu puisse faire en faire une belle doc pour que ça serve a tout le monde

Pas de problème.... 😉

j'attends ton mail
 
Re : Execution d'une macro en fonction d'une ligne

je sais pas ce qu'il ce passe... chez moi ca plante.
"Erreur 1004. La méthode PasteSpecial de la classe Range a échoué"
..
je lance le debogage et la il me surligne en jaune
"Range("B6").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, Transpose:=True"
 
Re : Execution d'une macro en fonction d'une ligne

Re-,
chez moi aussi, ça buggue, j'avais pas essayé....😱

en haut du code, mets cette ligne (en rouge)

Code:
Dim i As Integer, sh, Nom As Range, Lig As Integer
[COLOR="Red"]Sheets("Facture").Range("B6:E24").ClearContents[/COLOR]
Sheets("traitement").Select

et supprime cette ligne en bas :

Code:
Range("B6:E24").ClearContents

ça devrait le faire...
J'ai enlevé les formules dans la feuille "total", c'est le code qui écrit à l'intérieur
 
Re : Execution d'une macro en fonction d'une ligne

Re-,
encore une petite erreur (des rajouts de dernière minute qui n'ont pas été testés)

remplace tout le bloc

Code:
            If Not Nom Is Nothing Then
                Lig = Nom.Row
                .Range("C1:K3").Copy Cells(1, i)
                .Range(.Cells(Lig, 3), .Cells(Lig, 8)).Copy Cells(4, i)
                .Range(.Cells(Lig, 3), .Cells(Lig, 8)).ClearContents
                Sheets("total").Cells(Lig, j).Value = .Cells(Lig, 10).Value
            End If

par celui-ci

Code:
            If Not Nom Is Nothing Then
                Lig = Nom.Row
                .Range("C1:K3").Copy Cells(1, i)
                .Range(.Cells(Lig, 3), .Cells(Lig, 8)).Copy Cells(4, i)
                Sheets("total").Cells(Lig, j).Value = .Cells(Lig, 10).Value
                .Range(.Cells(Lig, 3), .Cells(Lig, 8)).ClearContents
            End If
 
Re : Execution d'une macro en fonction d'une ligne

super....🙂🙂

ca marche impecablement bien.

MERCI

Je vais essayer de déplacer le bouton de lancement du userform sur une autre feuille et aussi de créer un indicateur visuel pour prevenir de la nécessité de créer une facturette a cause de la taille restreinte du tableau.(19 achats par facturette)

laisse moi faire....je te tiens au courant 😎
 
Re : Execution d'une macro en fonction d'une ligne

bonjour,

j'ai executer l'userform en indiquant par erreur le nom d'un client qui n'avait rien acheter...ca ne m'a pas remplie la facture (normal) mais par contre ca efface les fonctions de sa ligne dans la feuille "total"
 
Re : Execution d'une macro en fonction d'une ligne

Re,
tu lis tout ce que je mets????😀😀😀😀

J'ai enlevé les formules dans la feuille "total", c'est le code qui écrit à l'intérieur

C'est le macro qui va écrire directement dans la feuille total
par contre fais des essais avec des noms, et dis si cela fonctionne!
 
- 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
6
Affichages
542
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…