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

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 !

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

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
 
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

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
 
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 ...
 
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 😵
 
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 🙂
 
- 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
Microsoft 365 Code VBA
Réponses
6
Affichages
655
Retour