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
10dso-test.xlsx (49.63 Ko)

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

Rechercher des sujets similaires à "erreur execution indice appartient pas"