Petite question pour la tenue d'un registre

mpmvb Messages postés 2 Date d'inscription mardi 3 août 2010 Statut Membre Dernière intervention 6 août 2010 - 3 août 2010 à 15:18
mpmvb Messages postés 2 Date d'inscription mardi 3 août 2010 Statut Membre Dernière intervention 6 août 2010 - 6 août 2010 à 13:31
Bonjour,

Je suis tout nouveau sur ce forum, et j'espère ne pas mettre planté de section pour commencer ...

Pour planter le décor :
Je suis en stage dans une communauté urbaine et je dois réaliser un registre sous excel (données en ligne), alimenté par différentes feuilles excel (données en colonne). La structure de ces feuilles est toujours la même, seul leur nom change. J'ai donc réaliser l'importation des données des fiches vers le registre sans soucis. Je vais chercher la fiche au travers d'un bouton disposé sur le registre.

Je ne pense pas être loin du but, mais je bloque sur deux points :
- Comment définir de manière variable le nom des fichiers à importer ?
- Lorsque qu'une ligne est remplie sur mon registre, comment importer la fiche suivante sur la ligne du dessous ?

Je vous met un extrait de mon script, si cela peut vous aider :


Sub import_fiche()

Dim Fichier_Travail As String, Fichier As String
Dim Msg, Style, Title, Help, Ctxt, Response, MyString

ChDrive CHEMIN

'Set une variable qui va contenir le nom et le chemin du fichier à ouvrir.
Fichier = Application.GetOpenFilename(", *xlWindows", 0, "Sélectionner le ficher de traitement souhaité") 'On ouvre la fenêtre et conserve le nom du fichier choisi dans une variable

'Test si un fichier a été sélectionné
If Fichier = "Faux" Then
Msg = "Aucun fichier de traitement sélectionné" ' Définit le message.
Style = vbOKOnly ' Définit les boutons.
Title = "Abandon de la procédure !" ' Définit le titre.
' Affiche le message.
Response = MsgBox(Msg, Style, Title)
Exit Sub 'Sort de la macro puisqu'aucun fichier n'a été sélectionné
Else 'Sinon, on ouvre le fichier sélectionné
Workbooks.OpenText Filename:=Fichier
Fichier_Travail = ActiveWorkbook.Name 'On donne à une variable le nom de ce fichier qu'on vient d'ouvrir.
End If
End Sub

Sub import_donnees_2()
'
'
'Reprise de la macro d'import de la fiche
Application.Run "Registre_traitements.xls!import_fiche"
'
'
'--------------------------------------------------------------------------
'
'Sélection de la case N° de traitement
Range("C30").Select
Selection.Copy
'Sélection du registre et de la case N° de traitement
Windows("Registre_traitements.xls").Activate
Range("A8").Select
Dim NextCell As Range
Set NextCell = ActiveCell
Do While NextCell <> ""
ActiveCell.Offset(1).Select
Set NextCell = ActiveCell
Loop
Set NextCell = Nothing
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
'__________________________________________________________________________

'Sélection de la fiche et de la case Nom
Windows("Fiche_traitement.xls").Activate
Range("C31").Select
Application.CutCopyMode = False
Selection.Copy
'Sélection du registre et de la case pour la copie du Nom
Windows("Registre_traitements.xls").Activate
Range("B8:C8").Select
Dim NextCell As Range
Set NextCell = ActiveCell
Do While NextCell <> ""
ActiveCell.Offset(1).Select
Set NextCell = ActiveCell
Loop
Set NextCell = Nothing
ActiveSheet.Paste

'Fermeture de la fiche de traitement et mise en avant du registre
Windows("Fiche_traitement.xls").Close
Windows("Registre_traitements.xls").Activate
End Sub


Si vous pouviez me donner un petit coup de main, je vous en serai grandement reconnaissant

Merci par avance

1 réponse

mpmvb Messages postés 2 Date d'inscription mardi 3 août 2010 Statut Membre Dernière intervention 6 août 2010
6 août 2010 à 13:31
Finalement j'ai trouvé solution à mes problèmes.
Je poste la solution ici si cela peut aider certains d'entre vous qui sont confrontés au même soucis que moi :)

Sub import_donnees_2()
'
Dim CheminCompletFichier As String
Dim NomFichier As String
Dim Fichier As Workbook                                                 'Défintion de la variable du classeur
Dim FeuilleEnCours As Worksheet                                         'Définition de la variable feuille sur laquelle on veut travailler
Dim Filtre As String                                                    'Quand on changera de version Excel ou de type de fichiers, on pourra modifier facilement le code
Dim Titre As String                                                     'Titre du MsgBox
 
LS_Filtre = "Excel (*.xls),*.xls,All Files (*.*),*.*"
Titre = "Sélectionner le fichier de traitement souhaité"

'Variable qui va contenir le nom complet du fichier => chemin inclus
CheminCompletFichier = Application.GetOpenFilename(FileFilter:=Filtre, FilterIndex:=5, Title:=Titre)
'Maintenant, on peut ouvrir le classeur et le stocker dans une variable de type workbook
Set Fichier = Workbooks.Open(CheminCompletFichier) 'Comme tu peux le voir, ici le nom du classeur (ce qui te coinçait) n'est même plus utile car on utilise directement la variable classeur
'Sélectionner la feuille 1
Fichier.Sheets(1).Select
'Mettre la feuille 1 dans une variable pour l'utiliser facilement
Set FeuilleEnCours = Fichier.Sheets(1)
'
'
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'                                       PARTIE COPIE DONNEES
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'
'
'Sélection de la case N° de traitement
    Fichier.Activate
    Range("C30").Select
    Application.CutCopyMode = False
    Selection.Copy
'Sélection du registre et de la case N° de traitement
    Windows("Registre_traitements.xls").Activate
    Range("A65536").Select                                  'Je démarre par la derniere cellule de la colonne A
    Selection.End(xlUp).Offset(1, 0).Select                 'Je me retrouve à la premiere cellule non vide de ma colonne
    Selection = Range("A8")                                 'La valeur de la première cellule trouvée  est égale à A8
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False


'___________________________________________________________________________
        
'Sélection de la fiche et de la case Nom
    Fichier.Activate
    Range("C31").Select
    Application.CutCopyMode = False
    Selection.Copy
'Sélection du registre et de la case pour la copie du Nom
    Windows("Registre_traitements.xls").Activate
    Range("B65536:C65536").Select                           'Je démarre par les dernieres cellules des colonnes B&C
    Selection.End(xlUp).Offset(1, 0).Select                 'Je me retrouve à la premiere cellule non vide de ma colonne
    Selection = Range("B8:C8")                              'La valeur de la première cellule trouvée est égale à B8:C8
    ActiveSheet.Paste

[...]
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'                                       FIN PARTIE COPIE DONNEES
'---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
'
'Fermeture de la fiche de traitement et mise en avant du registre
    Fichier.Close
    Windows("Registre_traitements.xls").Activate
End Sub


Bonne journée
0
Rejoignez-nous