BP avec c.Offset, svp

kolivier

XLDnaute Occasionnel
Bonjour à tout le Forum.
Etant donné que j'ai toujours trouvé d'excellentes réponses sur ce Fourm, je souhaiterai retenter l'opération.

Donc mon PB est le suivant :
A partir d'une macro excel je demande l'ouverture d'un autre fichier et je lui demande de mettre sur le premier fichier EXCEL les infos presentes sur le second (celui que j'ai ouvert).
Jusque la tout fonctionne.
Le second fichier contient des lignes avec par exemple le NOM le prenom et l'age

ex de la seconde feuille

cellule/colonnes A B C
1 NOM1 PRENOM1 AGE1
2 NOM2 PRENOM2 AGE2
3 NOM3 PRENOM3 AGE3

Mon PB est que mon programme plante des que je demande de me renvoyer les infos de la seconde ligne et les suivantes.
J'aurai donc besoin d'un gentil coup de pouce s'il vous plait.
Voila mon bout de code :


Workbooks.Open ('second_fichier.xls')
Set classeurDestination = Workbooks('second_fichier.xls')
Set feuilleDestination = classeurDestination.Worksheets('feuille1')
Dim c As Range
Set c = feuilleDestination.Range('A:A')
booltrouve = True
impscore.Range('N1').Value = c.Offset(0, 0).Value
impscore.Range('P1').Value = c.Offset(0, 1).Value
impscore.Range('A1').Value = c.Offset(0, 2).Value

impscore.Range('N2').Value = c.Offset(1, 0).Value
impscore.Range('P2').Value = c.Offset(1, 1).Value
impscore.Range('A2').Value = c.Offset(1, 2).Value

etc...

P.S (1) je me demande si ce n'est pas le codage du c.Offset(1, 0).Value et suivant qui ne fonctionnent pas.

P.S(2) les cellulle N1, P1, etc.. correspondent aux cellules de la mcro initiale dans lesquelles on devrait retrouver le Nom1, le Prenom2, etc...

Merci de votre aide
 

Hervé

XLDnaute Barbatruc
Bonsoir olivier, pascal, le forum, la terre

Très difficile de répondre sans voir la totalité du code, mais cette syntaxe me surprend :

Set c = feuilleDestination.Range('A:A')
booltrouve = True
impscore.Range('N1').Value = c.Offset(0, 0).Value
impscore.Range('P1').Value = c.Offset(0, 1).Value
impscore.Range('A1').Value = c.Offset(0, 2).Value


tu définis un range c correspondant à la colonne entiere A, puis tu veux renvoyer les valeurs de A,B et C dans des cellules précises. mais sans boucle :eek:

Il nous faudrait un peu plus d'info, voir un fichier joint pour que l'on puisse t'aider.

salut
 

kolivier

XLDnaute Occasionnel
Bonjour HERVE et bonjour le Forum, Cher HERVE tu fus dans le passé celui qui solutionna tant de fois mes problemes, espérons que j'aurai autant de chances cette fois ci :) .

Donc voici les fichiers joints :
1.xls et 2.xls

Le plantage vient lorsque je souhaite que les infos de la ligne 2 sont transférées dans le fichier 1.xls à partir du fichier 2.xls.
Petite précision, cela fonctionne trés bien lorsque je met toutes le sinfos sur la meme ligne mais pas quand je les mets les unes et dessous des autres et c'est bien la mon souhait.

Merci encore pour votre patience.

Cordialement [file name=fichier_20051117155505.zip size=11162]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/fichier_20051117155505.zip[/file]
 

Pièces jointes

  • fichier_20051117155505.zip
    10.9 KB · Affichages: 41

Hervé

XLDnaute Barbatruc
salut olivier

Si j'ai bien compris ta demande, tu veux renvoyer toutes les données du classeur 2 vers le classeur 1, alors ce code devrait suffire :


Private Sub CommandButton1_Click()
Dim tablo As Variant

Workbooks.
Open ('2.xls')

With Workbooks('2.xls').Sheets('feuil1')
        tablo = .Range('a1:c' & .Range('a65536').End(xlUp).Row)
End With

Range(Cells(2, 1), Cells(UBound(tablo, 1) + 1,
UBound(tablo, 2))) = tablo

End Sub


salut
 

Hervé

XLDnaute Barbatruc
re

Lorsque l'on travaille avec plusieurs classeurs, il vaut mieux toujours faire référence à ceux-ci, remplace :

Range(Cells(2, 1), Cells(UBound(tablo, 1) + 1, UBound(tablo, 2))) = tablo

par :

Workbooks('1.xls').Sheets('feuil1').Range(Cells(2, 1), Cells(UBound(tablo, 1) + 1, UBound(tablo, 2))) = tablo


salut
 

kolivier

XLDnaute Occasionnel
Je te remercie je vais essayé de suite cependant je souhaiterai vraiement renvoyer unqieuement les cellules indiquées et pas un tableaux complet car dans mon programme defintif les infos présentes sur le 1.xls sont noyées parmis d'autres infos que je ne soit pas voir effacer en transferant les infos venues de 2.xls, mais je fais le test de suite et je te dis ca dans quelques instant.

Merci deja pour cette rapide réponse
 

kolivier

XLDnaute Occasionnel
Le transfert fonctionne mais je souhaitais en fait que les infos soient biens envoyées dans les cellules NOM1, PRENOM1, etc....
De sorte que le tableaus puisse se trouver n'importe ou dans la feuille et pas uniquement qu'il y ait une cope place pour place des infos de 2.xls vers 1.xls.

Si tu as une idée, merci d'avance.

Je vais quand meme voir si je ne peux pas adapter ton programme a ce que je veux car le plus dur est déja fait avec le transfert des lignes.

a tout de suite
 

kolivier

XLDnaute Occasionnel
¨je ne parviens pas a obtenir ce que je veux en modifiant ton programme car le tabloo est définie ici

tablo = .Range('a1:c' & .Range('a65536').End(xlUp).Row)

et aprés le transfert il retourne les infos dans le meme tablo.

Donc je te remercie pour cette methode mais pour mon programme il est essentiel que je puisse récupérer les infos quelques soit la place du tableau dans la feuille 1

Merci pour ta précieuse aide et celle de tout le forum

Si quelqu'un a une idée, il sera le bien venu
 

Hervé

XLDnaute Barbatruc
re olivier

J'ai énormément de difficulté à comprendre ou tu veux en venir.

tu devrais nous placer un classeur 1 avec le résultat escompté, ce serait plus simple.

bon, sinon, nouvelle tentative :)


Private Sub CommandButton1_Click()
Dim tablo As Variant
Dim i As Integer
Dim ligne As Integer
ligne = 2
Workbooks.
Open ('2.xls')
With Workbooks('2.xls').Sheets('feuil1')
        tablo = .Range('a1:c' & .Range('a65536').End(xlUp).Row)
End With
With Workbooks('1.xls').Sheets('feuil1')
       
For i = 1 To UBound(tablo)
                .Range('n' & ligne) = tablo(i, 1)
                .Range('p' & ligne) = tablo(i, 2)
                .Range('A' & ligne) = tablo(i, 3)
                ligne = ligne + 1
       
Next i
End With
End Sub


ce code copies les lignes du classeur2 vers le classeur 1, avec l'age en colonne A, le nom en colonne N et le prénon en colonne P.

salut
 

kolivier

XLDnaute Occasionnel
voila le ficher RESULAT 1.xls


Merci de ta patience [file name=1_20051117170214.zip size=9259]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/1_20051117170214.zip[/file]
 

Pièces jointes

  • 1_20051117170214.zip
    9 KB · Affichages: 38
K

KAOLIVIER

Guest
ME revoila HERVE et biensur tout le forum.

Je vous envoie ci-joint l'ensemble des fichiers 1.xls et 2.xls QUI FONCTIONNENT TRES BIEN TOUS LES DEUX :lol: :woohoo: :lol: :woohoo: .


MAIS IL Y A TOUJOURS UN MAIS, y a t il quelqu'un qui pourrait me dire comment faire pour simplifier mon programme surtout si j'ai 200 lines a mettre dans le 2.xls et que biensur je veuille les trnasferer dans le 1.xls


MERCI MILLES FOIS A TOUT LE MONDE et a HERVE comme DAB [file name=2_20051117182846.zip size=14279]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/2_20051117182846.zip[/file]
 

Pièces jointes

  • 2_20051117182846.zip
    13.9 KB · Affichages: 39

kolivier

XLDnaute Occasionnel
Re HERVE, aurais tu quelques instants pour me dire si il exsite une autre façon de programmer que celui que j'ai fais qui fonctionne trés bien mais qui me limite dans le nombre de ligne.

Le programme se trouve aussi en fichier joint

Merci beaucoup HERVE ou le FORUM biensur




------------------------
Private Sub CommandButton1_Click()
Dim MOIS1, MOIS
MOIS = imp1.Range('MOIS')
MOIS1 = imp1.Range('MOISAUJOURDHUI')
If MOIS <> MOIS1 Then
MsgBox ('VOUS DEVEZ METTRE A JOUR')
Workbooks.Open ('2.xls')
Set classeurDestination = Workbooks('2.xls')
Set feuilleDestination = classeurDestination.Worksheets('classement')
Dim c As Range
Set c = feuilleDestination.Range('A:A')
booltrouve = True
imp1.Range('NOM1').Value = feuilleDestination.Range('A1')
imp1.Range('PRENOM1').Value = feuilleDestination.Range('B1')
imp1.Range('AGE1').Value = feuilleDestination.Range('C1')


imp1.Range('NOM2').Value = feuilleDestination.Range('A2')
imp1.Range('PRENOM2').Value = feuilleDestination.Range('B2')
imp1.Range('AGE2').Value = feuilleDestination.Range('C2')


imp1.Range('NOM3').Value = feuilleDestination.Range('A3')
imp1.Range('PRENOM3').Value = feuilleDestination.Range('B3')
imp1.Range('AGE3').Value = feuilleDestination.Range('C3')


imp1.Range('NOM4').Value = feuilleDestination.Range('A4')
imp1.Range('PRENOM4').Value = feuilleDestination.Range('B4')
imp1.Range('AGE4').Value = feuilleDestination.Range('C4')


Rem ------- CETTE LIGNE PERMET DE LIMITER A UNE MISE A JOUR PAR MOIS ----
Rem imp1.Range('MOIS') = imp1.Range('MOISAUJOURDHUI')

classeurDestination.Close
End If
End Sub

[file name=2_20051117190824.zip size=14279]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/2_20051117190824.zip[/file]
 

Pièces jointes

  • 2_20051117190824.zip
    13.9 KB · Affichages: 33

Discussions similaires

Statistiques des forums

Discussions
312 392
Messages
2 088 004
Membres
103 693
dernier inscrit
vincs