Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2012, 16h08   #1
Invité de passage
 
Femme
ingenieur systemes embarqués
Inscription : novembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : ingenieur systemes embarqués
Secteur : Industrie

Informations forums :
Inscription : novembre 2011
Messages : 15
Points : 0
Points : 0
Par défaut liaison entre fichier Excel

bonjour,

Je suis débutante en VBA et c'est la première foi que je fais des liaisons entre fichier excel

J'ai 2 fichiers Excel leurs 2eme feuille est un tableau de 2 colonnes et plusieurs lignes je cherche a mettre à jour le tableau du fichier1 quand je modifie le tableau du fichier2, les 2 fichiers sont enregistrés sur serveur
J'ai commencé par faire un lien, sauf que ca modifie pas si j’insert une ligne entre 2 lignes existantes
En plus il a suffi que je perds la communication avec le serveur que les liaisons fonctionnent plus !!! Je ne comprends pas pourquoi j'ai du les effacé puis les refaire quand je me suis reconnecté sur le serveur
j'ai pensé à faire une macro (je crois que c'est plus fiable)est ce une bonne idée si oui comment faire merci
amouna98 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 16h25   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,
Quand tu dis "tableau", tu te réfères à une plage de cellules ou à un tableau au sens XL2010 du terme (Insertion, Tableau) ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h49   #3
Invité de passage
 
Femme
ingenieur systemes embarqués
Inscription : novembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : ingenieur systemes embarqués
Secteur : Industrie

Informations forums :
Inscription : novembre 2011
Messages : 15
Points : 0
Points : 0
Bonjour
Je parle de 2 colonnes et plusieurs ligne (nombre non défini) elle évolue l'idée est d'évoluer le 2eme fichier de la même façon (si on insert une ligne dans le 1er fichier il doit l'insérer dans le 2eme si on ajout une ligne dans le 1er fichier il faut qu'il ajoute dans le 2eme fichier ...)
Il faut qu'on est a tout temps la même chose
Je précise que c'est 2 colonnes c'est tout ce que j'ai dans cette feuille (c’est comme un dico des codes et leurs significations)
amouna98 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 12h21   #4
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

En supposant que le fichier où l'on répercute les modifs soit "c:\temp\Fichier1.xls"; les tableaux sont tous les deux sur Feuil1 en colonne A:B commençant en cellule A1. Mets la macro suivante dans le module de Feuil1 du classeur où tu fais les modifs (Fichier2.xls) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WB As Workbook, Teste As Boolean
    If Intersect(Target, Range("A1").CurrentRegion) Is Nothing Then Exit Sub
    For Each WB In Workbooks
        If WB.Name = "Fichier1.xls" Then '*** à modifier
            Teste = True
            WB.Activate
            Exit For
        End If
    Next WB
    If Teste = False Then
        Workbooks.Open "c:\temp\Fichier1.xls" '*** à modifier
    End If
    With Target.Worksheet
        ActiveWorkbook.Sheets("Feuil1").[A:B].Clear
        Intersect(.[A1].CurrentRegion, .[Feuil1!A:B]).Copy
        ActiveWorkbook.Sheets("Feuil1").[A1].PasteSpecial xlPasteValues
    End With
End Sub
Si tu as des difficultés avec les macros, n'hésite pas à poser des questions.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 14h25   #5
Invité de passage
 
Femme
ingenieur systemes embarqués
Inscription : novembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : ingenieur systemes embarqués
Secteur : Industrie

Informations forums :
Inscription : novembre 2011
Messages : 15
Points : 0
Points : 0
j'ai un probleme !!!
l'erreur est : Erreur d'exécution 424 : Objet requis !!!
j'ai fait peu de modif dans le code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub copie()
 Dim WB As Workbook, Teste As Boolean
    If Intersect(Target, Range("C4").CurrentRegion) Is Nothing Then Exit Sub
    For Each WB In Workbooks
        If WB.Name = "RAF_Gabarits.xls" Then 
            Teste = True
            WB.Activate
            Exit For
        End If
    Next WB
    If Teste = False Then
        Workbooks.Open "C:\Documents and Settings\Mes documents\RAF_Gabarits.xls" '*** à modifier
    End If
    With Target.Worksheet
        ActiveWorkbook.Sheets("Feuil2").[C:D].Clear
        Intersect(.[C4].CurrentRegion, .[Feuil2!C:D]).Copy
        ActiveWorkbook.Sheets("Feuil2").[C4].PasteSpecial xlPasteValues
    End With
End Sub
j'ai caraiment créer des fichiers pour tester le code ( voir ci-joint)
Fichiers attachés
Type de fichier : xlsx RAF_template_macro.xlsx (8,3 Ko, 1 affichages)
Type de fichier : xlsx RAF_Gabarits.xlsx (8,3 Ko, 1 affichages)
amouna98 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 16h30   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Je n'ai pas modifié le classeur "RAF_Gabarits.xlsx"; j'ai enregistré "RAF_template_macro.xlsx" au format XL2003 ("RAF_template_macro.xls"), la format xlsm n'étant pas admis comme type de pièce jointe. J'ai modifié le code en fonction de la disposition de tes données et j'ai mis la macro dans le module de Feuil2 :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WB As Workbook, Teste As Boolean
    If Intersect(Target, Intersect([C4].CurrentRegion, [C:D])) Is Nothing Then Exit Sub
    For Each WB In Workbooks
        If WB.Name = "RAF_Gabarits.xlsx" Then '*** à modifier
            Teste = True
            WB.Activate
            Exit For
        End If
    Next WB
    If Teste = False Then
        Workbooks.Open ThisWorkbook.Path & "\RAF_Gabarits.xlsx" '*** à modifier
    End If
    With Target.Worksheet
        ActiveWorkbook.Sheets("Feuil2").[C:D].Clear
        Intersect(.[C4].CurrentRegion, .[Feuil2!C:D]).Copy
        ActiveWorkbook.Sheets("Feuil2").[C4].PasteSpecial xlPasteValues
    End With
End Sub
Fichiers attachés
Type de fichier : xls RAF_template_macro.xls (41,5 Ko, 7 affichages)
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 14h12   #7
Invité de passage
 
Femme
ingenieur systemes embarqués
Inscription : novembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : ingenieur systemes embarqués
Secteur : Industrie

Informations forums :
Inscription : novembre 2011
Messages : 15
Points : 0
Points : 0
j'ai repris ton fichier j'ai copier puis collé ton code mais j'ai toujour la meme erreur sur la ligne
Code :
If Intersect(Target, Intersect([C4].CurrentRegion, [C:D])) Is Nothing Then
amouna98 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 14h24   #8
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Le code était DEJA dans le fichier que je t'ai retourné. Teste-le sans rien modifier.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 15h52   #9
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Ce que Daniel a fait c'est qu'il a mis le code dans l'évènement Worksheet_Change de la feuille en question. Du coup, il va s'exécuter dès que tu vas changer une valeur dans la feuille

Ça ne marchera pas si tu essaies de lancer la macro directement car Target représente la cellule qui a été modifiée. Tu aurais d'ailleurs eu un problème de compilation si tu avais mis Option Explicit en haut du module.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 17h34   #10
Invité de passage
 
Femme
ingenieur systemes embarqués
Inscription : novembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : ingenieur systemes embarqués
Secteur : Industrie

Informations forums :
Inscription : novembre 2011
Messages : 15
Points : 0
Points : 0
effectivement
ca marche mais j'ai un probleme:
il mouvre le 2eme fichier ( et il faut pas dans mon cas)
c'est possible
amouna98 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 18h48   #11
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Non, les deux fichiers doivent être ouverts. La macro ouvre le classeur cible uniquement si celui-ci est fermé.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2012, 18h51   #12
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Après rien ne t'empêche de le fermer à la fin de la macro. Tu vas juste avoir un problème de performance car il devra ouvrir-fermer un fichier du réseau à chaque fois que tu feras une modification.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h16.


 
 
 
 
Partenaires

Hébergement Web