Copier les données d'une feuille vers une autre dans un même fichier

Bonjour tout le monde,

Je vous présente ce que je voudrais réaliser. Dans mon fichier "Annabelle.xlsx", il y a une feuille (TCD) sur laquelle est détenue un TCD et sur l'autre feuille (CC), je souhaiterais y coller certaines données présentes dans le TCD.

Les intitulés devront être copiés dans cet ordre :

image

Je me suis donc placé dans un module en commençant par ce code :

Function FichOuvert(F As String) As Boolean
'myDearFriend! - www.mdf-xlpages. (il faut rajouter com mais je l'ai enlevé car je n'ai pas le droit de mettre de lien)
On Error Resume Next
FichOuvert = Not Workbooks(F) Is Nothing
End Function

Sub Annabelle()

'Private Sub ET_Click()
Dim dl As Integer, derlig As Integer
Dim date1 As Date
Dim BL, POOL, QUANTITE, RECEPTIONNAIRE, N_IFCO As Integer
Dim REFERENCE As String
Dim A As String, intitulé_B As String, C As String, D As String, E As String, F As String, G As String, L As String, M As String, N As String, O As String
Dim tablo, tabloR(), k%, i%



'affiche la date et l'heure à laquelle la personne a cliqué sur le bouton, la date est placée en L7. Il faut donc placer le bouton juste au dessus ou au dessous.

With [R14]
.Value = Now
.NumberFormat = "dd/mm/yyyy hh:mm"
End With


'copie les valeurs de "TCD"

With Sheets("TCD")
dl = .Range("C" & Rows.Count).End(xlUp).Row 'last line
'-------------------- ENTÊTES -- Not useful --------------------------------
A = .Range("J2")
B = .Range("B7")
C = .Range("B7")
D = .Range("D7")
E = .Range("K2")
F = .Range("C7")
G = .Range("J7")
H = .Range("D7")

'-------------------- INFORMATIONS DES ENTÊTES--------------------------

' date1 = .Range("A8")
BL = .Range("B8")
POOL = .Range("K3")
REFERENCE = .Range("C8")
QUANTITE = .Range("J8")
RECEPTIONNAIRE = .Range("D8")
' N_IFCO = .Range("L3")


'-------------------- BDD---------------------------------------------

tablo = .Range("A11:G" & dl)
k = 0

'colle les valeurs dans CC

For i = 1 To UBound(tablo, 1) Step 4
If tablo(i, 3) <> "" Then
ReDim Preserve tabloR(1 To 10, 1 To k + 2)
tabloR(1, 1 + k) = DateValue(date1)
tabloR(2, 1 + k) = DateValue(date1)
tabloR(3, 1 + k) = BL
tabloR(4, 1 + k) = POOL
tabloR(5, 1 + k) = REFERENCE
tabloR(6, 1 + k) = QUANTITE
tabloR(7, 1 + k) = RECEPTIONNAIRE
tabloR(8, 1 + k) = N_IFCO
k = 1 + k
'colle les intitulés des valeurs
tabloR(1, 1) = A
tabloR(2, 1) = B
tabloR(3, 1) = C
tabloR(4, 1) = D
tabloR(5, 1) = E
tabloR(6, 1) = F
tabloR(7, 1) = G
tabloR(8, 1) = H



End If



Next i

If FichOuvert("Bouton Annabelle.xlsx") Then
'Workbooks("ecart-type.xlsx").Sheets("CC").Range("A2").CurrentRegion.Offset(1, 0).ClearContents

derlig = Workbooks("Bouton Annabelle.xlsx").Sheets("CC").Range("b" & Rows.Count).End(xlUp).Row + 1



On Error Resume Next
Workbooks("Bouton Annabelle.xlsx").Sheets("CC").Range("A" & derlig).Resize(UBound(tabloR, 2), 15) = Application.Transpose(tabloR)
Erase tablo: Erase tabloR

End If
End With

ActiveWindow.SmallScroll Down:=-33
ActiveWorkbook.Save
End Sub

Ce code ne fonctionne pas, auriez-vous des idées de modification?

Bonjour

Quel est l'interet de passer par un TCD si l'objectif final est d'extraire des données d'une base en fonction d'un ou plusieurs cristaires ? J'imagine que le TCD est issue d'une base de données ? Si oui, cette dernière n'est pas présente dans le fichier que tu as fournis.

EDIT : je vois que ton TCD est issu d'un autre fichier se trouvant sur le réseau de ton entreprise. Pour optimiser et aussi pour avoir un code concis et optimisé pourrais tu fournir un fichier avec une trame similaire afin que je puisse me baser dessus ?

Bonjour,

L'intérêt est de compiler les données car il y a des doublons.

En effet ce TCD est issu d'une base de données mais je n'ai pas l'autorisation de transmettre le fichier dans lequel elle se trouve.

Je vous transmets un fichier similaire, dites-moi si cela vous convient.

Merci d'avance.

Cette trame me semble parfaite ! avant de poursuivre j'ai besoin d'être assuré que les données se trouvent bien dans les mêmes colonnes que dans le fichier que tu viens de partager. D'après la capture d'écran de ton premier poste les données ne semblent pas les mêmes que dans le fichier que tu as joint (je ne retrouve pas les mêmes colonnes) ...

Si c'est le cas il faut maintenant savoir quelles sont les paramètres d'extraction :)

EDIT : A non j'ai rien dit , je reviens vers toi au plus vite avec une solution

Donc maintenant la question est : qu'est ce que tu veux faire avec ces données ?

image

En effet l'intitulé des colonnes n'est pas le même dans le TCD que dans ma capture d'écran mais il faut que l'intitulé renvoyait vers la feuille soit identique à celui de ma capture d'écran.

C'est un fichier qui sera ensuite envoyé à un logiciel qui corrige et analyse automatiquement les données, voilà pourquoi il faut que la mise en forme soit identique.

Ok pour la mise en forme, ma question est de savoir quelles sont les paramètres d'extraction ? Quels sont les filtres à effectuer, faut-il ignorer les doublons, sur quel colonne faut-il ne pas prendre en compte les doublons, etc.

C'est normal qu'il y a deux colonnes "DATE DE LIVRAISON" ?

Voici ce qu'il faut extraire depuis la feuille "TCD" dans l'ordre :

1. J2 en A1 //// J3 de A2:A(dernière valeur)

2. I7 en B1 //// I8:I(dernière valeur) de B2:B(dernière valeur)

3. IDEM que 2 mais en C1., je sais que c'est inutile mais c'est le format demandé car des fois les dates ne sont pas les mêmes.

4. B7 en D1 ///// B8:(dernière ligne) de D2:(dernière ligne) la colonne B est cachée dans ce screen.

5. K2 en E1 ///// K3 de E2 à dernière ligne

6. C7 en F1 ///// C8:(dernière ligne) de F2:Dernière ligne

7. J7 en G1 //// J8:dernière ligne de G2:dernière ligne

8. D7 en H1 //// D8:dernière ligne de H2:dernière ligne

9. L2 en I1 ///// L3 de I2:dernière ligne

Attention : il faut des valeurs dans toutes les cases, il doit y avoir une méthode VBA similaire à la manip CTRL=+T / cellules vides / CTRL flèche du haut / Entrée utilisable dans Excel.

image

Je te prie de bien vouloir m'excuser mais je ne comprend rien aux explications Pourrais-tu reformuler ? Et pour être sur que nous sommes bien sur la même longueur d'onde, ma question est : quels sont les critères qui font que tu vas extraire ou non de la base de données une ligne ? (pour la mise en forme on verra à la fin). Quand je parle de base de données je parle du fichier où se trouve les données brutes (chez toi, ta base de données se trouve en colonne A:K de la feuille Source du fichier Suivi Bac Ifco FICHIER DE CONSTRUCTION.xlsx sur le réseau \\FSHER002\Courrier\ANNABELLE\CARREFOUR\IFCO\). Oublie le TCD nous n'allons pas en utiliser mais tout faire via VBA.

Ma demande est-elle suffisamment clair ?

Très bien. La feuille "Source" est une trame similaire comme vous me l'avez demandé. Ce ne sont pas les bonnes valeurs à copier. Les bonnes valeurs à copier sont celles présentes dans le TCD. C'est mon maître de stage qui me dit de faire comme cela mais je comprends bien votre idée qui serait de travailler directement depuis la base de données afin de ne pas créer un TCD qui n'apporte rien pour le code.

Bon, je vois... Alors pour expliquer à ton maitre de stage (et avec tout mon respect), l'interet de proposer un code VBA "tout en un" et de ne pas passer par un TCD est d'avoir :

  1. Une rapidité d'execution (programme exécuté en quelques secondes)
  2. Très peu de risque d'erreures humaines.
  3. Facilité de configuration.
  4. Et surtout de travailler avec un fichier source en toute sécurité, aucuns risques de compromettre les données de base (travail sur les fichier en lecture seul).

Je te propose donc de suivre m'à démarche jusqu'au bout, si vraiment ça ne convient pas je reviendrais sur ma décision. Fait moi confiance, ce genre d'extraction en VBA je ne les comptes même plus tellement j'en ai fait pour mon entreprise ou d'autres personnes sur le forum .

Du coup peux tu me fournir une trame identiques à celle d'origine et m'expliquer quels sont les cristaires d'extraction ? Bien évidement tu devras anonymiser les données, en vrai il me faut juste une ligne pour me donner l'exemple (où tu remplace les données par des "xxx").

Ou alors tu as juste à me dire : la base de données se trouve entre les colonnes A et K, je ne veux extraire que les lignes qui contiennent "S" dans la colonne B et dont le code article est égale à "110180" dans la colonne J, etc...

Je lui demande le fichier Source et je vous transmets cela.

Edit, regarde mon message précédent.

Bonjour,

Pourriez-vous me transmettre votre adresse mail afin que je vous transmette le fichier complet ?

Ne t'embéte pas à me transférer tout un fichier complet. Partage directement ici le fichier avec quelques lignes anonymisées pour me donner un exemple Sinon tu peux toujours me l'envoyer en privé via le forum

C'est bon je vous l'ai envoyé.

Ok bien reçu, j'ai la feuille source sous les yeux, maintenant j'ai besoin de savoir quels sont les critères d'extraction ? Ou alors il s'agit que d'une remise en forme des données de la feuilles sources dans la feuille Construction ?

Il faut qu'en cliquant sur un bouton placé dans la feuille "source", les données de la feuille "source" qui nous intéressent soient copiées/collées dans la feuille "construction" avec le même format déjà présent dans la feuille "construction".

Ok ça marche, bon, avant de voir ta réponse jamais imaginé que la feuille source se trouvais dans un fichier différents que celui d'où ton TCD était fait. Je suis donc partit de ce principe...

Le fichier en PJ fonctionne comme ça :

  1. Il va chercher sur le réseau le fichier où se trouve la feuille source
  2. Si le fichier n'est pas ouvert le programme se charge de le faire (il ouvre le fichier en lecture seul).(Possibilité de mettre une sécurité pour l'utilisateur afin de le forcer à enregistrer et fermer le classeur source avant une extraction de données).
  3. Il identifie la plage de données source et les "transforment" en tableau virtuel
  4. Un deuxième tableau virtuel est créer pour la restructuration des données
  5. Les données sont restructurées (remise en forme des dates et recherche automatique du transcodage client, etc)
  6. Les données restructurées sont importées dans ce classeur sur la feuille IMPORT (avant chaque execution du programme d'importation cette feuille est effacée de toutes ses données pour éviter le mélanges d'information issue d'extractions différentes)
  7. Si le programme à lui même ouvert le fichier pour récupérer les données il le fermera aussi

Tu l'auras surement compris tu n'às plus besoin des colonnes H, I, J et K sur la feuille source.

Si tu veux vraiment que l'extraction se fasse sur le même fichier pas de soucis je te ferais l'adaptation

Si tu as un message d'erreur te disant qu'il est impossible d'ouvrir le fichier assure toi que la variable NomClasseur et Localisation sont correctement paramétrées dans le code VBA.

31extr.xlsm (37.42 Ko)
Rechercher des sujets similaires à "copier donnees feuille meme fichier"