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

Transfert de données

  • Initiateur de la discussion Initiateur de la discussion Kickback
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

K

Kickback

Guest
Bonjour à tous,

Je rencontre une difficulté concernant le transfert de mes données. Précédemment certains membres de ce forum m'avaient aidé pour réaliser un transfert mais je souhaite le faire évoluer et je n'y arrive pas seul.
Je dispose d'un fichier avec deux feuilles, une de saisie de données et une d'archivage en fonction de la semaine en cours.
A la fin de la semaine d'activité, je voudrai transférer mes données dans la feuille d'archivage (en semaine active, actuellement la 47) et pouvoir saisir de nouvelles données etc...
Je joints le fichier en exemple afin que cela soit plus compréhensible. J'ai repris la macro ancienne mais elle ne convient plus, je n'arrive pas à rentrer des critères de dates et les transferts envoient les données les unes en dessous des autre.
Merci par avance de l'aide que vous pourriez m'apporter.
 

Pièces jointes

Re : Transfert de données

En relisant mon message et en ne voyant aucune réponse, je me demande si j'ai été assez clair.
En fait ce sont seulement les cases deux cases bilan de la fiche de saisie (dans l'exemple 19 et 70) qui devraient aller dans les cases vertes de la feuille d'activité, semaine après semaine.
Je constate aussi m'être trompé dans l'intitulé, le fichier est sous excel 2003.
Désolé et merci d'avance.
 
Re : Transfert de données

Salut Kickback et le forum
Déjà, à voir ton second poste, au moins tu as pris en compte que ton premier poste n'était pas assez explicite. Ce n'est pas le cas de tout le monde. Et même si ça met du temps, les réponses arriveront.

Ton fichier d'essai : avec ton second poste, je crois comprendre que ce sont les cellules G4 et G7 qui doivent être transférées.

Comme je ne suis pas sûr de savoir exactement ce que tu essaies de faire, je vais faire une première approche avec ce que je comprends.

Un bouton qui lance une macro : Une macro débute par une ligne de titre comportant sa nature (sub ou function) et son titre. Elle finit obligatoirement par une fin de macro ("End sub" ou "End function") : Excel les créent automatiquement dès que tu donnes le titre de la macro.

Feuille "Activité" :
petite remarque tant que j'y pense, suivant la méthode de calcul du numéro de semaine, il peut y avoir une semaine 53.

Ce que je lis dans ta macro :
Code:
Set Dt = Sheets("Activité").Range("AV65536").End(xlUp).Offset(1, 0)
Pour l'instant, on ne s'occupe que du transfert de la colonne G. Comme on est semaine 47, on transfère colonne AV : NON ! Codé en dur, il faudra que tu modifies le code chaque semaine, et autant ne pas s'embêter à faire une macro ! 😛

Ne connaissant pas le fichier final, on va partir du principe que ton fichier d'essai n'est qu'un principe du fichier de travail => donc aucune ligne (autres que celles des "titres") n'apparaît en "dur" dans ta macro : excel doit les calculer !

Comme ta macro apparaît sur le module lié à la feuille "Saisie", pour simplifier l'écriture, on va attribuer la variable F à la feuille activité.

Première étape : repérer les lignes à transférer. N'ayant pas toutes les infos, je suppose que les titre des activités sont déjà inscrits dans les deux feuilles, et que la ligne 2 est "figée".

On "scanne" une colonne A : on recherche les cellules étant en italique. Je fais simple, mais on pourrait rechercher celle en italique précédée d'une ligne en gras. La feuille importe peu : elle sont identiques (en principe).
Nota : une variable est toujours déclarée dans le type qui permet que si elle atteint sa valeur maximale, elle ne déclenche pas d'erreur.
Code:
Private Sub CommandButton1_Click()
'Déclaration ======================================
Dim F As Worksheet
Dim Cel As Range, rep As Variant
Dim Col As Integer, Lig As Long
'MEI ==============================================
Set F = Sheets("Activité")
'Traitement =======================================
'Recherche de la colonne --------------------------
Col = F.Rows(2).Find(Range("H2"), lookat:=xlWhole).Column
'x= colonne de trouver la cellule ligne 2 égale à H2 (semaine)
'Recherche d 'activité ----------------------------
For Each Cel In Range([A3], Cells(Rows.Count, "A").End(xlUp))
'Pour chaque cellule de A3 à dernière non vide de A
    If Cel.Font.Italic = True Then
    ' si la cellule a une police en italique, alors
        Lig = F.Columns(1).Find(Cel, lookat:=xlWhole).Row
        'Lig=ligne où la colonne A =cel
        'Validité du tansfert ---------------------
        If F.Cells(Lig, Col) > 0 Then
        's'il y a déjà un nombre >0 dans la cellule
            rep = MsgBox("Il y a déja une valeur en cellule " & Cells(Lig, Col).Address(0, 0) & _
             Chr(13) & "Doit-on continuer ?" & Chr(13), vbCritical + vbYesNo, "Transfert d'activité")
            If rep = 7 Then
            'si la réponse est non
                Exit Sub
                'on sort
            End If
            'Transfert -----------------------------
            F.Cells(Lig, Col) = Cells(Cel.Row, "G")
            'Inscrire G de la ligne de cel dans la cellule ligne Lig, colonneCol
            'RAZ -----------------------------------
            Range(Cells(Cel.Row, "B"), Cells(Cel.Row, "F")).ClearContents
        End If
    End If
Next Cel
'Cellule suivante
End Sub
Attention : ce n'est qu'un principe, en fonction du fichier d'essai et de ce que je crois avoir compris.

Lig est déclaré en Long, le numéro d'une ligne pouvant excéder la limite d'Integer.
Comme une action sur le bouton efface les données, si elles existent déjà sur la feuille récapitulative, il peut y avoir une erreur => on arrête tout.

Je suis parti du principe que seule les ligne comportant un titre en italique étaient à transférer.

Un code étant éminemment personnel (dépend de ses acquis, de ses habitudes), il peut ne pas convenir. Le but n'est pas de trouver un code, mais de comprendre comment on fait un algorithme correspondant à une problématique donnée.

Vu le nombre de réponses, tu vois que le sujet et son titre sont très important : il ne faut pas noyer le dépanneur dans des infos non pertinents, alors qu'on oublie des évidences, qui ne le sont que pour quelqu'un qui utilise le fichier.
exemple :
je voudrai transférer mes données dans la feuille d'archivage (en semaine active, actuellement la 47) et pouvoir saisir de nouvelles données etc...
trop imprécis : tu n'as pas de feuille "Archivage", juste "Activité". on doit transférer des données, mes lesquelles ?
Même ton second poste => on sait qu'on doit transférer les valeur 19 et 70 : comme ce n'est qu'un fichier d'essai simple, je les ai trouvées de suite. Mais pourquoi ne pas les avoir signalées comme celles de réception ?

C'est pas une engueulade, c'est juste des précisions.

on pouvait arriver pratiquement au même point, sans fichier d'essai :
À l'ade d'un bouton ("CommandButton1"), je voudrais transférer G4 et G7 de la feuille "Saisie" en ligne 4 et 7 de la feuille "Activité" dans la colonne dont le numéro inscrit en ligne 2 correspond à H2 de la feuille "Saisie".

Vaut-il mieux perdre du temps à rédiger son titre et son sujet, ou à attendre d'hypothétiques réponses qui ne correspondent pas au problème ?
A+
 
Re : Transfert de données

Bonjour Gorfael,

Tout d'abord merci d'avoir pris le temps nécessaire pour répondre de façon aussi claire et précise à ma demande. Je sais que je manque de précision dans mon message car il est pour moi difficile d'expliquer clairement ce que je veux faire dans l'outil. J'aurai simplement effectivement du expliciter le résultat attendu sans prendre en compte l'outil lui-même.

Effectivement, mon fichier comportera une dizaine de lignes à transférer chaque fin de semaine, de la feuille saisie vers la feuille activité et on peut résumer de la sorte :

À l'ade d'un bouton, sur le fichier d'essai, je voudrais transférer l'ensemble de la colonne G de la feuille saisie vers la colonne "semaine en cours" de la feuille de bilan (le numéro inscrit en ligne 2correspondant à H2 de la feuille "Saisie"). Puis remettre les valeurs de la colonne G à 0.
A noter que la ligne entière n'est pas forcément en italique, c'est pour cela que je souhaiterai plutôt envoyer l'ensemble de la colonne G vers la colonne de la semaine en cours.

Quand je vois la macro que tu proposes, je me rends compte de la complexité de la demande. J'ai tenté de l'utiliser mais cela ne fonctionne pas et j'avoue avoir du mal à modifier correctement un tel codage.
 
Re : Transfert de données

Salut Kickback et le forum
Pourquoi faire simple quand on peut faire compliqué 😛
On peut simplifier :
On part du principe que les lignes des deux feuilles ont le même titre => plus besoin de rechercher la correspondance en A, il suffit juste de trouver la bonne colonne, et de faire un simple copier coller de la colonne G sur la colonne trouvée :
Code:
Private Sub CommandButton1_Click()
'Déclaration ======================================
Dim F As Worksheet, Col As Integer
'MEI ==============================================
Set F = Sheets("Activité")
'Traitement =======================================
'Recherche de la colonne --------------------------
Col = F.Rows(2).Find(Range("H2"), lookat:=xlWhole).Column
'x= colonne de trouver la cellule ligne 2 égale à H2 (semaine)
'copie d 'activité ----------------------------
Range([G3], Cells(Rows.Count, "G").End(xlUp)).Copy
'on copie dans le presse-papier de G3 à dernière non vide en G
F.Cells(3, Col).PasteSpecial Paste:=xlPasteValues
'on colle spécial valeurs depuis le presse-papier à partir de la ligne3
'de la colonne calculée de la feuille activité
Range("B3:F" & Cells(Rows.Count, "G").End(xlUp).Row).ClearContents
'on efface les données de B à F de la ligne 3 à dernière non vide en G
Application.CutCopyMode = False
'on efface les tirets de sélection de copier/couper
End Sub
J'ai pris ma macro, et je l'ai simplifiée => il faut tester qu'on copie bien à partir de la ligne 3 et que c'est bien à partir de la ligne 3 qu'on colle : dans une phase de test, met l'activité 1 à 1, 2 à 2, etc, et vérifie que chaque résultat est copié à la bonne place.
Efface la macro précédente, Excel a du mal à différencier 2 macro de même nom dans le même module.

A+
 
Dernière édition:
Re : Transfert de données

Gorfael,

A nouveau merci de prendre du temps pour m'aider.
Après avoir testé la macro, il me semble que cette dernière devrait fonctionner sauf qu'un souci supplémentaire apparait : seuls des 0 apparaissent dans la colonne liée à la semaine de la feuille "activité". Comme si le fait d'effacer les nombres de la feuille "saisie" en fin de macro entrainait une mise à 0 également dans la feuille "activité".
Est-ce le fait d'avoir tous ces éléments (transfert+effacer les données) dans la même macro qui crée cette difficulté ?
 
Re : Transfert de données

En fait non, le problème doit venir d'ailleurs puisqu'en testant un peu plus, j'ai retiré la partie "effacer les données" de la macro que tu proposes et le transfert continue de n'afficher que des 0.
 
Re : Transfert de données

Salut Kickback et le forum
Voilà ce que c'est d'être trop sûr de soi => j'ai pas testé => c'est pas bon
Il semble que ce soit au niveau de la recopie :
Code:
F.Cells(3, Col).PasteSpecial Paste:=xlPasteValues
'on colle spécial valeurs depuis le presse-papier à partir de la ligne3
Devrait donner un meilleur résultat (j'ai rectifié dans la macro précédente) : il faut nommer l'argument paste, sinon ça ne fonctionne pas 😱
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
6
Affichages
329
Réponses
4
Affichages
307
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…