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 20/12/2011, 00h08   #1
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Par défaut Mise à jour Classeur1 depuis Classeur2

Bonjour à tous,

Je voudrais mettre à jour, un tableau en classeur1 depuis trois tableaux en classeur2.

J'ai dimensionné un tableau fwr() pour récupérer toutes les valeurs nécessaires depuis le classeur2, et essayer de les placer dans la feuille ("BD") dans le classseur1.

Mais, ca ne marche pas encore.

Merci d'avance.
Fichiers attachés
Type de fichier : zip classeur.zip (21,8 Ko, 13 affichages)
apt est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 20/12/2011, 08h38   #2
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
Comme on le dit souvent sur ce forum, il faut essayer d'éviter de coder avec du Activate ou du Select, de même qu'il vaut mieux préciser sur quelle feuille on travaille quand on utilise un objet Range. Je pense que ça doit venir de là.

Avant de répondre, je voulais te préciser qu'il ne faut normalement pas mettre de classeur dans le premier message d'une demande. Il vaut mieux expliquer le problème et donner son code. C'est plus simple ensuite si des gens ont le même problème que toi.

Voilà un code qui fonctionne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Sub maj()
    Dim wsCible As Worksheet
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim nbVal, i As Integer
    Dim tmpVal() As Variant
    Dim lastRow As Integer
    Dim rg As Range
    Dim rgFind As Range
 
    Set wsCible = ThisWorkbook.Worksheets("BD")
    Set wbSource = Application.Workbooks("Class2.xls") 'Je ne vérifie pas qu'il est déjà ouvert
 
    nbVal = 0
    ReDim tmpVal(2, 0)
 
    'Récupération des données
    For Each wsSource In wbSource.Worksheets
        lastRow = wsSource.Range("A65000").End(xlUp).Row
 
        For i = 2 To lastRow
            If wsSource.Cells(i, "C").Value <> "" And IsNumeric(wsSource.Cells(i, "C").Value) Then
                nbVal = nbVal + 1
                ReDim Preserve tmpVal(2, nbVal - 1)
 
                tmpVal(0, nbVal - 1) = wsSource.Cells(i, "A").Value
                tmpVal(1, nbVal - 1) = wsSource.Cells(i, "B").Value
                tmpVal(2, nbVal - 1) = wsSource.Cells(i, "C").Value
            End If
        Next i
    Next wsSource
 
    'Remplissage du tableau
    Set rg = wsCible.Range(wsCible.Range("A2"), wsCible.Range("A65000").End(xlUp))
 
    For i = 1 To nbVal
        Set rgFind = rg.Find(What:=tmpVal(1, i - 1), LookIn:=xlValues, LookAt:=xlPart)
 
        If Not rgFind Is Nothing Then
            rgFind.Offset(0, 1).Value = tmpVal(0, i - 1)
            rgFind.Offset(0, 2).Value = tmpVal(2, i - 1)
        End If
    Next i
 
End Sub
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 01h06   #3
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Bonsoir Zebreloup,

Ca marche très bien.

Merci
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h24.


 
 
 
 
Partenaires

Hébergement Web