Mes données sont bien en liste. Je l'avais noté dans le message que tu as déplacé.
Je vais essayer de faire ca.
Si tu veux voir l'exemple en pratique, j'utilise le fichier qu'on a créé avec : mercatog et casefayere. Merci à eux
Mes données sont bien en liste. Je l'avais noté dans le message que tu as déplacé.
Je vais essayer de faire ca.
Si tu veux voir l'exemple en pratique, j'utilise le fichier qu'on a créé avec : mercatog et casefayere. Merci à eux
J'essaye ta méthode mais je ne sais pas pourquoi cela ne fonctionne pas. J'ai systématiquement un message d'erreur.
Est ce que je dois prendre exactement le même nombre de colonne que celle sélectionnée ?
J'ai réussi à faire fonctionner le filtre (il ne fonctionnait pas car je prenais les deux premières lignes qui étaient vides)
J'applique le filtre sur les colonnes Produit; Detail produit; Etc; ID Client
qui me copie correctement les données voulues sur la feuille "Impression" (Qui est la lettre type qui reprend les données du client et de tout ses produits).
Je suis maintenant confronté à deux nouveaux problèmes.
Le détail des produits est constitué en liste de cette façon :
Num; Nom; Prénom; Num & Rue; Code Postal; Ville; Produit; Detail produit; Etc; ID Client
Les données copiées par le filtre sont : Produit; Detail produit; Etc; ID Client
Mais j'ai aussi besoin des coordonnées du client qui sont positionnées dans l'entente de la lettre.
1) Comment faire pour qu'il me copie une seul fois Nom; Prénom; Num & Rue; Code Postal; Ville et le positionne correctement dans l'entente de ma feuille à imprimer ?
2) Actuellement, je dois recommencer l'opération complète du filtre pour chaque client. Comment faire pour que toute les données changent automatiquement quand je modifie ID Client sur la page d'impression ?
Merci
Réponse en deux temps:
1) Le filtre avancé impose une construction du type de celle que j'ai illustrée. Donc, tu ne peux pas récupérer en même temps et dans des zones différentes les données du client et des produits qui le concernent.
Tu dois disposer de deux tables (deux feuilles, si tu préfères), l'une avec la liste des clients, l'autre avec la liste des produits vendus.
Pour récupérer les coordonnées du client, tu pourras utiliser RECHERCHEV() qui ira chercher les données dans la liste des clients (mon tuto explique comment faire). Pour récupérer la liste des produits, tu utilises le filtre avancé.
2) Pour les coordonnées du client, le simple fait de changer l'ID (paramètre 1 de la fonction RECHERCHEV() ) forcera le calcul et les bonnes données apparaîtront.
Pour automatiser le filtre avancé, comme tu dis n'être pas habitué au VBA, le "moins pire" sera de lancer l'enregistreur de macro puis d'adapter le code...
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------
Mes billets de blog sur DVP
Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
---------------
Je vais essayer mais c'est un peu chinois ce que tu m'explique
Je sais je ne suis vraiment pas doué![]()
Bonsoir
Je n'arrive pas à créer la macro. Je n'y comprend rien.
Sur base du fichier de : mercatog que j'ai adapté, qui pourrait m'aider à créer cette macro dans l'onglet impression ?
merci
Voici le fichier modifiié
Bonjour Gregk, le forum,
J'ai remanié ton fichier en ajoutant une feuille "imp_prod"
Si tu cliques sur le numéro de client dans la feuille "imp_client" (anciennement "impression") les deux feuilles se mettent à jour et je pense que tu peux construire ton publipostage à partir de là. Comme je ne manie pas le publipostage par VBA, il faut donc passer, pour le moment, client par client.
bon courage
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sursi votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
Bonjour casefayere,
Pour cette partie, on peut oublier le publipostage. Je ferai une impression client par client. (même si je dois faire une boucle par après sur le code du client)
Par contre ce qui est important, c'est que les deux feuilles "imp_client" &"imp_prod" soit sur la même page et regroupe les données du client et des produits.
Si tu reprends la feuille "impression" dans mon exemple, c'est le résultat auquel je voudrais arriver. L'objectif est d'imprimer une facture récapitulative produit + client.
Merci de ton aide.
Re,
je l'avais fait dans un premier temps mais j'ai séparé les feuilles pour la gestion de ton publipostage mais si il faut revenir en arrière, je vais reprendre le code.
Patience !!!
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sursi votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
Sauf erreur de ma part le publipostage n'est pas possible sur deux feuilles.
De plus, si je dois changer le client manuellement, autant que je l'imprime moi même car un publipostage ne sera pas possible vu qu'il n'y aura qu'un client à imprimer lol
Ci-joint fichier transformé (une feuille impression)
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sursi votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
Merci Dom,
Comment puis je modifier la mise en page ?
Comment puis je dire à excel dans quelle cellule je voudrais que le nom soit copié ? (Comme dans mon exemple)
quelle mise en page ? présentation comme ton dernier fichier ?Comment puis je modifier la mise en page ?
Quel nom ?, je ne comprends pasComment puis je dire à excel dans quelle cellule je voudrais que le nom soit copié ?![]()
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sursi votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
OuiEnvoyé par casefayere
Nom, prénom, adresse du client. (et sans intitulé)Envoyé par casefayere
Il s'agit d'un facture, donc doit figurer dessus que le detail des produits et le nom, prénom et l'adresse du client (si possible en haut à droite comme pour une lettre traditionnelle)
Regardes, présenté comme ton dernier fichier
si ça ne va pas, on change encore
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sursi votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
Une autre présentation
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sursi votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
Je pensais encore, si tu décides de descendre ou d'insérer des lignes avant "Nom produit", prends plutot ce code dans la feuille "impression"
et tes données iront au bon endroit sans changer le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Private Sub Worksheet_Change(ByVal Target As Range) Dim derlg As Integer, cell As Range, plage As Range, ld As Integer, données As Integer If Target.Address = "$A$2" Then derlg = Sheets("impression").Range("A" & Rows.Count).End(xlUp).Row + 1 données = Range("A1: A" & derlg).Find("Nom Produit").Row + 1'pourvu que ton entete aie toujours ce nom exact Range("A" & données, "F" & derlg).ClearContents derlg = données With Sheets("Liste des produits par client") ld = .Range("A" & .Rows.Count).End(xlUp).Row Set plage = .Range("a4:a" & ld) For Each cell In plage If cell = Range("A2") Then Range("A" & derlg, "F" & derlg) = .Range(cell(1, 8).Address, cell(1, 13).Address).Value derlg = derlg + 1 End If Next cell End With End If End Sub
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sursi votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
C'est super :-) Nous y somme arrivé. Il me reste juste à faire une mise en page correcte.
Par contre, j'ai essayé de remplacer le code de la feuille "impression" et ajouter une colonne avant "nom du produit" pour tester ton code mais cela ne fonctionne pas. Ou c'est moi qui ai mal fait...
Autre question, supposons que je doivent ajouter des colonnes soit dans la feuille "données clients" soit dans la feuille "liste de produits".
Pour que les colonnes ajoutées ne perturbent pas le code ou qu'elles soient bien copiées, qu'est ce que je devrais changer dans les macros vba ?
Merci
Bonjour Gregk, le forum,
Eh oui, mon dernier code prévoit que tu puisses ajouter des lignes or manque de chance ce sont des colonnes que tu ajoutes, pour prévoir cette éventualité il va falloir corriger ce code en fonction de 4 possibilités ajouter des lignes, supprimer des lignes, ajouter des colonnes, supprimer des colonnes.
Je veux bien m'occuper de cette partie.
Pour ton autre question :
, il va falloir que tu te mouilles un peu plus et comprendre le code de mercatog que tu changeras en fonction. Analyse ce code pas à pas, c'est une bonne formation, j'aurais pu te dire la même chose pour mon dernier code mais voilà, ma bonté me perdraAutre question, supposons que je doivent ajouter des colonnes soit dans la feuille "données clients" soit dans la feuille "liste de produits".
bonne journée, en attendant
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sursi votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
Essayes ce code dans la feuille impression
attention aux entetes utilisées, "ID CLIENT", "Nom Produit", "prix"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As String, chProd As Range, Dercol As Range Dim cell As Range, plage As Range, ld As Integer, données As Range Dim ident As Range Set ident = ActiveSheet.Cells.Find("ID CLIENT").Offset(1, 0) If Target.Address = ident.Address Then Set Dercol = ActiveSheet.Cells.Find("prix") c = Split(Cells(Dercol.Column).Address, "$")(1) Set Dercol = Range(c & Rows.Count).End(xlUp).Offset(1, 0) Set chProd = ActiveSheet.Cells.Find("Nom Produit").Offset(1, 0) Set données = Range(chProd.Address, Dercol.Address) données.ClearContents 'si la dernière colonne est toujours "prix" Set Dercol = ActiveSheet.Cells.Find("prix").Offset(1, 0) With Sheets("Liste des produits par client") ld = .Range("A" & .Rows.Count).End(xlUp).Row Set plage = .Range("a4:a" & ld) For Each cell In plage If cell = ident Then Range(chProd.Address, Dercol.Address) = .Range(cell(1, 8).Address, cell(1, 13).Address).Value Set chProd = chProd.Offset(1, 0) Set Dercol = Dercol.Offset(1, 0) End If Next cell End With End If End Sub
Cordialement,
Dom
_____________________________________________
Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
pensez à cliquer sursi votre problème l'est
Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager