Problème importer des données
Résolu
Benny84
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Bonjour, j'essaie depuis quelques jours d'importer des données d'un fichier à l'autre et j'obtiens toujours un message d'erreur. Je ne suis pas assez avancé en programmation vba pour corriger mon problème. J'obtiens le message suivant : [Variable objet ou variable bloc With non définie (erreur 91)].
Mon message d'erreur arrive à : (OldTaux_1.Names("Nom_i").RefersToRange.Value = Varia)
Voici mon code :
Private Sub Importer_tout_Click()
Dim OldValidation As Worksheet, NewValidation As Worksheet
Dim monfichier As String, Nomdufichier As String
Dim entier As Long
Dim OldWb As Workbook, NewWb As Workbook
Dim OldTaux_1 As Worksheet, OldHist_1 As Worksheet, OldVie_1 As Worksheet, OldIld_1 As Worksheet
Dim NewTaux_1 As Worksheet, NewHist_1 As Worksheet, NewVie_1 As Worksheet, NewIld_1 As Worksheet
Dim Nom_i As String
Dim Varia As Variant
Application.ScreenUpdating = False
monfichier = Fichier_import.Value
'Obtenir le nom de l'ancien fichier dans le textbox
entier = Len(monfichier) 'le nombre de caractère dans mon fichier
Do Until Mid(monfichier, entier, 1) = "\"
entier = entier - 1
Loop
Nomdufichier = Right(monfichier, Len(monfichier) - entier) 'Permet d'obtenir le nom du fichier sans le début
Set NewWb = ActiveWorkbook
Set NewTaux_1 = GetWsFromCodeName(NewWb, "Sheet1")
Set NewHist_1 = GetWsFromCodeName(NewWb, "Sheet2")
Set NewVie_1 = GetWsFromCodeName(NewWb, "Sheet3")
Workbooks.Open (monfichier)
Set OldWb = Workbooks(Nomdufichier)
Set OldTaux_1 = GetWsFromCodeName(OldWb, "Sheet1")
Set OldHist_1 = GetWsFromCodeName(OldWb, "Sheet2")
Set OldVie_1 = GetWsFromCodeName(OldWb, "Sheet3")
For i = 1 To 2
Set Varia = Nothing
Workbooks(Nomdufichier).Activate
OldTaux_1.Names("Nom_i").RefersToRange.Value = Varia
Windows(NewWb).Activate
NewTaux_1.Names("Nom_i").RefersToRange.Value = Varia
Next i
OldWb.Close
Application.ScreenUpdating = True
End Sub
______________________
' Fonction importer le fichier dans la boîte
Private Sub Parcourir_Click()
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
UserForm1.Fichier_import.Text = .SelectedItems(1)
End With
End Sub
_______________________
Function GetWsFromCodeName(wb As Workbook, CodeName As String) As Excel.Worksheet
Dim ws As Excel.Worksheet
For Each ws In wb.Worksheets
If ws.CodeName = CodeName Then
Set GetWsFromCodeName = ws
Exit For
End If
Next ws
End Function
Merci bcp à l'avance !
Mon message d'erreur arrive à : (OldTaux_1.Names("Nom_i").RefersToRange.Value = Varia)
Voici mon code :
Private Sub Importer_tout_Click()
Dim OldValidation As Worksheet, NewValidation As Worksheet
Dim monfichier As String, Nomdufichier As String
Dim entier As Long
Dim OldWb As Workbook, NewWb As Workbook
Dim OldTaux_1 As Worksheet, OldHist_1 As Worksheet, OldVie_1 As Worksheet, OldIld_1 As Worksheet
Dim NewTaux_1 As Worksheet, NewHist_1 As Worksheet, NewVie_1 As Worksheet, NewIld_1 As Worksheet
Dim Nom_i As String
Dim Varia As Variant
Application.ScreenUpdating = False
monfichier = Fichier_import.Value
'Obtenir le nom de l'ancien fichier dans le textbox
entier = Len(monfichier) 'le nombre de caractère dans mon fichier
Do Until Mid(monfichier, entier, 1) = "\"
entier = entier - 1
Loop
Nomdufichier = Right(monfichier, Len(monfichier) - entier) 'Permet d'obtenir le nom du fichier sans le début
Set NewWb = ActiveWorkbook
Set NewTaux_1 = GetWsFromCodeName(NewWb, "Sheet1")
Set NewHist_1 = GetWsFromCodeName(NewWb, "Sheet2")
Set NewVie_1 = GetWsFromCodeName(NewWb, "Sheet3")
Workbooks.Open (monfichier)
Set OldWb = Workbooks(Nomdufichier)
Set OldTaux_1 = GetWsFromCodeName(OldWb, "Sheet1")
Set OldHist_1 = GetWsFromCodeName(OldWb, "Sheet2")
Set OldVie_1 = GetWsFromCodeName(OldWb, "Sheet3")
For i = 1 To 2
Set Varia = Nothing
Workbooks(Nomdufichier).Activate
OldTaux_1.Names("Nom_i").RefersToRange.Value = Varia
Windows(NewWb).Activate
NewTaux_1.Names("Nom_i").RefersToRange.Value = Varia
Next i
OldWb.Close
Application.ScreenUpdating = True
End Sub
______________________
' Fonction importer le fichier dans la boîte
Private Sub Parcourir_Click()
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
UserForm1.Fichier_import.Text = .SelectedItems(1)
End With
End Sub
_______________________
Function GetWsFromCodeName(wb As Workbook, CodeName As String) As Excel.Worksheet
Dim ws As Excel.Worksheet
For Each ws In wb.Worksheets
If ws.CodeName = CodeName Then
Set GetWsFromCodeName = ws
Exit For
End If
Next ws
End Function
Merci bcp à l'avance !
A voir également:
- Problème importer des données
- Fuite données maif - Guide
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Trier des données excel - Guide
- Importer favoris chrome - Guide
- Importer favoris firefox - Guide
3 réponses
Bonjour
Normal car Varia n'est pas définie (=nothing) !!!
Tu ne peux pas effacer la plage en faisant :
Il suffit de faire :
Patrice
Normal car Varia n'est pas définie (=nothing) !!!
Tu ne peux pas effacer la plage en faisant :
Set Varia = Nothing Workbooks(Nomdufichier).Activate OldTaux_1.Names("Nom_i").RefersToRange.Value = Varia
Il suffit de faire :
Workbooks(Nomdufichier).Activate OldTaux_1.Names("Nom_i").RefersToRange.ClearContentsCordialement
Patrice
Tout d'abord, merci beaucoup Patrice de m'aider. C'est énormément apprécié!
Effectivement c'était une erreur de ma part, j'ai créé un problème en voulant en régler un autre. Initialement, j'avais écris ceci :
For i = 1 To 2
NewTaux_1.Names("Nom_i").RefersToRange.Value = OldTaux_1.Names("Nom_i").RefersToRange.Value
Next i
C'est là mon réel problème ! :( Il y a quelque chose qui bloque !
Effectivement c'était une erreur de ma part, j'ai créé un problème en voulant en régler un autre. Initialement, j'avais écris ceci :
For i = 1 To 2
NewTaux_1.Names("Nom_i").RefersToRange.Value = OldTaux_1.Names("Nom_i").RefersToRange.Value
Next i
C'est là mon réel problème ! :( Il y a quelque chose qui bloque !
Cette formulation est meilleure mais le For ... Next est inutile. Le nom Nom_i existe-t-il dans les 2 classeurs ?
D'autre part, je ne comprends pas l'intérêt de définir les feuilles d'après leur CodeName qui me semblent génériques. A moins d'un cas spécifique, tu aurais le même résultat avec :
Set NewTaux_1 = NewWb.Worksheets(1)
D'autre part, je ne comprends pas l'intérêt de définir les feuilles d'après leur CodeName qui me semblent génériques. A moins d'un cas spécifique, tu aurais le même résultat avec :
Set NewTaux_1 = NewWb.Worksheets(1)