Transfert classeur "père" > classeur "fils" (VBA)

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 !

nounbxl76

XLDnaute Occasionnel
Bonjour le forum,

Je viens une nouvelle fois vers vous car j'ai un gros problème à gérer… Il y a quelques temps, j'avais mis au point une base Excel qui me permettait de faire un suivi d'évènements… Aujourd'hui, mon boss a décidé de virer mon suivi "manuel" et a implémenté une base de données (http)... seulement, il me demande toujours de faire des indicateurs sur les évènements donc obligation de passer par Excel… Mon problème est donc simple… A partir d'une extraction de la base (fichier Excel) que j'appellerai "classeur fils", je souhaite alimenter un autre classeur que j'appellerai "classeur père". La procédure de rapatriement des données devant être réalisée à partir du "classeur père". Par ailleurs, avant d'être rapatriées, les données du "classeur fils" devront subir une petite beauté…
Ci-joint se trouvent les 2 classeurs pour plus de détails…
Pour le classeur fils, j'ai décortiqué ce qu'il doit subir sous forme de 3 onglets (avant modifications > modifications > après modification).
Pour le classeur père, j'ai mis avant/après.
A noter que cette procédure sera lancée tous les jours donc il faudra supprimer les données importées de la veille (supprimer les filtres + clearcontents)

Je ne sais pas si j'ai été très clair alors merci par avance à ceux qui se pencheront sur ce sujet.

Cordialement,
 

Pièces jointes

Re : Transfert classeur "père" > classeur "fils" (VBA)

Re,

VB:
Option Explicit

Sub tsfr2()
  Dim LigFin As Long  'DerLig As Long
  Dim i As Long, Nf As String, sPath As String
  Dim ShtFils As Worksheet, ShtPère As Worksheet
  Dim Inc As Integer, TabColS() As String, TabColD() As String


  Application.DisplayAlerts = False  ' Désactiver les alertes Excel
  Application.ScreenUpdating = False  ' Désactiver le rafraichissement d'écran


  ' Définir les tableaux des colonnes sources vers celles de destinations
  TabColS = Split("A,F,L,G,C,D,H,J,I", ",")
  TabColD = Split("A,B,C,D,E,F,G,H,I", ",")


  ' Définir la feuille de destination du classeur père
  Set ShtPère = ThisWorkbook.Sheets("Avant")


  ' Afficher toutes les données et les effacer
  On Error Resume Next  ' En cas d'erreur on continue
  With ShtPère
    .ShowAllData
    .Range("A17:I65000").ClearContents   'efface les anciennes données
  End With
  On Error GoTo 0  ' Remettre la gestion d'erreur à la normal


  ' Récupérer le nom entier du fichier
  sPath = ThisWorkbook.Path & "\"
  Nf = Dir(sPath & "\TW*.xls")


  ' Ouvrir le fichier
  Workbooks.Open Filename:=sPath & Nf, ReadOnly:=True


  ' Définir la feuille source
  Set ShtFils = ActiveWorkbook.Sheets(1)
  
  ' Trouver la ligne de fin
  LigFin = ShtFils.Range("A" & Rows.Count).End(xlUp).Row
  
  ' Activer ce classeur
  ShtPère.Activate
  
  ' Copier chaque plage indépendamment
  For Inc = 0 To 8
    ShtFils.Range(TabColS(Inc) & "5:" & TabColS(Inc) & LigFin).Copy
    ShtPère.Range(TabColD(Inc) & "17").PasteSpecial Paste:=xlPasteValues
    ' Si la colonne copiée est celle d'une date
    If Inc = 3 Or Inc = 5 Then
      ' Appliquer le format date à la colonne de destination
      ShtPère.Range(TabColD(Inc) & "17:" & TabColD(Inc) & 17 - 5 + LigFin).NumberFormat = "dd/mm/yyyy"
    End If
    ' Format nombre pour colonne des jours
    If Inc = 6 Then
      ShtPère.Range(TabColD(Inc) & "17:" & TabColD(Inc) & 17 - 5 + LigFin).NumberFormat = "0"
    End If
  Next Inc


  ' Fermer le classeur fils
  Workbooks(Nf).Close savechanges:=False


  ' Avec le classeur père
  With ShtPère
    .[A16].Sort Key1:=Sheets("Avant").[A17], Order1:=xlAscending, Header:=xlGuess  'tri
    [A17:A65000].SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow.Delete  '2).EntireRow.Delete
    Range("A17").Select
  End With


  Application.DisplayAlerts = True  ' Réactiver les alertes
  Application.ScreenUpdating = True  ' Réactiver le rafraichissement


End Sub

A+
 
Re : Transfert classeur "père" > classeur "fils" (VBA)

Chez moi les dates présentes sous la colonne F (en-tête "Date current") sont sous le forme jj/mm/yyyy hh:mm:ss (ex pour la 1ère ligne : 06/01/2012 15:11:00) alors que j'aimerais qu'elles soient "jj/mm/yyyy". J'ai même essayé par Excel lui-même... format de cellule... mais rien n'y fait...
 
Re : Transfert classeur "père" > classeur "fils" (VBA)

Re,

Cela veut dire qu'Excel ne considère pas tes cellules comme des dates, mais du texte
Entre dans une cellule en mode saisie F2, puis valide pour voir

A+
 
Re : Transfert classeur "père" > classeur "fils" (VBA)

Re,

Quel est l'effet escompté?
Pour info, avant que la 1ère fois que le code a été appliqué, les données dates étaient transférées sous cette forme 40914,6326388889 ce qui me donne 06/01/2012 15:11:00 après changement de format...
 
- 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

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
169
Réponses
38
Affichages
888
Retour