Erreur d'exécution 9 : L'indice n'appartient pas.. Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
J
JBCHOLAT
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 6 juillet 2018
Version d'Excel : 2007

Message par JBCHOLAT » 6 juillet 2018, 11:20

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
Synthese marché_test.xlsm
(45.17 Kio) Téléchargé 2 fois
DSO Test.xlsx
(49.63 Kio) Téléchargé 3 fois
Modifié en dernier par JBCHOLAT le 9 juillet 2018, 08:34, modifié 3 fois.
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'450
Appréciations reçues : 428
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 6 juillet 2018, 11:27

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)))
Modifié en dernier par h2so4 le 6 juillet 2018, 11:28, modifié 1 fois.
j
jmd
Fanatique d'Excel
Fanatique d'Excel
Messages : 10'599
Appréciations reçues : 250
Inscrit le : 8 décembre 2007
Version d'Excel : 365 + PowerBI

Message par jmd » 6 juillet 2018, 11:28

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
Apprenez les fonctions d'Excel.
Exemple "Mettre sous forme de tableau", TCD, "Récupérer des données".
Apprendre les fonctionnalités "récentes".
J
JBCHOLAT
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 6 juillet 2018
Version d'Excel : 2007

Message par JBCHOLAT » 6 juillet 2018, 11:40

h2so4 a écrit :
6 juillet 2018, 11:27
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
J
JBCHOLAT
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 6 juillet 2018
Version d'Excel : 2007

Message par JBCHOLAT » 6 juillet 2018, 11:43

jmd a écrit :
6 juillet 2018, 11:28
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
J
JBCHOLAT
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 6 juillet 2018
Version d'Excel : 2007

Message par JBCHOLAT » 9 juillet 2018, 08:38

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
h
h2so4
Passionné d'Excel
Passionné d'Excel
Messages : 9'450
Appréciations reçues : 428
Inscrit le : 16 juin 2013
Version d'Excel : 365 UK Windows 10

Message par h2so4 » 9 juillet 2018, 10:40

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

1 membre du forum aime ce message.
J
JBCHOLAT
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 6 juillet 2018
Version d'Excel : 2007

Message par JBCHOLAT » 9 juillet 2018, 11:13

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
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message