Code VBA pour transfert de données entre deux classeurs

Fermé
KevL - Modifié par KevL le 10/11/2016 à 14:28
 KevL - 14 nov. 2016 à 12:39
Bonjour à tous,

Dans un premier temps, je souhaite remercier d'avance celles et ceux qui apporteront un soutien concernant ma demande.

Je vous expose donc les faits ;

Je dispose de deux tableurs Excel
- Le premier (la "Source") comporte une liste de bateaux passant au port. Les arrivées, périodes de maintien et départ du port sont consignés par date (format dd/mm/yyyy).
A chaque bateau correspond un formulaire, qu'il faut envoyer moins de 21 jours après le départ du bateau
Document type ici : https://e-nautia.com/share/36054-7cxxtl7p

- Le deuxième tableur ("Cible") est un récapitulatif à échelle annuelle des activités hebdomadaires.
Ce document doit être approvisionné à partir des données du premier tableur, incluant le nombre de bateaux arrivés, ceux en maintien, et le nombre de départs du port.
Les indices temporels sont les lignes, correspondant aux semaines de l'année, de 1 à 52.
Document type ici : https://e-nautia.com/share/36053-xx1mutcm

Mon objectif final est de pouvoir, en appuyant sur un bouton du document source, sélectionner l'année et la semaine souhaitée, pour compléter le document cible de manière automatisée.

Pour cela, ma fonction doit se décomposer en trois étapes :
=> adaptation des données temporelles (savoir que telle date en source correspond à la semaine XX en cible) de la source
=> déterminer le nombre de navires arrivés pour cette semaine, ceux étant en maintien au port, ceux ayant effectué leur départ et reporter le cumul des formulaires en retard (s'il y en a) sur le document cible
=> générer une copie du document cible comprenant les anciennes données (semaines remplies auparavant) ainsi que les nouvelles.

J'ai une faible expérience de codage en VBA, qui en toute honnêteté se limite davantage à du Système D qu'a des structures fiables et optimisées.
Je n'ai jamais eu, jusqu'ici, à effectuer de transfert entre deux classeurs. Je vous sollicite donc pour m'accompagner dans la création de cette fonction.
(Entendons-nous bien, je ne cherche pas à ce que l'on me déroule un code et que je copie/colle de manière bête et méchante, je tiens à comprendre ce que je fais, étape par étape)

En vous remerciant de l'attention portée à ma requête, et de votre aimable compréhension,
Bonne journée
A voir également:

1 réponse

Bonjour, une petite MAJ au cas où quelqu'un vienne se pencher sur le problème;

J'ai récupéré un code venant d'une autre question sur ce site, je m'en sers de base pour pouvoir transférer les données d'un excel à l'autre.


Sub XYZ()

Dim Wbc As workbook
Dim Ws As Worksheet
Dim Wc As Worksheet

Dim Lignemod As Long
Dim Ligneajout As Range
Dim DerLg As String
Dim Maplage As Range

'Feuille source :
Set Ws = ActiveSheet

'dernière ligne possédant du contenu dans le colonne "X" (ici E)
Derlg = Ws.Range("E" & Rows.Count).End(xlup).Row

If DerLg > 2 Then
Set Maplage = Ws.Range("E2:E" & DerLg)

Set Wbc = Workbooks.open(ThisWorkbook.Path & "\1.xlsm")
Set Wc = Wbc.Worksheets("Feuil1")

Exit Sub
End If

For Each Cel In Myplage

If Cel <> "" Then
LigneMode = Cel.Row
LigneAjout = Wc.Range("A" & Wc.Rows.Count).End(xlup).Row + 1

WC. Range("A" & Ligneajout) = Ws. Range("E" & Lignemod)

End If
Next

Wbc.Close Savechanges:=True

Set Maplage = Nothing
Set Wc = Nothing
Set Ws = Nothing
Set Wbc = Nothing

End Sub



Désolé pour la syntaxe de code, même sans connaître je me doute que ce n'est pas top.
J'ai déjà fait quelques modifications depuis le script original, mais je patauge quand même.

J'ai mis la ligne d'erreur en gras dans le code. Il faut définir Cel, mais je ne sais pas comment faire pour que cela coïncide avec mon application.
Tout ce qui se trouve à la suite, en Italique n'a pas encore été testé.

De même, si jamais quelqu'un peut m'indiquer, j'aimerais pouvoir définir la variable "Workbooks" (non défini lorsque j'utilise
Option Explicit
)

Pour le reste, il faut que je fasse une petite recherche pour savoir comment cumuler les valeurs de cellules (trois lignes de bateaux arrivés => valeur "3" dans la cellule cible) du document source directement depuis la macro, ainsi que faire une transposition entre la date et le numéro de semaine.

Le sujet est toujours ouvert si vous souhaitez bien m'aider.
Merci d'avance et bonne journée
0