VBA : lier l'ouverture d'un fichier au traitement de ce dernier

Fermé
reders Messages postés 7 Date d'inscription mardi 30 octobre 2012 Statut Membre Dernière intervention 30 octobre 2012 - 30 oct. 2012 à 10:25
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 - 30 oct. 2012 à 15:20
Bonjour,


Je cherche à faire un mini programme me permettant de faire du traitement de fichier excel. Pour cela, je désire créer un bouton qui va me permettre d'ouvrir le fichier excel en question puis d'appliquer les traitements à faire. Mais voilà mon problème : je ne parviens pas à faire le lien entre le fichier ouvert et les traitements à appliquer.
Quelqu'un pourrait me donner un coup de main?

voici mon début de code :


Sub essai()

Dim filetoopen As Variant
Dim mtestfic As Variant

resaisie1:

filetoopen = Application.GetOpenFilename(, , "Selectionner le fichier contenant les données", , False)
If filetoopen = "" Then
mtestfic = MsgBox("Vous n'avez pas saisi de nom de fichier cliquez sur OK pour resaisir annuler pour sortir", vbOKCancel)
If mtestfic = 2 Then
Exit Sub
End If
If mtestfic = 1 Then
GoTo resaisie1
End If
End If


Open filetoopen For Input As #1

' Determine la dernière ligne non vide
Dim DernLigne As Long
DernLigne = Range("c" & Rows.Count).End(xlUp).Row
MsgBox "Il y a " & DernLigne - 1 & " ND analogiques propres"

End Sub


Merci de votre aide. Cdlt. Jonathan
A voir également:

13 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 oct. 2012 à 10:56
Bonjour,

Un exemple de code

Sub essai()
  Dim reg1 As Variant
  Dim Wb As Workbook
  Dim mtestfic As Variant
  Dim DernLigne As Long

resaisie1:
  'Titre fenetre boite a dialogue a adapter
  reg1 = Application.GetOpenFilename(" classeur microsoft excel (*.xls), *.xls ", 2, "ouverture Fichier", True)
  Set Wb = Workbooks.Open(Filename:=reg1)
  Nom_Fichier = Wb.Name
   
  If Nom_Fichier = "" Then
    mtestfic = MsgBox("Vous n'avez pas saisi de nom de fichier cliquez sur OK pour resaisir annuler pour sortir", vbOKCancel)
    If mtestfic = 2 Then
      Exit Sub
    ElseIf mtestfic = 1 Then
      GoTo resaisie1
    End If
  End If
  'Nom de feuille a adapter
  With Workbooks(Nom_Fichier).Worksheets("feuil1")
    ' Determine la dernière ligne non vide
    DernLigne = .Range("c" & Rows.Count).End(xlUp).Row
    MsgBox "Il y a " & DernLigne - 1 & " ND analogiques propres"
  End With

End Sub


Bonne suite
0
reders Messages postés 7 Date d'inscription mardi 30 octobre 2012 Statut Membre Dernière intervention 30 octobre 2012
30 oct. 2012 à 13:01
Merci pour ton aide, mais tu le déclares comment Nom_Fichier?
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 oct. 2012 à 13:10
Re,

Dim Nom_Fichier suffira.

Bonne suite
0
reders Messages postés 7 Date d'inscription mardi 30 octobre 2012 Statut Membre Dernière intervention 30 octobre 2012
30 oct. 2012 à 13:36
ça ne marche pas, message d'erreur :

Erreur d'exécution '9':

L'indice n'appartient pas à la selection.

J'ai un peu recherché, et apparement cela viendrai de l'extension du fichier, pourtant c'est bien un fichier .xls
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 oct. 2012 à 13:49
Re,
A quel endroit s'arrete le programme????
0
reders Messages postés 7 Date d'inscription mardi 30 octobre 2012 Statut Membre Dernière intervention 30 octobre 2012
30 oct. 2012 à 14:00
Sub essai()
Dim reg1 As Variant
Dim Wb As Workbook
Dim mtestfic As Variant
Dim DernLigne As Long
Dim Nom_Fichier

resaisie1:
'Titre fenetre boite a dialogue a adapter
reg1 = Application.GetOpenFilename(" classeur microsoft excel (*.xls), *.xls ", 2, "ouverture Fichier", True)
Set Wb = Workbooks.Open(Filename:=reg1)
Nom_Fichier = Wb.Name

If Nom_Fichier = "" Then
mtestfic = MsgBox("Vous n'avez pas saisi de nom de fichier cliquez sur OK pour resaisir annuler pour sortir", vbOKCancel)
If mtestfic = 2 Then
Exit Sub
ElseIf mtestfic = 1 Then
GoTo resaisie1
End If
End If


' Determine la dernière ligne non vide
Dim DernLigne As Long
DernLigne = Range("c" & Rows.Count).End(xlUp).Row

' Conservation des ND ANA propres
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=7, Criteria1:="<>*ana*", Operator:=xlAnd
Rows("2:2" & DernLigne).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData
Selection.AutoFilter Field:=4, Criteria1:="<>"
Rows("2:2" & DernLigne).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData
Selection.AutoFilter Field:=9, Criteria1:="<>"
Rows("2:2" & DernLigne).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData

Range("D1").Select
ActiveCell.FormulaR1C1 = "ND (8 chifres)"
Range("C2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.TextToColumns Destination:=Range("C2"), DataType:=xlFixedWidth, _
FieldInfo:=Array(Array(0, 1), Array(1, 1)), TrailingMinusNumbers:=True
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft

' Determine la dernière ligne non vide
Dim DernLigneFinal As Long
DernLigneFinal = Range("c" & Rows.Count).End(xlUp).Row
MsgBox "Il y a " & DernLigneFinal-1 & " ND analogiques propres"


' traitement ND pour interrogation fichier d'extraction SEP
Range("D2").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(""01"",RC[-1])"
Selection.AutoFill Destination:=Range("D2:D" & DernLigneFinal)
Range("D2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' traitement ND pour interrogation PEC
Columns("E:E").Select
Selection.Insert Shift:=xlToRight
Range("E1").Select
ActiveCell.FormulaR1C1 = "PEC"
Range("E2").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(""aboin:nd="",RC[-2],"";"")"
Selection.AutoFill Destination:=Range("E2:E" & DernLigneFinal)
Range("E2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

End Sub


Le reste du programme est finalement que du traitement de texte
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 oct. 2012 à 14:05
Re,
Vous n'avez pas recopie correctement le code, il en manque un morceau.

'Nom de feuille a adapter
With Workbooks(Nom_Fichier).Worksheets("feuil1")
' Determine la dernière ligne non vide
DernLigne = .Range("c" & Rows.Count).End(xlUp).Row
MsgBox "Il y a " & DernLigne - 1 & " ND analogiques propres"
End With

Vous devez mettre tout votre code de traitement du fichier .xls que vous ouvrez entre :

'Nom de feuille a adapter
With Workbooks(Nom_Fichier).Worksheets("feuil1")

et

End With

C'est ce qui permet de vous "connecter" a ce fichier.

A+
0
reders Messages postés 7 Date d'inscription mardi 30 octobre 2012 Statut Membre Dernière intervention 30 octobre 2012
30 oct. 2012 à 14:13
ah oui, désolé, j'ai fait un mauvais copié collé, mais mon le programme était bien comme vous venez de me le dire, et j'ai toujours la même erreur
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 oct. 2012 à 14:27
Re,
Je repete donc la premiere question: a quelle ligne le programme s'arrete quand vous cliquez sur debugage de la boite a erreur???????

A+
0
reders Messages postés 7 Date d'inscription mardi 30 octobre 2012 Statut Membre Dernière intervention 30 octobre 2012
30 oct. 2012 à 14:39
c'est à cette ligne ci que le programme s'arrête :

With Workbooks(Nom_Fichier).Worksheets("feuil1")
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 oct. 2012 à 14:50
Re,

'Nom de feuille a adapter
With Workbooks(Nom_Fichier).Worksheets("feuil1")

dans votre fichier, le nom de la feuille est???????
0
reders Messages postés 7 Date d'inscription mardi 30 octobre 2012 Statut Membre Dernière intervention 30 octobre 2012
30 oct. 2012 à 14:55
le nom de la feuille est "Rapport1" dù coup, j'ai remplacé comme ceux ci ;

With Workbooks(Nom_Fichier).Worksheets("Rapport1")

et une autre erreur est apparue à la ligne :

Set Wb = Workbooks.Open(Filename:=reg1)

Erreur d'exécution '1004' :

Erreur définie par l'application ou par l'objet
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 oct. 2012 à 15:20
Re,
Si vous cliquez sur Annuler ou la croix de la boite a dialogue, vous avez cette erreur.

modifiez le code comme ci-dessous, c'est un peu capilotracte mais ca marche

resaisie1:
reg1 = Application.GetOpenFilename(" classeur microsoft excel (*.xls), *.xls ", 2, "ouverture Fichier", True)
'Annuler on boucle pour redemander
If reg1 = "Faux" Then GoTo resaisie1:


A+
0