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

XL 2010 extraire des données d'une feuille pour les envoyer sur une autre

cgpa

XLDnaute Occasionnel
Bonjour,
Je vous assure avoir cherché depuis ce matin une solution dans les forums et sur "google est mon ami", mais je ne parviens pas à trouver la solution.
J'aimerais récupérer sur une feuille 'facture' toutes les lignes d'une feuille 'vente' ayant la même occurence (le même numéro de commande en colonne G). C'est probablement une broutille pour celui ou celle qui s'y connait en vba, mais je débute.
J'ai allégé le fichier au maximum en supprimant toutes les macros et feuilles inutiles à la demande, pour que le fichier et la problématique soient claires.
Je pensais à un combobox ou listbox mais je n'y parviens pas car la clé primaire de la feuille 'vente' n'est pas en première colonne et le fichier est tellement complexe dans son ensemble qu'il ne m'est pas possible de modifier l'ordre des colonnes.
Le fichier joint est très allégé pour identifier le problème.
Pouvez-vous m'aider?
Merci d'avance pour votre collaboration.
 

Pièces jointes

  • test envoi données.xlsm
    18.2 KB · Affichages: 20
Solution
Bonjour @cgpa ,

Le fichier en retour avec :
  • la réécriture de la Sub mise_en_forme_tableau (module 2)
  • les explications demandées pour certaines instructions (module de la feuille "Sortie")

N'hésitez pas à demander des informations supplémentaires en cas de besoin...

cgpa

XLDnaute Occasionnel
bonjour Mapomme,

Un tout grand merci, cela fonctionne à merveille. J'ai passé plusieurs heures à chercher et n'aurais pas pu trouver par moi-même. Je vais pouvoir bien avancer sur mon fichier.

Je tente de comprendre le code. J'ai l'habitude de noter une explication après chaque ligne si je devais y revenir. Serais-ce abuser de vous demander si vous accepteriez de m'expliquer les cinq lignes de code où il y a un point d'interrogation en mauve?

Encore merci.
Excellente journée!

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim der&, ID, ligID

der = Application.CountA(Columns("a:a")) '?
With Sheets("facture") ' sur la feuille facture
.Range("a11:f" & Rows.Count).Resize(der).ClearContents 'nettoie les cellules a11 à colonne f (données du tableau)
.Range("f1:f3,g1,b8,g1,g6").ClearContents 'nettoie le contenu de ces cellules (coordonnées client)
End With

If Target <> "" And Target.Column = Range("g1").Column And Target.Row > 1 And Target.Row <= der Then 'détermine la colonne G de la feuille ventes comme cible
Range("a1:i" & der).AutoFilter Field:=7, Criteria1:=Target.Value '?
ID = Me.Cells(Rows.Count, "h").End(xlUp).Value '?
With Sheets("facture") 'sur la feuille facture
Me.Range("a1:i" & der).Resize(, 6).SpecialCells(xlCellTypeVisible).Copy .Range("a10") '?
If Me.FilterMode Then Me.ShowAllData
On Error Resume Next: ligID = Application.Match(ID, Sheets("clients").Columns(1), 0): On Error GoTo 0 '?
If Not IsError(ligID) Then
.Range("f1") = Sheets("clients").Cells(ligID, 2) 'implémente le nom en F1
.Range("g1") = Sheets("clients").Cells(ligID, 3) 'implémente le prénom en G1
.Range("f2") = Sheets("clients").Cells(ligID, 4) 'implémente l'adresse en F2
.Range("f3") = Sheets("clients").Cells(ligID, 5) & " " & Sheets("clients").Cells(ligID, 6) 'implémente cp + espace + ville en F3
End If
.Range("g6") = Date 'implémente la date en G6
.Range("b8") = Target.Value 'implémente la cible (le numéro de vente) en B8
Application.Goto .Range("a1"), True 'se place en A1 en fin de macro
End With
End If
End Sub
 

cgpa

XLDnaute Occasionnel
Bonjour Cgpa, Mapomme, le Forum,

Une rapide proposition via Power Query à tester !

Cordialement.

JFL
bonsoir JFL_Excel,
Merci pour votre proposition. J'ai ouvert avec Excel 2010 et Excel 365, mais je ne vois pas comment cela fonctionne. Je ne connais pas Power Query et il semblerait que je n'aie pas cette fonction sur mon pc. Merci quand même.
 

JFL_XLD

XLDnaute Junior
Bonsoir de nouveau....

Pour utiliser Power Query avec Excel 2010, il faut intégrer un complément (il existe des tutoriels). Avec Excel 365 tout est déjà à bord !

Dans ma proposition, après saisie de la vente en B9, cliquer (version Excel 365) sur le menu "Données" puis "Actualiser tout".

Cordialement.

JF
 

cgpa

XLDnaute Occasionnel
bonjour JFL,
je viens de télécharger PQ sur mon pc. C'est génial cette fonction, cela marche parfaitement. Où aller dans le menu pour donner les consignes afin de pouvoir transposer sur un autre fichier? Encore merci.
 

cgpa

XLDnaute Occasionnel
Bonjour @cgpa

Abusez, abusez !

Je vous ferez un retour ce soir...

Bonne journée
Bonjour Mapomme,

J'ai utilisé le code dans mon fichier de base, mais la partie qui renvoie les informations relatives aux coordonnées du client ne fonctionne pas sur ce fichier.
J'ai identifié le problème: le fichier sur lequel vous avez travaillé a le code client en colonne 1 (feuille client) et colonne H (feuille ventes). Sur mon fichier complet, le code client est en colonne 2 (feuille client) et colonne J (ventes). J'ai fait des essais en modifiant la ligne

ID = Me.Cells(Rows.Count, "j").End(xlUp).Value ' (j'ai remplacé "h" par "j")

et la ligne

On Error Resume Next: ligID = Application.Match(ID, Sheets("clients").Columns(1), 0): On Error GoTo 0

mais je n'y parviens pas.
Pouvez-vous m'expliquer où je me trompe et surtout comment je dois adapter le code?
Merci d'avance pour votre aide.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour ,

Renvoyez donc un fichier reflétant l'organisation réelle de vos données.
J'adapterai et vous fournirai aussi les explications que vous avez demandées.
 

JFL_XLD

XLDnaute Junior
bonjour JFL,
je viens de télécharger PQ sur mon pc. C'est génial cette fonction, cela marche parfaitement. Où aller dans le menu pour donner les consignes afin de pouvoir transposer sur un autre fichier? Encore merci.
Bonjour à vous !

Pour ce qui est de l'intérêt de Power Query, je confirme !
Je vous invite à prendre connaissance des nombreux tutoriels sur YouTube. Ils vous donneront les bases nécessaires avant que vous ne preniez votre envol....

Cordialement.

JFL
 

cgpa

XLDnaute Occasionnel
Bonjour ,

Renvoyez donc un fichier reflétant l'organisation réelle de vos données.
J'adapterai et vous fournirai aussi les explications que vous avez demandées.
bonsoir Mapomme,
merci beaucoup pour votre aide.
Voici en pj le fichier.

Le problème se trouve dans le code de la feuille 'sortie". Lorsque je double clic sur le numéro de la vente (colonne I), le code ne renvoie que la date et le numéro de la vente, pas le contenu des lignes concernées. J'ai décris le problème en jaune sur la feuille 'facture'.

Je profite du présent pour vous demander de jeter un œil sur le code pour la feuille 'vente". Sur cette feuille, en a10, une liste déroulante. Elle bug souvent et je ne comprends pas pourquoi elle accepte certains articles de la liste et bug pour d'autres. Pour le principe, une fois le tableau de cette feuille complété, je sélectionne le client dans le menu déroulant puis valide en cliquant sur "valider la vente". Les données sont renvoyées sur la feuille "sortie".
Un grand merci pour votre collaboration.
bonne soirée,
 

Pièces jointes

  • inventaire horticulture v1.5 essai ajout facture allégé.xlsm
    113 KB · Affichages: 2

cgpa

XLDnaute Occasionnel
Bonjour ,

Renvoyez donc un fichier reflétant l'organisation réelle de vos données.
J'adapterai et vous fournirai aussi les explications que vous avez demandées.
Bonjour MaPomme,

J'ai enfin trouvé une solution au plus gros problème, après beaucoup d'essais. C'était une incompréhension du code.

Il me reste 2 problèmes: pouvez-vous m'aider?

Problème 1: sur la feuille "vente", j'ai un message d'erreur pour la sélection dans une liste déroulante pour presque tous les articles, mais pas tous!? Je n'y comprends rien. Ce problème est très conséquent.

Problème 2, nettement moins embêtant: lors de l'envoi des données de la feuille "sortie" vers la feuille "facture" avec le code que vous avez créé (j'ai pu adapter le code à ma situation), les données sont bien exportées mais ne prennent pas la mis en forme du tableau de destination, elles l'écrasent. Y a-t-il moyen d'adapter cela? Y a-t-il également moyen de renvoyer à la ligne le contenu des cellules en colonne C?

Je joins le fichier.

Un tout grand merci pour votre réponse.
Excellente journée,
 

Pièces jointes

  • inventaire horticulture v1.6 allégé.xlsm
    95.3 KB · Affichages: 2

cgpa

XLDnaute Occasionnel

Bonjour MaPomme,

Depuis mon dernier post, j'ai résolu le premier problème en utilisant une colonne de chiffres au lieu de texte et il n'y a plus de bug.
Par contre, pour la mise en forme des données exportées sur le tableau de facture, j'ai utilisé un appel de macro (call mise_en_forme_tableau()). Cela fonctionne, mais ma macro n'est pas très logique: elle copie la mise en forme de la dernière ligne du tableau et la reproduit sur l'ensemble du tableau. Mais cela ne fonctionne pas s'il y a plus de lignes à importer qu'il y en a sur le tableau.
D'où ma question: malgré mes recherches, je ne trouve pas de code pour:
- réduire le tableau sur la feuille facture au strict nombre de lignes importées depuis la feuille "sorties" (tout en gardant le texte sous le tableau de la feuille "facture" et la dernière ligne des totaux)
- garder la mise en forme du tableau avec une macro proprement écrite.

Avez-vous la possibilité de m'aider à ce sujet?

Merci beaucoup.

Excellente journée!
 

Pièces jointes

  • inventaire horticulture v1.7 allégé.xlsm
    78.7 KB · Affichages: 5

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…