Transfert pour alimenter base de données

Bonjour,

Je reviens sur un sujet que j'ai déjà traité avec vous, mais cela fait trop longtemps que je m'échine sur un nouveau sujet.

En copiant une plage de donner je copie également les lignes vide qui perturbe le tableau final en ce qui concerne la première cellule vide au finale, je me retrouve avec des ligne décalé, je cherche la solution pour, soit:

  • Copier uniquement les lignes non vide dans la plage de donnée ("B2:O31") pour aller vers le tableau final (Capture 2)
  • Ou bien supprimer chaque ligne vide après le collage des données dans le tableau final (Capture 5)
En Capture 3, la macro employé

L'idéal étant de tout traiter dans la même macro, ce que j'ai réussi pour le moment........... mais ............

Ainsi que le fichier sur lequel je travaille

capture2 capture5 capture4
18reception.xlsm (232.06 Ko)

Merci d'avance

Bonjour,

Il serait peut-être utile de préciser (tant pour nous que dans ton code !) quelle feuille sert de source pour tes copies ? La feuille "Transfert" ou la "Feuil1"

Bonjour

Multipost !

La feuille source est l'onglet "Commande"

  • Je fais des copier coller vers l'onglet "Transfert" pour les derniers traitements (par exemple: mettre un format de date, extraire le code fournisseur, etc....
  • Je fais un copier coller vers l'onglet "Feuil1" afin de n'avoir que des valeurs sans fonction dans les cellules
  • Enfin, un dernier Copier Coller vers l'onglet "Récap Commande" pour alimenter ma base de données

Comme je copie une plage (B2:O31) dans l'onglet "Feuil1" Il me faut supprimer les lignes vide après le Coller pour pouvoir continuer à alimenter ma base de données.

Je viens de trouver une macro pour ça, mais elle fonctionne d'une façon aléatoire sur la page "Récap Commande"

Option Explicit

Sub test()

Dim i As Long

For i = Range("B65536").End(xlUp).Row To 10 Step -1

If IsEmpty(Cells(i, 5).Value) Then Rows(i).Delete

Next i

End Sub

Re-bonjour,

Et pas de réaction par rapport à

Multipost !

... j'espère qu'on n'est pas plusieurs, à différents endroits, à essayer de s'y retrouver !

Maintenant qu'on sait de quelles feuilles il s'agit, voilà que le code que tu as joint en image, ne correspond pas exactement à celui qui figure dans le Module3 (là aussi, il faut s'y retrouver dans tous tes modules ! Une prochaine fois, ne poste que les feuilles nécessaires et les parties de code utiles)

Bref, si tu écris:

derligne& = Feuil8.Cells(Rows.Count, 6).End(xlUp).Row

la variable nommée derligne (de type Long) prendra comme valeur le n° de la dernière ligne non-vide en colonne F de ta feuille "Transfert" (soit 4, dans ton exemple). Puisque visiblement les données sont encodées dans cette colonne, on ne risque pas d'y trouver des cellules contenant des chaînes de texte vides (les "" de tes formules).

À la ligne suivante, la copie peut donc se faire avec

Feuil8.Range("B2:O" & derligne).Copy

Hi,

Désolé, mais je n'est pas compris "Multi post !"............. qu'est ce que c'est!!!

Pour ce qui est le côté un peux fouillis, j'en suis désolé, mais c'est le résultat d'un débutant en VBA qui a essayé de faire seul en cherchant des solutions qui me semble logique, c'est en forgeant que l'on devient forgeron.

Concernant les solutions que tu me donne, j'avoue que j'ai du mal à comprendre et je suis un peux perdu, mon niveau de VBA ne me permet pas de bien saisir..

Re,

Multipost est un message posté sur plusieurs forums (ou sur un même forum, à différents moments, voire même sous différents pseudos).

Dans ton cas, on retrouve par exemple ce message-ci, dans lequel 78chris est intervenue ... sans que tu donnes la moindre suite (et à regarder ton fichier, tu sembles n'avoir tenu aucun compte de ses remarques: dans ta feuille "récap", un tableau de plus de 55.000 lignes, dont la plupart sont vides, des MFC dans tous les sens)

Les deux instructions que je suggérais viennent remplacer les deux premières dans la partie "transfert final" de ton Module3. Elles permettent de ne copier, dans la feuille "Transfert" que les x lignes (au lieu de 30) réellement utilisées. Reste à savoir où elles doivent être collées ensuite

Bonjour,

Désolé de répondre si tard, mais décalage horaire oblige................

D"abord je vous remercie tous pour votre travaille et vos conseils, surtout auprès de personnes de faible niveau comme moi.. la preuve, c'est que je crains de n'avoir pas envoyé le bon fichier (ce n'était pas celui sur lequel je travaillais).

Ce fichier "Commande" est pour moi le condensé de ce que j'ai appris et développé avec vous pour les autres parties de mon projet. J'ai essayé de travailler seul en utilisant mes expériences.

Mon premier blocage est l'intégration des lignes dans le tableau en raison du copier coller de 30 lignes qui sont parfois vide et provoque des décalage dans le tableau. Donc pour moi je vois deux solution... là encore c'est dans les limites de mes connaissances et compétences...

1/ Je supprime les lignes vides dans le tableau après intégration des lignes (onglet "Récap Commande")

2/ Je récupère dans l'onglet "Feuil1" uniquement les lignes qui sont renseignées

Cela étant dit, je voudrais rassurer et remercier 78chris, concernant ses conseils, que j'ai essayé de suivre dans les limites de mes moyens

- L'onglet "Feuil1" a été créé pour nettoyer les cellules de toute formules et MFC avant l'intégration final dans le tableau. Où j'ai d'ailleurs rencontré le premier problème d'intégration puisque le transfert ce fait sous la ligne créé par le tableau....

Concernant les solutions de U.milité, je voudrais apporter plus de précision.

Mon objectif est que l'onglet "Feuil1" alimente le tableau "Récap Commande"

A suivre une image de ma macro et en jaune la ligne concernée

Ci-joint également un fichier allégé qui concentre le projet en objet. Ce fichier étant pour moi un "étalon" pour revoir la lourdeur de ce que j'ai fais avant

Encore merci pour votre patience et merci de votre indulgence devant parfois le manque de clarté, qui est aussi l'apanage de l'apprentissage

capture
2test-cg.xlsm (234.84 Ko)

Oups......

Une nouvelle fois pas le bon fichier......... Mais je progresse, je vérifie........

6test-cg-v1.xlsm (123.77 Ko)

Bonjour Christophe,

Ce que j'essaie de te faire comprendre, c'est que tu es occupé à construire une usine à gaz: au départ de ta feuille "Commande", tu recopies un bloc d'une trentaine de lignes, dans ta feuille "Transfert". Avec des formules, tu garnis certaines colonnes (toujours sur 30 lignes), pour faire ensuite du "nettoyage" et en définitive, ne recopier que 3 lignes dans la feuille "Récap Commande".

Ce que je suggère c'est de ne traiter dès le départ, que les lignes concernées (3 ou 2, ou 10, etc.) en fonction du nombre de lignes dans la commande.

Pour autant que j'aie compris tes manipulations, on peut se passer des feuilles "Transfert" et "Feuil1".

Je suis en déplacement une partie de la journée, mais dis-nous déjà si j'ai bien compris et si une procédure "allégée" t'intéresse ?

Hi,

Oui bien sûr qu'une structure allégée m'intéresse.........

Mon but est de remplir un bon de Commande en Français et en Anglais ainsi que dans différentes monnaie. J'ai la même chose pour la réception, la Packing List et la facture............ Pour le moment ça marche.

Reste qu'il me faut une base de donnée pour gérer les différentes étapes. Je voudrais dupliquer cela sur les modules facture et réception.

Je souhaite donc récupérer les différentes infos de l'onglet "Commande" (la macro 3) pour alimenter l'onglet "Récap Commande" et mettre à zéro l'onglet "Commande" pour éviter les erreurs lors de la prochaine saisie. C'est là que débute l'usine à Gaz................ car je ne sais pas comment coller directement vers l'onglet "Récap Commande" sans une mise en forme préalable dégagée de toute pollution. Concernant les 30 lignes, c'est le nombre de ligne maximum que contient le Bon De Commande et comme je n'arrivais pas à extraire les ligne que j'avais besoins, je prenais l'ensemble....

Je pense que tu à bien compris ma problématique et ne fait qu'essayer de la préciser

Dans l'attente,

Bonne journée et prudence dans les déplacements

Hi,

J'ai continué à travailler ce soir et j'ai trouvé une macro qui fonctionne:

- J'ai supprimé l'onglet "Feuil1", je vais donc directement de l'onglet "Transfert" au tableau "Récap Commande" ..... Pas peux fière

Mais cela à l'air très lourd au chargement ............... Après avoir supprimé 1 000 000 de lignes sur l'onglet je suis repassé de 9,33 MO à 123ko...............????

capture1
7test-cg-v2.xlsm (123.12 Ko)

Bonsoir,

Un essai ... Tu veux bien compléter un bon de commande, puis exécuter la procédure suivante, pour voir si le résultat est correct en "Récap Commande" ?

Pas vu où tu déterminais la devise à inscrire en colonne J ??

La feuille Transfert ne sert plus non plus.

Sub ajoutCommande()
Set com = Sheets("Commande")
nbCom = Application.CountA(com.[B18:B47]) 'nbre cellules non-vides dans la plage
With Sheets("Récap Commande")
    nouvLig = .ListObjects(1).ListRows.Count + 2
    .Cells(nouvLig, 6).Resize(nbCom, 1).Value = com.Range("B18").Resize(nbCom, 1).Value 
    'copier les x lignes (col B) et coller en colonne F
    .Cells(nouvLig, 8).Resize(nbCom, 2).Value = com.Range("C18").Resize(nbCom, 2).Value 
    'copier les x lignes (col C,D) et coller en colonne H
    .Cells(nouvLig, 3).Resize(nbCom, 1).Value = com.Range("C13").Value 'copier n° de commande
    .Cells(nouvLig, 2).Resize(nbCom, 1).Value = Left(com.Range("C13"), 2) 'copier n° de commande
    .Cells(nouvLig, 4).Resize(nbCom, 1).Value = com.Range("H3").Value 'copier date commande
    .Cells(nouvLig, 5).Resize(nbCom, 1).Value = com.Range("I13").Value 'copier code fournisseur
    For i = 0 To nbCom - 1
        .Cells(nouvLig + i, 7).Value = .Cells(nouvLig + i, 6).Value & " " & .Cells(nouvLig + i, 5)
    Next i
    com.Range("E18").Resize(nbCom, 5).Copy  'copier les x lignes (col E,F,G,H,I) et coller en colonne K
    .Cells(nouvLig, 11).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    Application.CutCopyMode = False
End With
End Sub

bonjour à vous

une gestion de commandes sous Excel, c'est forcément simple et sans VBA

une feuille en colonnes simples : la liste des lignes commandées (ton Récap je pense) Cette liste va s"allonger et atteindre 10 000 lignes en 1 an ou même plus)

ensuite une feuille avec un TCD qui "extrait" les lignes de la commande n° 12

avec des RECHERCHEV tu affiches le fournisseur et ses coordonnées (ta fiche PURCHASE ORDER, sans O)

et un TCD qui te fera des statistiques mensuelles, annuelles, par familles, réf, fournisseur...

tu peux gérer facilement les retards, les indicateurs

sans VBA et sans formules non plus (sauf + et *TVA)

Bonjour à tous

Merci jmd pour ton conseils, j'avoue y avoir pensé (au vu de mon niveau VBA), mais comme je part toujours du même document que j'efface après chaque création, je ne comprenais pas comment toucher la première cellule vide sur mon tableau récap. mais promis j'essaierais de faire le tour des possibilités avant.

Merci U. Milité pour cette solution, hyper frustrant quand on a cherché pendant plusieurs jours et que c'est exactement ce que je souhaitais, j'ai rajouté l'effacement des cases sur "Commande" pour pouvoir en enregistrer une suivante sans risque d'erreur.

Reste un point à traiter:

- Dans la colonne "Quantité Cde", dans le cadre d'une Unité d'achat, "U", la quantité en cde (25) apparait sans décimale et lors du transfert vers "Récap Commande" le chiffre s'affiche en décimale (25,00). N'y voit pas une solution de facilité à revenir vers toi, mais là je planche........... Lol et question confort de lecture, ça me parait important.

capture capture1

Bonsoir,

@jmd: j'entends bien ce que tu dis et je serais même assez d'accord sur le principe ... mais bon c'est le projet de Christophe; à lui de voir, maintenant.

@Christophe: je ne comprends déjà pas comment, dans ta feuille "Commande", en G19, tu arrives à afficher '5', alors que le format de la cellule est: nombre, avec 3 décimales et séparateur de milliers

Dans un tableau tel que celui en feuille "Récap commandes", je ne suis pas persuadé que "jouer" avec des formats différents dans une même colonne soit une riche idée (idem avec tes formats monétaires qui varient). Je serais prudent dans ce cas de figure (souviens-toi de la remarque de 78chris sur les MFC qui partaient dans tous les sens!) L'idée d'un tableau structuré est justement la cohérence, pour tous les enregistrements, des formules, formats, MFC, validations de données, etc.

Bonjour,

Pris bonne note, merci pour tout

Rechercher des sujets similaires à "transfert alimenter base donnees"