Macro d'import [Résolu]

Signaler
Messages postés
22
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
10 mai 2010
-
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013
-
Bonjour,

j'ai un message d'erreur lorsque j'exécute la macro ci-dessous :

voici mon code dans Microsoft Visual Basic :
----------------------
Dim num_ligne As Integer
Dim zone_1 As String
Dim zone_2 As String
Dim zone_3 As String
Dim zone_4 As String
Dim zone_5 As String
Dim fic_n As String
Sub Import()
'
' Import Macro
' Importe les données
On Error Resume Next
num_ligne = 2
Do While Mid(Feuil1.Cells(num_ligne, 1), 1, 3) <> ""
zone_1 = Sheets("LIENS")(Feuil1.Cells(num_ligne, 1))
zone_2 = Sheets("LIENS")(Feuil1.Cells(num_ligne, 4))
zone_3 = Sheets("LIENS")(Feuil1.Cells(num_ligne, 5))
zone_4 = Sheets("LIENS")(Feuil1.Cells(num_ligne, 6))
zone_5 = Sheets("LIENS")(Feuil1.Cells(num_ligne, 7))
mon_classeur = ActiveWorkbook.Name
Application.ScreenUpdating = False
'Je teste si le fichier est déjà ouvert
Application.DisplayAlerts = False
On Error GoTo deja_ouvert
Workbooks.Open Filename:=Range(zone_1), UpdateLinks:=0
On Error GoTo 0
deja_ouvert:
Workbooks(mon_classeur).Activate
Sheets("SERVEUR").Range(zone_2).Value = Workbooks(zone_1).Sheets("SYNTHESE").Range(zone_4).Value
Sheets("SERVEUR").Range(zone_3).Value = Workbooks(zone_1).Sheets("SYNTHESE").Range(zone_5).Value
Workbooks(zone_1).Close (False)
num_ligne = num_ligne + 1
Loop
Sheets("LIENS").Select
MsgBox ("FIN")
End Sub
----------------------

Voici l'erreur qui s'affiche :
Erreur d'exécution '13' : Incompatibilité de type

Merci de votre aide.

37 réponses

Messages postés
147
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
15 avril 2011

Ça y est !
C'était une erreur bête... vraiment bête...
Voici la coupable :
zone_1 = Sheets("LIENS")(Feuil1.Cells(num_ligne, 1))
et maintenant la nouvelle :
zone_1 = Sheets("LIENS").Cells(num_ligne, 1)

Hein !?! Qui a honte ??! Bon bref...

Voici le code au final :
Sub Import()
'
' Import Macro
' Importe les données
Dim num_ligne As Integer
Dim Ville_Overture As String
Dim Ville As String
Dim zone_1 As String
Dim zone_2 As String
Dim zone_3 As String
Dim zone_4 As String
Dim fic_n As String


On Error Resume Next

num_ligne = 2

Do While Mid(Feuil1.Cells(num_ligne, 1), 1, 3) <> ""

Sheets("LIENS").Select
Ville_Overture = Sheets("LIENS").Cells(num_ligne, 1) 'C:\Users\IT.xls
Ville = Mid(Ville_Overture, InStrRev(Ville_Overture, "") + 1)
zone_1 = Sheets("LIENS").Cells(num_ligne, 4) 'B4:H4
zone_2 = Sheets("LIENS").Cells(num_ligne, 5) 'I4:O4
zone_3 = Sheets("LIENS").Cells(num_ligne, 6) 'M7:S7
zone_4 = Sheets("LIENS").Cells(num_ligne, 7) 'U7:AA7

mon_classeur = ActiveWorkbook.Name

Application.ScreenUpdating = False

'Je teste si le fichier est déjà ouvert
Application.DisplayAlerts = False
On Error GoTo deja_ouvert
Workbooks.Open Filename:=Ville_Overture, UpdateLinks:=0
On Error GoTo 0
deja_ouvert:
Workbooks(mon_classeur).Activate
Sheets("SERVEUR").Range(zone_1).Value = Workbooks(Ville).Sheets("SYNTHESE").Range(zone_3).Value
Sheets("SERVEUR").Range(zone_2).Value = Workbooks(Ville).Sheets("SYNTHESE").Range(zone_4).Value
Workbooks(Ville).Close (False)

num_ligne = num_ligne + 1

Loop

Sheets("LIENS").Select

MsgBox ("FIN")

End Sub

Comme tu peux le voir j'ai renommé plusieurs variables car la variable zone_1 correspondait à des noms ville, zone_2 correspondait au champ "zone 1", etc. Mais sinon ça ne change rien.

S Nikator
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

rajoute ca en début et a la fin de ton code et t'aura plus de messages d'alerte

application.DisplayAlerts=false

Code

application.DisplayAlerts=true
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
Bonjour,

N'ayant plus de marc de café à ma disposition, pourrais-tu donner la ligne sur laquelle se produit ton erreur.


Calade
Messages postés
22
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
10 mai 2010
1
Bonjour,

oui, pardon j'ai oublié de dire où se situe l'anomalie bloquante :

Sheets("SERVEUR").Range(zone_2).Value = Workbooks(zone_1).Sheets("SYNTHESE").Range(zone_4).Value

Merci beaucoup.
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
Bonjour,

A priori je pense que ce sont tes Range qui ont des valeurs inadéquates. Vérifie en exécutant pas à pas, les valeurs de zone_1, zone_2 et zone_4.

Un Range doit être indiqué au format String (ex: "A1" ou "A1:C4")


Calade
Messages postés
22
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
10 mai 2010
1
Bonjour,

j'ai remis le résultat des zone_1 etc... à côté avec un '

Merci de votre aide.


Sheets("LIENS").Select
zone_1 = (Feuil1.Cells(num_ligne, 1)) 'C:\User\IT.xls
zone_2 = (Feuil1.Cells(num_ligne, 4)) 'B4:H4
zone_3 = (Feuil1.Cells(num_ligne, 5)) 'I4:O4
zone_4 = (Feuil1.Cells(num_ligne, 6)) 'M7:S7
zone_5 = (Feuil1.Cells(num_ligne, 7)) 'U7:AA7
Messages postés
1207
Date d'inscription
dimanche 20 avril 2003
Statut
Membre
Dernière intervention
4 juin 2016
10
J'ai l'impression que ce ne sont pas des string. Vérifie et éventuellement convertis les.


Calade
Messages postés
22
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
10 mai 2010
1
ce sont des cellules au format texte, c'est bon ?
Merci.
Messages postés
147
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
15 avril 2011

Ton problème viens de ta variable zone_1. Pour ne pas déclencher d'erreur elle doit contenir "IT.xls" et non pas "C:\User\IT.xls"

S Nikator
Messages postés
22
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
10 mai 2010
1
Bonjour,

oui mais le souci est que "C:\user\IT.xls" est bien le chemin que je veux chercher : comment faire ?

Merci.
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

Salut,
Ce serait pas plutôt :

Workbooks.Open Filename:Range(zone_1 ).VALUE , UpdateLinks:0

Cdt
Rataxes64
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

Ou encore

Workbooks.Open Filename:=zone_1, UpdateLinks:=0
(sans Range)

Cdt
Rataxes64
Messages postés
147
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
15 avril 2011

zone_1 = (Feuil1.Cells(num_ligne, 1))
zone_1 = Mid(zone_1, InStrRev(zone_1, "") + 1)

La cellule n'est pas modifié mais zone_1 contient juste "IT.xls"

Pour Info :
- InStrRev renvoie la dernière position d'un ou plusieur caractère dans une chaine (String).
- Mid découpe une chaine.


S Nikator
Messages postés
147
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
15 avril 2011

je suis pas encore réveille, je voulais dire :

zone_1 = Sheets("LIENS")(Feuil1.Cells(num_ligne, 1))
zone_1_bis = Mid(zone_1, InStrRev(zone_1, "") + 1)
'...
Workbooks.Open Filename:=Range(zone_1), UpdateLinks:=0 
'...
Sheets("SERVEUR").Range(zone_2).Value = Workbooks(zone_1_bis).Sheets("SYNTHESE").Range(zone_4).Value


S Nikator
Messages postés
147
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
15 avril 2011

(Jamais deux sans trois)
[quote=Rataxes64]Workbooks.Open Filename:=zone_1, UpdateLinks:=0
(sans Range) /quote
zone_1 = Sheets("LIENS")(Feuil1.Cells(num_ligne, 1))
zone_1_bis = Mid(zone_1, InStrRev(zone_1, "") + 1)
'...
Workbooks.Open Filename:=zone_1, UpdateLinks:=0 
'...
Sheets("SERVEUR").Range(zone_2).Value = Workbooks(zone_1_bis).Sheets("SYNTHESE").Range(zone_4).Value


Ce coup ci c'est la bonne


S Nikator
Messages postés
377
Date d'inscription
lundi 3 avril 2006
Statut
Membre
Dernière intervention
22 août 2018

Oui, il ne fallait pas utiliser Range ici, mais fazpedro a écrit :

oui mais le souci est que "C:\user\IT.xls" est bien le chemin que je veux chercher : comment faire

Il faut donc garder Zone_1 comme il l'a fait, non ?

Cdt
Rataxes64
Messages postés
147
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
15 avril 2011

non non. S'il utilise zone_1_bis tout ira bien


S Nikator
Messages postés
22
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
10 mai 2010
1
Bonjour,
j'ai modifié le code comme ceci :
Sub Import()
' Import Macro
' Importe les données
On Error Resume Next
num_ligne = 2
Do While Mid(Feuil1.Cells(num_ligne, 1), 1, 3) <> ""
Sheets("LIENS").Select
zone_1 = Sheets("LIENS")(Feuil1.Cells(num_ligne, 1)) 'C:\Users\IT.xls
zone_1_bis = Mid(zone_1, InStrRev(zone_1, "") + 1)
zone_2 = (Feuil1.Cells(num_ligne, 4)) 'B4:H4
zone_3 = (Feuil1.Cells(num_ligne, 5)) 'I4:O4
zone_4 = (Feuil1.Cells(num_ligne, 6)) 'M7:S7
zone_5 = (Feuil1.Cells(num_ligne, 7)) 'U7:AA7
mon_classeur = ActiveWorkbook.Name
Application.ScreenUpdating = False
'Je teste si le fichier est déjà ouvert
Application.DisplayAlerts = False
On Error GoTo deja_ouvert
Workbooks.Open Filename:=zone_1, UpdateLinks:=0
On Error GoTo 0
deja_ouvert:
Workbooks(mon_classeur).Activate
Sheets("SERVEUR").Range(zone_2).Value = Workbooks(zone_1_bis).Sheets("SYNTHESE").Range(zone_4).Value
Sheets("SERVEUR").Range(zone_3).Value = Workbooks(zone_1).Sheets("SYNTHESE").Range(zone_5).Value
Workbooks(zone_1).Close (False)
num_ligne = num_ligne + 1
Loop
Sheets("LIENS").Select
MsgBox ("FIN")
End Sub
-----------------
il s'arrête sur la ligne :
Sheets("SERVEUR").Range(zone_2).Value = Workbooks(zone_1_bis).Sheets("SYNTHESE").Range(zone_4).Value

Message d'erreur :
Erreur d'exécution '9' : l'indice n'appartient pas à la sélection
-----------------------
Merci.
Messages postés
147
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
15 avril 2011

Pour me guider teste l'une après l'autre chacune de ligne et dit moi lesquels foncionnent et lesquels ne foncionnent pas
Debug.Print Sheets("SERVEUR").Range(zone_2).Value
Debug.Print Sheets("SERVEUR").Name
Debug.Print Workbooks(zone_1_bis).Sheets("SYNTHESE").Range(zone_4).Value 
Debug.Print Workbooks(zone_1_bis).Sheets("SYNTHESE").Name
Debug.Print Workbooks(zone_1_bis).Name 


Pour tester, place la ligne à tester juste avant
Sheets("SERVEUR").Range(zone_2).Value = Workbooks(zone_1_bis).Sheets("SYNTHESE").Range(zone_4).Value 

comme ceci
Debug.Print Sheets("SERVEUR").Range(zone_2).Value
Sheets("SERVEUR").Range(zone_2).Value = Workbooks(zone_1_bis).Sheets("SYNTHESE").Range(zone_4).Value 


S Nikator
Messages postés
22
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
10 mai 2010
1
S Nikator,

j'ai mis tes lignes ci-dessus mais elles ne fonctionnent pas sauf la ligne suivante qui ne revoie pas de message d'erreur :
Debug.Print Sheets("SERVEUR").Name