Erreur d'exécution 9 : L'indice n'appartient pas
Bonjour à tous,
J'ai trouvé pas mal de sujets ouverts sur cette question mais malheureusement aucune des réponses ne m'ont permis de résoudre mon erreur.
Ce que je cherche à faire:
Je clique sur un bouton dans mon fichier de travail "Synthese marché_test.xlsm".
La fênetre de windows s'ouvre et je sélectionne le fichier à partir duquel je veux copier les datas "DSO Test".
Je stock mes datas dans des variables, je referme le fichier, et je colle ces datas dans mon fichier de travail "Synthese marché_test.xlsm".
L'erreur se produit lorsque je souhaite coller les datas dans mon fichier Synhèse marché.
C'est mon premier code VBA donc ça va peut-être piquer les yeux des experts...mais si l'un d'entre vous pouvez me filer un coup de main ce serait super.
Merci d'avance.
JB
Sub sniffer()
'Copy & paste a selection of data
'Déclaration des variables
Dim varDate As String
Dim country As String
Dim customerID As String
Dim customer As String
Dim pn As String
Dim description As String
Dim crcy As String
'------
Dim qty As Integer
Dim DSO As Variant
'------
Dim net_price As Currency
Dim customer_price As Currency
'------
Dim varFile As Variant
Dim varFilepath As Variant
Dim varTab As Variant
'------
Dim Ligne As Integer
Dim Cursor As Integer
Dim test As Boolean
'------
Dim x As Workbook
Dim y As Workbook
'---------------------------
'Ouvrir le fichier DSO
'varFile = Application.ActiveWorkbook.FullName
varTab = "Subsidiaries outside Europe"
varFilepath = Application.GetOpenFilename()
Set x = Workbooks.Open(varFilepath)
'---------------------------
'Chercher la premiere ligne du DSO
Cursor = 23
Do While (IsEmpty(x.Sheets(varTab).Cells(Cursor, 1)))
Cursor = Cursor + 1 'Le numéro est augmenté de 1 à chaque boucle
Loop
'---------------------------
'Copie des données statiques
'Copie date
varDate = x.Sheets(varTab).Range("Q2").Value
'Copie de country
country = x.Sheets(varTab).Range("U16").Value
'Copie customer
customer = x.Sheets(varTab).Range("C8").Value
'Copie customerID
customerID = x.Sheets(varTab).Range("C7").Value
'Copie pn
pn = x.Sheets(varTab).Cells(Cursor, 1).Value
'Copie description
description = x.Sheets(varTab).Cells(Cursor, 3).Value
'Copie qty
qty = x.Sheets(varTab).Cells(Cursor, 5).Value
'Copie net_price
net_price = x.Sheets(varTab).Cells(Cursor, 15).Value
'Copie customer_price
customer_price = x.Sheets(varTab).Cells(Cursor, 21).Value
'Copie crcy
crcy = x.Sheets(varTab).Range("Q16").Value
'Copie DSO
If Not IsEmpty(x.Sheets(varTab).Range("X2").Value) Then
DSO = x.Sheets(varTab).Range("X2").Value
Else
End If
'Fermeture du fichier DSO
x.Close
Set y = Workbooks("Synthese marché_test.xlsm")
'Le fichier étant déjà ouvert pas besoin d'utiliser Workbooks.Open
y.Activate
'---------------------------
'Chercher la prochaine ligne dispo dans le fichier synthèse
Ligne = 1
Do While Not (IsEmpty(y.Worksheets(DataBase).Cells(Ligne, 1)))
Ligne = Ligne + 1 'Le numéro est augmenté de 1 à chaque boucle
Loop
'---------------------------
'Collage des données statiques
'Coller date
y.Worksheets(DataBase).Cells(Ligne, 1).Value = varDate
'Coller country
y.Worksheets(DataBase).Cells(Ligne, 2).Value = country
'Coller customer
y.Worksheets(DataBase).Cells(Ligne, 3).Value = customer
'Coller customerID
y.Worksheets(DataBase).Cells(Ligne, 4).Value = customerID
'Coller pn
y.Worksheets(DataBase).Cells(Ligne, 5).Value = pn
'Coller description
y.Worksheets(DataBase).Cells(Ligne, 6).Value = description
'Coller qty
y.Worksheets(DataBase).Cells(Ligne, 7).Value = qty
'Coller net_price
y.Worksheets(DataBase).Cells(Ligne, 8).Value = net_price
'Coller customer_price
y.Worksheets(DataBase).Cells(Ligne, 9).Value = customer_price
'Coller crcy
y.Worksheets(DataBase).Cells(Ligne, 10).Value = crcy
'Coller DSO
y.Worksheets(DataBase).Cells(Ligne, 11).Value = DSO
End Sub
bonjour,
mets ton code entre les balises code (bouton </>
) dans le menu d'édition.
sinon je vois une erreur de syntaxe
Do While Not (y.IsEmpty(Worksheets(DataBase).Cells(Ligne, 1)))
devrait être
Do While Not (IsEmpty(y.Worksheets("DataBase").Cells(Ligne, 1)))
bonjour
je suppose que tu récupères chaque jour (ou mois) de nouvelles datas à ajouter à ton fichier
dès lors, pas de VBA, vénérable logiciel qui a fait son temps, pas fiable.
mets tous tes fichiers de datas dans le même répertoire
https://www.youtube.com/watch?v=gwW2CDdvUUs
menu Données, récupérer "répertoire"
c'est Power Query qui s'ouvre
tu trouveras des tutos sur le web
bonjour,
mets ton code entre les balises code (bouton
</>
) dans le menu d'édition.sinon je vois une erreur de syntaxe
Do While Not (y.IsEmpty(Worksheets(DataBase).Cells(Ligne, 1)))
devrait être
Do While Not (IsEmpty(y.Worksheets("DataBase").Cells(Ligne, 1)))
Bonjour à toi,
Merci pour cette réactivité c'est très sympa.
Je viens de mettre le code entre balise et de corriger l'erreur de syntaxe.
Merci d'avance.
JB
bonjour
je suppose que tu récupères chaque jour (ou mois) de nouvelles datas à ajouter à ton fichier
dès lors, pas de VBA, vénérable logiciel qui a fait son temps, pas fiable.
mets tous tes fichiers de datas dans le même répertoire
https://www.youtube.com/watch?v=gwW2CDdvUUs
menu Données, récupérer "répertoire"
c'est Power Query qui s'ouvre
tu trouveras des tutos sur le web
Bonjour jmd,
Merci pour ta réponse, je vais jeter un oeil à ce tuto.
Bonne journée.
JB
Bonjour tous le monde,
J'ai mis en pièce jointe les fichiers sur lesquels je travail.
J'ai peut-être créé une certaine confusion dans ma dernière réponse, l'erreur de syntaxe relevé par h2so4 ne résout pas le problème.
Une nouvelle fois merci pour votre aide.
Bonne journée.
JB
Bonjour,
, l'erreur de syntaxe relevé par h2so4 ne résout pas le problème.
il faut corriger toutes les instructions qui utilisent DataBase
soit tu définis ta variable Database
dim Database as string
Database="Database"
soit tu remplaces toutes les occurrences de Database
par "Database"
explication :
dans l'instruction
Worksheets(DataBase)
tu fais référence à la feuille dont le nom se trouve dans la variable Database
. Cette variable ne contient rien.
pour faire référence à la feuille nommée Database
sans passer par une variable, mettre le nom de la feuille entre "
Worksheets("DataBase")
Sub sniffer()
'Copy & paste a selection of data
'Déclaration des variables
Dim varDate As String
Dim country As String
Dim customerID As String
Dim customer As String
Dim pn As String
Dim description As String
Dim crcy As String
'------
Dim qty As Integer
Dim DSO As Variant
'------
Dim net_price As Currency
Dim customer_price As Currency
'------
Dim varFile As Variant
Dim varFilepath As Variant
Dim varTab As Variant
'------
Dim Ligne As Integer
Dim Cursor As Integer
Dim test As Boolean
'------
Dim x As Workbook
Dim y As Workbook
Dim Database As String
Database = "Database"
'---------------------------
'Ouvrir le fichier DSO
'varFile = Application.ActiveWorkbook.FullName
varTab = "Subsidiaries outside Europe"
varFilepath = Application.GetOpenFilename()
Set x = Workbooks.Open(varFilepath)
'---------------------------
'Chercher la premiere ligne du DSO
Cursor = 23
Do While (IsEmpty(x.Sheets(varTab).Cells(Cursor, 1)))
Cursor = Cursor + 1 'Le numéro est augmenté de 1 à chaque boucle
Loop
'---------------------------
'Copie des données statiques
'Copie date
varDate = x.Sheets(varTab).Range("Q2").Value
'Copie de country
country = x.Sheets(varTab).Range("U16").Value
'Copie customer
customer = x.Sheets(varTab).Range("C8").Value
'Copie customerID
customerID = x.Sheets(varTab).Range("C7").Value
'Copie pn
pn = x.Sheets(varTab).Cells(Cursor, 1).Value
'Copie description
description = x.Sheets(varTab).Cells(Cursor, 3).Value
'Copie qty
qty = x.Sheets(varTab).Cells(Cursor, 5).Value
'Copie net_price
net_price = x.Sheets(varTab).Cells(Cursor, 15).Value
'Copie customer_price
customer_price = x.Sheets(varTab).Cells(Cursor, 21).Value
'Copie crcy
crcy = x.Sheets(varTab).Range("Q16").Value
'Copie DSO
If Not IsEmpty(x.Sheets(varTab).Range("X2").Value) Then
DSO = x.Sheets(varTab).Range("X2").Value
Else
End If
'Fermeture du fichier DSO
x.Close
Set y = Workbooks("Synthese marché_test.xlsm")
'Le fichier étant déjà ouvert pas besoin d'utiliser Workbooks.Open
y.Activate
'---------------------------
'Chercher la prochaine ligne dispo dans le fichier synthèse
Ligne = 1
Do While Not (IsEmpty(y.Worksheets(Database).Cells(Ligne, 1)))
Ligne = Ligne + 1 'Le numéro est augmenté de 1 à chaque boucle
Loop
'---------------------------
'Collage des données statiques
'Coller date
y.Worksheets(Database).Cells(Ligne, 1).Value = varDate
'Coller country
y.Worksheets(Database).Cells(Ligne, 2).Value = country
'Coller customer
y.Worksheets(Database).Cells(Ligne, 3).Value = customer
'Coller customerID
y.Worksheets(Database).Cells(Ligne, 4).Value = customerID
'Coller pn
y.Worksheets(Database).Cells(Ligne, 5).Value = pn
'Coller description
y.Worksheets(Database).Cells(Ligne, 6).Value = description
'Coller qty
y.Worksheets(Database).Cells(Ligne, 7).Value = qty
'Coller net_price
y.Worksheets(Database).Cells(Ligne, 8).Value = net_price
'Coller customer_price
y.Worksheets(Database).Cells(Ligne, 9).Value = customer_price
'Coller crcy
y.Worksheets(Database).Cells(Ligne, 10).Value = crcy
'Coller DSO
y.Worksheets(Database).Cells(Ligne, 11).Value = DSO
End Sub
Un grand merci à h2so4!!!
Merci d'avoir pris le temps de me répondre. La journée s'annonce encore meilleur.
Bonne journée à toi.
JB