Problème importer des données

Résolu/Fermé
Benny84 Messages postés 3 Date d'inscription jeudi 23 mai 2013 Statut Membre Dernière intervention 24 mai 2013 - 23 mai 2013 à 19:43
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 24 mai 2013 à 17:29
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 !
A voir également:

3 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
Modifié par Patrice33740 le 23/05/2013 à 23:50
Bonjour

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.ClearContents
Cordialement
Patrice
0
Benny84 Messages postés 3 Date d'inscription jeudi 23 mai 2013 Statut Membre Dernière intervention 24 mai 2013
24 mai 2013 à 02:51
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 !
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
Modifié par Patrice33740 le 24/05/2013 à 17:01
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)
0
Benny84 Messages postés 3 Date d'inscription jeudi 23 mai 2013 Statut Membre Dernière intervention 24 mai 2013
Modifié par Benny84 le 24/05/2013 à 17:24
C'était ça le problème ! J'ai du changer également la macro qui allait chercher le nom et je l'ai remplacé par la cellule. Maintenant mon code fonctionne bien !

Merci beaucoup pour ton aide ! Je t'en suis très reconnaissant.

Benoit
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 778
24 mai 2013 à 17:29
De rien, au plaisir de te relire sur le Forum

Cordialement
Patrice
0