AIDE sur VBA: comment recupere

M

momojamal

Guest
URGENT

BONJOUR.

J'ai grave besoin d'aide sous VB.
Je dois créer une macro dans un classeur de base qui ouvre un autre classeur. DAns ce dernier j'ai une colonne A et B.
Lacolonne A Il ya un numéro de ligne pour le classeur de base.
et la colonne B est la donnée qui doit etre copié dans le classeur de base à la colonne G mais à la ligne indiqué par la colonne B.

J'aimerais faire cela en dynamique car il ya trop de ligne.

MERCI
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Momo, le Forum

Tu sais chez nous sur XLD le mot 'Urgent' n'est pas trop bien vu, surtout en Majuscule.

Sinon pour ce que j'ai compris de tes Explications voici un code à mettre dans un Module Standard du Classeur de Base (Cible) recevant les Données en provenance du Classeur Source.

Option Explicit

Const TheFullPathSource As String = 'C:\Documents and Settings\Thierry\My Documents\toto.xls' 'A ADAPTER !!!'

Sub RecupData()
Dim WBSource As Workbook, WBCible As Workbook
Dim WSSource As Worksheet, WSCible As Worksheet
Dim PlageSource As Range, CellSource As Range, CellCible As Range
Dim CellCibleRow As Long

Set WBSource = Workbooks.Open(TheFullPathSource)
Set WSSource = WBSource.Worksheets('Sheet1')

Set WBCible = ThisWorkbook
Set WSCible = WBCible.Worksheets('Sheet1')


With WSSource
   
Set PlageSource = .Range('B2:B' & .Range('A65536').End(xlUp).Row)
End With

For Each CellSource In PlageSource
    CellCibleRow = CellSource.Row
   
With WSCible
        .Range('G' & CellCibleRow) = CellSource
   
End With
Next
WBSource.Close 0
End Sub


Bonne Journée sans trop se presser ;)

[ol]@+Thierry[/ol] J - 9
 
M

momojamal

Guest
Merci pour la réponse: MAIS ça ne correpond pas à ce que je voulais.

Le programme donné précédement: récupere les valeurs de la colonne B du classeur source et copie cela dans le classeur cible en reprenant le numero de ligne.


Mais moi, je veux prendre le numero qui est stocké dans la colonne A.
.
Récapitulatif: Je veux que le programme ouvre le classeur (Classeur Source). Il recupére la colonne B: ppour avoir la valeur stockée dans la cellule correspondant à la ligne pour copier dans le classeur cible. Ensuitte copie la valeur de la colonne B du classeur source dans le classeur cible.



a+
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Momo, Bonjour Wilfried, le Forum

J'étais occupé. Désolé du temps de réactivité !

Pour ta question Wilfried, WBSource.Close 0, pourrait s'écrire :
WBSource.Close False

Ou encore comme ceci :
WBSource.Close SaveChanges:=False

Ce qui signifie que je Ferme le Classeur Sansle Sauver
(True pour le Sauver, of course)

Sinon pour Momo voici une version qui fera (une fois encore) ce que j'ai compris, c'est à dire récupérer la valeur de la colonne 'B' du classeur Source pour l'envoyer en Colonne 'G' du Classeur Cible dans la Ligne indiquée dans la Colonne 'A' du classeur Source en ligne adajcente de la colonne 'B' de ce classeur Source.

Mais ce n'est pas vraiment une demande classique de reporter des données en fonction d'un numéro de ligne indiqué en dûr sur des cellules (Risque d'avoir n'importe quoi dans la cellule) ... Du coup j'ai mis un Test de Numérique et d'Entier.

Option Explicit

Const TheFullPathSource As String = 'C:\Documents and Settings\Te\My Documents\toto.xls' 'A ADAPTER !!!'

Sub RecupData()
Dim WBSource As Workbook, WBCible As Workbook
Dim WSSource As Worksheet, WSCible As Worksheet
Dim PlageSource As Range, CellSource As Range, CellCible As Range
Dim CellCibleRow As Long
Dim Bad As Boolean

Set WBSource = Workbooks.Open(TheFullPathSource)
Set WSSource = WBSource.Worksheets('Sheet1')

Set WBCible = ThisWorkbook
Set WSCible = WBCible.Worksheets('Sheet1')


With WSSource
   
Set PlageSource = .Range('A2', .Range('A65536').End(xlUp))
End With

For Each CellSource In PlageSource
   
If IsNumeric(CellSource) Then
       
If CellSource - CInt(CellSource) = 0 Then
            CellCibleRow = CellSource.Value
           
With WSCible
                .Range('G' & CellCibleRow) = CellSource.Offset(0, 1)
           
End With
        Else: Bad =
True
       
End If
    Else: Bad =
True
   
End If
Next
WBSource.Close
True

If Bad Then MsgBox 'Something Wrong in the Import due to Lines Number'
End Sub

J'espère que ce sera la bonne !

Bonne Soirée
@+Thierry
 

Discussions similaires

Réponses
7
Affichages
456

Membres actuellement en ligne

Statistiques des forums

Discussions
312 836
Messages
2 092 654
Membres
105 479
dernier inscrit
chaussadas.renaud