ouverture de fichier a partir d'un bouton

  • Initiateur de la discussion romainchu78
  • Date de début
R

romainchu78

Guest
bonjour a tous,

Comme certains d'entre vous l'on deja vu je poste beaucoup de messages, en effet je travail actuellement sur un projet de tri de donnees et jai besoin d'aide pour developper ce projet. c'est pour cette raison que je me permet de poster de nombreux messages. Je posterais aussi le fruit de mon travail sur le forum une fois fini pour ceux qui veulent.

j'ai une autre requette:

Je souhaite, a partir d'un bouton (creer en visual basic) ouvrir un fichier excel et y copier des donnees. lorsque je clique sur le bouton, une fenetre windows d'explorateur apparait dans laquelle je peux selectionner mon fichier au travers les differents repertoire de momon pc. je souhaite ouvrir au max 10 fichiers excel et donc avoir 10 boutons.

je sais que c'est possible a faire, je l'ai deja vu, mais je sais pas le faire.
quelqu'un sais t'il comment le gerer?

merci beaucoup,
 
R

romainchu78

Guest
Ok merci pour le conseil.
jai effectivement trouve comment charger un fichier dans une variable. et maintenant je souhaiterais savoir comment travailler sur cette variable.

Private Sub Button_Click()
Dim QuelFichier2
QuelFichier2 = Application.GetOpenFilename('fichier excel, *.xls')
MsgBox QuelFichier
End Sub


le bouton 'Button' charge le contenu du fichier excel dans un variable 'QuelFichier2'. et maintenant je souhaiterais a partir dun autre bouton copier la colonne A du fichier 'QuelFichier2' dans ma feuille excel.

jai essaye ca ca ne marche pas:
Set CompareRange1 = QuelFichier2.Worksheets('feuil1').Range('A3:A200')
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir Romain, bonsoir à toutes et à tous :)

Non, Romain, le code que tu as écrit ne place pas le contenu du fichier sélectionné dans ta variable, mais uniquement son nom (avec chemin d'accès). Il te reste encore à ouvrir le fichier sélectionné puis à comparer les deux fichiers une fois ce dernier ouvert...

A+ ;)
 
R

romainchu78

Guest
en fait ce que je veux faire ces ouvrir 10 fichiers a partir d'un fichier excel pere et copier les colonnes A et B de chacun des fichiers ouvert (les 10) dans mon fichier excel pere.
ensuite pour le traitement des donnees jai fais mon programme, mais mon probleme c d'extraire les donnees des autres 10 fichiers excel.

peut tu m,aider sur cette partie ?
 

Charly2

Nous a quittés en 2006
Repose en paix
re,

Naturellement, le forum est un lieu d'échange et de partage, et je ne suis pas le seul à pouvoir t'aider.

Alors on récapitule :

[ul][li]tu as 10 classeurs dont tu ne connais pas à l'avance le nom (c'est ça ?)[/li]

[li]tu souhaites les ouvrir depuis un classeur XL (père) puis transférer les unes à la suite des autres toutes les données situées en colonnes A et B[/li]

[li]puis refermer les classeurs et continuer ton travail avec le classeur père.[/li][/ul]

Ai-je bien compris ?

A+ ;)
 
R

romainchu78

Guest
Idealement ce serais:

- jai 10 classeurs dont je ne connais pas à l'avance le nom. Seul la premiere feuille de chaque fichier m'interesse!

-je souhaite les ouvrir depuis un classeur XL (père) et idealement copier la premiere feuille de chaque fichier precedement ouvert et les coller dans mon fichier excel (pere). jaurais donc dans mon fichier (pere) (dans le cas ou jouvre 10 fichiers) 3 feuilles par default + 10 nouvelles feuilles. ces 10 nouvelles feuilles auront le nom du fichier dans lequel elles etaient.

-Fermer les 10 fichiers ouverts precedemment automatiquement (sans message de proposition de sauvegarde).

- transférer (copier-coller les un a la suite des autres) les colonnes A et B de chaque nouvelles feuilles dans ma premiere feuille default de mon fichier pere.

- continuer mon travail...

En resume l'utilisateur va:
- ouvrir manuellement les fichiers quils veux a partir du fichier pere et a partir dun bouton visual basic. un bouton pour tout les chargement. et si possible indiquer dans une case a cote du bouton le nom des fichiers ouvert. L'utilisateur pourra charger au max 10 fichiers.



Si cela est trop lourd a gerer, le resume que tu ma fait conviendra.

merci encore pour ton aide.
comme je l'ai dis precedemment, je mettrais mon boulot en ligne a l'issue.
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour Romain, bonjour à toutes et à tous :)

Bon, le délai est un peu dépassé mais le fichier est là :whistle:

Je te laisse lire les explications sur la première feuille et consulter le code pour l'adapter au besoin.

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

Tiens nous au courant.

A+ ;)
 

Pièces jointes

  • Romainchu78_V1.zip
    28.9 KB · Affichages: 59
R

romainchu78

Guest
Merci pour ton programme charlie, c'est au dela de mes esperances!
Cependant je souhaite faire copier coller de toutes les colonnes A des nouvelles feuilles cote a cote (et non les un en dessous des autres) dans une nouvelle feuille. et non plus les colonnes A et B.

je n'arrive pas a changer le code correctement pour y remedier dans la partie: 'Sub CopieDonnees(SheetName$())'.


Peut tu m'aider ?
 

Charly2

Nous a quittés en 2006
Repose en paix
Encore moi :)

Alors voilà la procédure modifiée :

Sub CopieDonnees(SheetName$())
'
Dim i%
Dim oPlageSource As Range
Dim ColDest&
'
  ' on commence en colonne A

  ColDest = 1
  For i = 1 To UBound(SheetName)
    If SheetName(i) ‹› '' Then

      With Sheets(SheetName(i))
        Set oPlageSource = .Range('A1:B' & .Range('A65536') _
              .End(xlUp).Row)
      End With

      With oPlageSource
        If (.Rows.Count > 1) Or Not (IsEmpty(.Item(1, 1))
              And IsEmpty(.Item(1, 2))) Then
          .Copy Sheets(NomFeuilleDest).Cells(Sheets(NomFeuilleDest) _
                    .Cells(1, ColDest).End(xlDown).Row Mod 65536 + 1, _
                    ColDest)

          ColDest = ColDest + 2
        End If
      End With

    End If
  Next i
End Sub

Voilà, plus long à écrire qu'à modifier ! Tu peux supprimer la déclaration de LigneDest et la remplacer par ColDest.

Les modifications sont en gras. J'ai prévu d'incrémenter ColDest de 2 à chaque fichier, mais tu peux modifier cela en fonction de tes souhaits (i.e. en laissant une colonne vide à chaque fois).

Si tu as des soucis, n'hésite pas.

EDITION : Mise en page et explications :

La ligne

Sh.Cells(Sh.Cells(1, ColDest).End(xlDown).Row Mod 65536 + 1, ColDest)

permet de copier (en partant de la colonne 1 lors de la première boucle) les données sur la première ligne vide. Cela signifie à fortiori que si tu effectues plusieurs fois la manip, les données se mettront à chaque fois sous celles précédemment copiées. Donc si tu rapatries plusieurs fois des données de fichiers différents, tu peux remplacer celles existantes en les effaçant avant la nouvelle copie ou en te plaçant après la dernière colonne remplie.

Pour effacer, tu mets en début de procédure :

Sheets(NomFeuilleDest.Cells.ClearContents

et si tu préfères aller après la dernière colonne précédemment remplie, tu remplaces l'initialisation de ColDest par

ColDest = Sheets(NomFeuilleDest).Range('IV1').End(xlToLeft).Column + ?
' Remplacer le ? par le décalage souhaité % à la dernière colonne

C'est tout ! :p

A+ ;)

Message édité par: Charly2, à: 28/03/2006 02:31

Message édité par: Charly2, à: 28/03/2006 03:03
 
R

romainchu78

Guest
Merci encore pour la qualite de ta reponse.
il y a eu un petit malentendu. il faut que je copie seulement la colonne A de chaque feuille de SheetName dans la feuille dont le nom
est stocké dans la constante NomFeuilleDest et déclarée au début du module. les colonnes doivent etre misent cote a cote (pour des raison de traitement dinfo par le suite).
Par exemple si je charge 3 feuilles de sheetname avec le bouton. je dois avoir les trois colonnes A des trois feuilles cote a cote dans la feuille dont le nom est stocké dans la constante NomFeuilleDest. :whistle: soit les colonnes A, B et C utilisees et surtout pas tout en enculade sur la colonne A.

je te dis ca maintenant c po tro malin de ma part, jaurais du te le dire des le debut, mais pour les besoins de mon etude jai finalement besoin de faire comme cela.

merci encore et a bientot...aller on tiens le bon bout !
 

Discussions similaires

Réponses
1
Affichages
212
Réponses
36
Affichages
2 K

Statistiques des forums

Discussions
312 305
Messages
2 087 088
Membres
103 463
dernier inscrit
neophyte_seb