XL 2010 copier coller vba des cellules d'un fichier origine vers feuille destinataire

Yli

XLDnaute Nouveau
Bonjour
je débute en vba et j'aimerais savoir comment copier coller des cellules d'un fichier source vers un autre fichier sans devoir recopier cellule par cellule. Ci joint des fichiers avec des questions ; Merci bien
 

Pièces jointes

  • Classeur1.xlsm
    16.6 KB · Affichages: 15
  • Classeur2.xlsm
    26.4 KB · Affichages: 12

fanch55

XLDnaute Barbatruc
Bonjour,
D'après le contexte, ce ne sont pas des copies qui sont faites mais des liens par formule.
Le code ci-dessous devrait fonctionner une fois placé dans le module de Thisworkbook de Classeur2 :
VB:
Option Explicit
Private Sub Workbook_Open()
Dim Fso As Object
Dim F_Old, F_New, F_Cur
Set Fso = CreateObject("Scripting.FileSystemObject")
    With Worksheets("synthèse")
        If InStr(.[B2].Formula, "[") > 2 Then
            ' Classeur à ouvrir
            F_Old = Split(Split(.[B2].Formula, "'")(1), "]")(0)
            F_Cur = Replace(F_Old, "[", "")
            If Not Fso.FileExists(F_Cur) Then
                With Application.FileDialog(msoFileDialogFilePicker)
                    .InitialFileName = ThisWorkbook.Path & "\"
                    .Title = "Sélectionner le fichier source"
                    .AllowMultiSelect = False
                    .ButtonName = "Sélection Fichier"
                    With .Filters
                        .Clear
                        .Add "Classeur réf", "*.xl*"
                    End With
                    If .Show Then F_Cur = .SelectedItems(1) Else F_Cur = ""
                End With
            End If
            If F_Cur <> "" Then
                F_New = Fso.GetFile(F_Cur).ParentFolder.Path & "\[" & Fso.GetFile(F_Cur).Name
                .Cells.Replace What:=F_Old, Replacement:=F_New, LookAt:=xlPart, _
                    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
                Workbooks.Open F_Cur, True
            End If
            ThisWorkbook.Activate
        Else
            ' Classeur déjà ouvert
            .Calculate
        End If
    End With
Set Fso = Nothing

End Sub
 

job75

XLDnaute Barbatruc
Bonsoir Yli, fanch55,

Il n'y a pas besoin de VBA, ouvrez les 2 fichiers en même temps.

Et dans Classeur2.xlsm entrez en B2 B3 C2 C3 les formules :
Code:
=SOMMEPROD(([Classeur1.xlsm]Feuil1!$A$3:$A$5=$A$1)*[Classeur1.xlsm]Feuil1!$B$3:$B$5)
Code:
=SOMMEPROD(([Classeur1.xlsm]Feuil1!$A$3:$A$5=$A$1)*[Classeur1.xlsm]Feuil1!$C$3:$C$5)
Code:
=SOMMEPROD(([Classeur1.xlsm]Feuil1!$A$3:$A$5=$A$1)*[Classeur1.xlsm]Feuil1!$D$3:$D$5)
Code:
=SOMMEPROD(([Classeur1.xlsm]Feuil1!$A$3:$A$5=$A$1)*[Classeur1.xlsm]Feuil1!$E$3:$E$5)
Bonne nuit.
 

Pièces jointes

  • Classeur1.xlsm
    11.7 KB · Affichages: 7
  • Classeur2.xlsm
    12.7 KB · Affichages: 10

fanch55

XLDnaute Barbatruc
Vous aurez compris que les formules fonctionnent que le 1er fichier soit ouvert ou fermé.
Salut @job75 , les formules fonctionnent mais ne sont pas mises à jour automatiquement tant que classeur1 est fermé ou qu'on ne "repasse" pas sur les cellules avec formule ....

Le code ci-dessous à mettre dans Thisworkbook devrait palier à ce manque
( application.calculate est ineffectif ...):
VB:
Private Sub Workbook_Open()
    With Worksheets("synthèse").UsedRange
        .Formula = .Formula
    End With
End Sub
 

fanch55

XLDnaute Barbatruc
Je ne pense pas que ce soit lié à ma version au vu de la macro que le demandeur a produit ...
Fermeture/ouverture répété du classeur2 ne résout pas la non mise à jour des cellules liées quand on n'ouvre jamais classeur1 .
La méthode minimale que j'ai pu trouver pour forcer la mise à jour à l'ouverture c'est :
VB:
Private Sub Workbook_Open()
    ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
End Sub
Si la réaction est différente selon les versions d'excel, c'est inquiétant ...
 

fanch55

XLDnaute Barbatruc
Bon, moi aussi cette non mise à jour bousculait quelque peu mon expérience d'excel et je me suis dit que @job75 avait rarement tort . ;)

J'ai donc répété les opé sur le portable de ma femme .
Effectivement, les mises à jour se font correctement telles que décrites et telles que je connaissais .

J'ai cherché les différences entre les options d'excel des 2 matériels .
Sur le mien, surprise, les mises à jours auto étaient désactivées : 🤔
1658163467038.png



Après correction des options , tout marche correctement maintenant ...

Ceci dit, je viens de découvrir qu'on peut forcer par Vba l'option à l'insu de son plein gré avec
ActiveWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources o_O
 

Yli

XLDnaute Nouveau
Bonsoir Yli, fanch55,

Il n'y a pas besoin de VBA, ouvrez les 2 fichiers en même temps.

Et dans Classeur2.xlsm entrez en B2 B3 C2 C3 les formules :
Code:
=SOMMEPROD(([Classeur1.xlsm]Feuil1!$A$3:$A$5=$A$1)*[Classeur1.xlsm]Feuil1!$B$3:$B$5)
Code:
=SOMMEPROD(([Classeur1.xlsm]Feuil1!$A$3:$A$5=$A$1)*[Classeur1.xlsm]Feuil1!$C$3:$C$5)
Code:
=SOMMEPROD(([Classeur1.xlsm]Feuil1!$A$3:$A$5=$A$1)*[Classeur1.xlsm]Feuil1!$D$3:$D$5)
Code:
=SOMMEPROD(([Classeur1.xlsm]Feuil1!$A$3:$A$5=$A$1)*[Classeur1.xlsm]Feuil1!$E$3:$E$5)
Bonne nuit.
Un grand merci pour vos réponses :)
 

Discussions similaires

Réponses
6
Affichages
626
Réponses
1
Affichages
291

Statistiques des forums

Discussions
315 091
Messages
2 116 114
Membres
112 663
dernier inscrit
Pauline243