Importer data depuis un fichier fermé

Faral

XLDnaute Nouveau
Bonsoir à tous,
je cherche une macro qui permet d'importer les données de la colonne E à partir de E3 du classeur soft vers la colonne E à partir de E3 du classeur Faral, sans toucher la mise en forme

merci pour votre assistance
 

Pièces jointes

  • FARAL.xlsx
    14.2 KB · Affichages: 28
  • SOFT.xlsx
    14.1 KB · Affichages: 19

job75

XLDnaute Barbatruc
Re,

J'ai remarqué que plus on est novice plus on veut faire compliqué.

Moi je m'efforce toujours de faire les choses simplement :
Code:
Private Sub CommandButton1_Click() 'bouton Copier
Application.ScreenUpdating = False
On Error Resume Next 'si le fichier ou la feuille n'existent pas
Range("E3:E" & Rows.Count) = "" 'RAZ
With Workbooks.Open(ThisWorkbook.Path & "\SOFT.xlsx").Sheets("PFE")
  With Intersect(.Range("E3:E" & .Rows.Count), .UsedRange)
    Range(.Address) = .Value
  End With
  .Parent.Close False
End With
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Cette macro doit impérativement être placée dans le code de la feuille de destination.

Fichier joint.

A+
 

Pièces jointes

  • Copier fichier(1).xlsm
    32.5 KB · Affichages: 26
  • SOFT.xlsx
    18.5 KB · Affichages: 21

Faral

XLDnaute Nouveau
Bonsoir Job75,
j'ai une petite question si vous permettez
j'ai trouvé un autre code dans un module du fichier est ce que c'est une autre solution ou je dois avoir les deux codes à la fois pour faire l'importation

VB:
Option Explicit

Sub Copier()
Dim F As Worksheet
Set F = Feuil01 'CodeName à adapter
Application.ScreenUpdating = False
On Error Resume Next 'si le fichier ou la feuille n'existent pas
F.Range("E3:E" & F.Rows.Count) = "" 'RAZ
With Workbooks.Open(ThisWorkbook.Path & "\SOFT.xlsx").Sheets("PFE")
  With Intersect(.Range("E3:E" & .Rows.Count), .UsedRange)
    F.Range(.Address) = .Value
  End With
  .Parent.Close False
End With
End Sub
 

job75

XLDnaute Barbatruc
Bonjour Faral, le forum,

j'avais créé ce code dans un premier temps, vous pouvez supprimer le module.

Pour terminer voyez aussi cette dernière solution avec formule de liaison :
Code:
Private Sub CommandButton1_Click() 'bouton Copier
Dim f As String, derlig As Variant
f = "'" & ThisWorkbook.Path & "\[SOFT.xlsx]PFE'!"
derlig = ExecuteExcel4Macro("MATCH(1E99," & f & "C5)")
If IsError(derlig) Then derlig = 2: GoTo 1 'si le tableau est vide
With Range("E3:E" & derlig)
  .FormulaArray = "=" & f & "E3:E" & derlig
  .Value = .Value 'supprime la formule
End With
1 Range("E" & derlig + 1 & ":E" & Rows.Count) = "" 'RAZ sous le tableau
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
C'est un peu plus rapide [Edit : si le nombre de lignes n'est pas trop grand] car on n'ouvre pas le fichier source.

Mais il faut que les valeurs à copier soient des nombres.

Fichier (3).

A+
 

Pièces jointes

  • Liaisons avec VBA(3).xlsm
    31.3 KB · Affichages: 16
  • SOFT.xlsx
    18.6 KB · Affichages: 15
Dernière édition:

Faral

XLDnaute Nouveau
Bonsoir Job75
j'ai éliminé le module standard et j'ai pris ton dernier fichier,
sauf que quand j'ai essayé d'importer des données mélangées chiffres et lettres ça marché contrairement à ce que tu m'a dit : comme quoi le code juste avec les nombres
 

Faral

XLDnaute Nouveau
Bonsoir Job75

après avoir refait le test comme tu as dit j'ai constaté que le code n'importe pas les cellules en texte qui sont en fin de colonne alors que dans mon exemple je peux avoir des cellules avec les textes en fin de cellule
y'a t'il possibilité de changer le code pour qu'il importe aussi ces cellules ou pas ?
 

Pièces jointes

  • SOFT.xlsx
    14.2 KB · Affichages: 11
  • Liaisons avec VBA(3).xlsm
    27.7 KB · Affichages: 12

job75

XLDnaute Barbatruc
Bonjour Faral, le forum,

Ce fichier (4) fonctionne avec des nombres et des textes en colonne E :
Code:
Private Sub CommandButton1_Click() 'bouton Copier
Dim f As String, derlig As Long, derlig1 As Long
f = "'" & ThisWorkbook.Path & "\[SOFT.xlsx]PFE'!"
derlig = Val(CStr(ExecuteExcel4Macro("MATCH(1E99," & f & "C5)"))) 'dernier nombre
derlig1 = Val(CStr(ExecuteExcel4Macro("MATCH(""zzzz""," & f & "C5)"))) 'dernier texte
derlig = IIf(derlig > derlig1, derlig, derlig1)
If derlig = 0 Then derlig = 2: GoTo 1 'si le tableau est vide
With Range("E3:E" & derlig)
  .FormulaArray = "=" & f & "E3:E" & derlig
  .Value = .Value 'supprime la formule
End With
1 Range("E" & derlig + 1 & ":E" & Rows.Count) = "" 'RAZ sous le tableau
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Chez moi sur 78 000 lignes la macro s'exécute en 3 secondes.

Il est plus simple et plus rapide (1,5 seconde) d'utiliser le fichier Copier fichier(1) du post #18.

Bonne journée.
 

Pièces jointes

  • Liaisons avec VBA(4).zip
    68.4 KB · Affichages: 20

zebanx

XLDnaute Accro
@job75
Belle abnégation (!)
Le sujet est récurrent, ça vaut le coup de garder dans un fichier les différents codes proposées et de bien garder et regarder les codes qui présentent, même si le tout est à chaque fois condensé, des différences d'approche (usedrange, derligne...).
Quand à la différence entre 3 secondes et 1.5 secondes :cool:

bonne journée
 
Dernière édition:

zebanx

XLDnaute Accro
@job75 / (admin)

Ce type de codes précis / utiles et d'exemples récurrents ne mériterait-il pas d'être inscrit dans un tuto spécifique sur E.D. ?
C'est peut-être déjà le cas...mais l'habitude de regarder par la loupe dans la zone "recherche" qui donne 10 pages de réponses en se fiant surtout au titre parfois peu propice à aller regarder dans le fil et les réponses complètes qui y sont apportées m'invite à vous poser cette question.
Ma démarche n'est pas de me soustraire aux recherches, qui font partie de l'expérience "E.D." -), mais plus d'y reporter les meilleures guidances et de valoriser, en INDIRECT(), le responsable du code utile.
CDLT
thierry
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
431

Membres actuellement en ligne

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz