mpmvb
Messages postés2Date d'inscriptionmardi 3 août 2010StatutMembreDernière intervention 6 août 2010
-
3 août 2010 à 15:18
mpmvb
Messages postés2Date d'inscriptionmardi 3 août 2010StatutMembreDerniè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
mpmvb
Messages postés2Date d'inscriptionmardi 3 août 2010StatutMembreDerniè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