[EXCEL - VBA] Err d'exec 9 : l'indice n'app.. [Résolu/Fermé]

Signaler
Messages postés
122
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
9 mars 2018
-
Messages postés
122
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
9 mars 2018
-
Bonjour,

Sur le principe, je scanne un répertoire pour récupérer tous les fichiers. : OK
J'identifie les fichiers excel : OK
Si les fichiers excel ont un onglet specifique "Saisie V9" (OK) alors je commence mon traitement qui plante.

En 1. Je calcule le nombre de fois ou il y a une valeur dans une colonne (TTC). ça ça marche.
En 2. Je dois récupérer la cellule a droite du TTC (montant) et le coller dans un autre classeur. Il faut donc passer d'un classeur actif a l'autre.

Et la j'ai ce message d'erreur qui se pose sur : "If Sheets("SAISIE V9").Range("E" & p) = "TTC" Then"

Si quelqu'un a une super idée car mon principe est simple, il faut que je récupère dans X classeurs les valeurs d'un onglet "Saisie V9" ou il y a TTC a droite de ces cellules. Vu que les cellules sont n'importe ou au niveau des lignes, je ne peux pas faire des récupération sur ces cellules prédéterminées.

Merci.


Le code :
Sub Recupdate3(m)
' calcule le nombre de fois ou il y a TTC
Dim Nom_Maitre2 As String
Dim Nom_Esclave2 As String

Sheets("Liste_2").Select

Nom_Maitre2 = ActiveWorkbook.Name
Nom_Esclave2 = Sheets("Liste_2").Cells(m, 3).Value

Workbooks.Open (Sheets("Liste_2").Cells(m, 2).Value)
Application.DisplayAlerts = False
Workbooks(Nom_Esclave2).Activate

ligne = 0
For o = 1 To 1000
If Sheets("SAISIE V9").Range("E" & o) = "TTC" Then ligne = ligne + 1
Next o

Call Recupdate4(m, ligne, Nom_Maitre2, Nom_Esclave2)
End Sub

Sub Recupdate4(m, ligne, Nom_Maitre2, Nom_Esclave2)
ligne2 = 0

For p = 1 To 1000
If Sheets("SAISIE V9").Range("E" & p) = "TTC" Then Workbooks(Nom_Esclave2).Activate
If Sheets("SAISIE V9").Range("E" & p) = "TTC" Then ligne2 = ligne2 + 1
If Sheets("SAISIE V9").Range("E" & p) = "TTC" Then Call Ligne_ref(ligne2, p, m, Nom_Maitre2, Nom_Esclave2)
Next p
End Sub
Function Ligne_ref(ligne2, p, m, Nom_Maitre2, Nom_Esclave2)

'MsgBox (ligne2)
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 1 Then AO = Sheets("SAISIE V9").Cells(3, 1).Value
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 1 Then AA = Sheets("SAISIE V9").Cells(p, 4).Value
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 2 Then AB = Sheets("SAISIE V9").Cells(p, 4).Value
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 3 Then AC = Sheets("SAISIE V9").Cells(p, 4).Value
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 4 Then AD = Sheets("SAISIE V9").Cells(p, 4).Value
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 5 Then AE = Sheets("SAISIE V9").Cells(p, 4).Value
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 6 Then AF = Sheets("SAISIE V9").Cells(p, 4).Value
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 7 Then AG = Sheets("SAISIE V9").Cells(p, 4).Value
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 8 Then AH = Sheets("SAISIE V9").Cells(p, 4).Value
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 9 Then AI = Sheets("SAISIE V9").Cells(p, 4).Value
If Sheets("SAISIE V9").Range("E" & p) = "TTC" And ligne2 = 10 Then AJ = Sheets("SAISIE V9").Cells(p, 4).Value

Application.DisplayAlerts = False
'Workbooks(Nom_Esclave2).Close (False)
Application.DisplayAlerts = False
Workbooks(Nom_Maitre2).Activate

Sheets("Liste_2").Cells(m, 7).Value = AO

Sheets("Liste_2").Cells(m, 8).Value = AA
Sheets("Liste_2").Cells(m, 9).Value = AB

Sheets("Liste_2").Cells(m, 10).Value = AC
Sheets("Liste_2").Cells(m, 11).Value = AD

Sheets("Liste_2").Cells(m, 12).Value = AE
Sheets("Liste_2").Cells(m, 13).Value = AF

Sheets("Liste_2").Cells(m, 14).Value = AG
Sheets("Liste_2").Cells(m, 15).Value = AH

Sheets("Liste_2").Cells(m, 16).Value = AI
Sheets("Liste_2").Cells(m, 17).Value = AJ

End Function



3 réponses

Messages postés
23666
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 novembre 2020
6 484
Bonjour,

tu pourrais préparer 2 fichiers exemple et les déposer sur cjoint.com
Coller ici le lien fourni.

eric
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 516
Bonjour,

Pour éviter ces problèmes "d'indice n'appartient pas à la sélection", tu peux utiliser des blocs With End With.
Exemple "àlacon" :
With WorkBooks("Classeur1.xls") 
     If .Sheets("Feuil1").Range("A1") = "Poireau" Then 
          .Sheets("Feuil2").Range("A2") = "Rien" 
     End If 
End With 
With WorkBooks("Classeur2.xls") 
     If WorkBooks("Classeur1.xls").Sheets("Feuil1").Range("A1") = "Poireau" Then 
          .Sheets("Feuil2").Range("A2") = "Rien" 
     End If 
End With

A noter l'utilisation des points .Sheets(machin) point = qui se réfère à l'objet du bloc With...

Cordialement,
Franck P
Messages postés
122
Date d'inscription
lundi 18 juin 2007
Statut
Membre
Dernière intervention
9 mars 2018
7
Super merci, je venais juste de me bidouiller une solution en concatenant les résultat dans une variable : séparé avec un "/" que je converti ensuite.

Je vais mettre en place votre méthode plus propre.
Merci beaucoup Eric et Franck.


Sub Recupdate3(m)

Dim Nom_Maitre2 As String
Dim Nom_Esclave2 As String

Sheets("Liste_2").Select

Nom_Maitre2 = ActiveWorkbook.Name
Nom_Esclave2 = Sheets("Liste_2").Cells(m, 3).Value

Workbooks.Open (Sheets("Liste_2").Cells(m, 2).Value)
Application.DisplayAlerts = False
Workbooks(Nom_Esclave2).Activate

ligne = 0
B = 0
A = 0
X = Sheets("SAISIE V9").Range("F3")
y = Sheets("SAISIE V9").Range("F4")
Z = Sheets("SAISIE V9").Range("A3")

For o = 1 To 1000
If Sheets("SAISIE V9").Range("E" & o) = "TTC" Then A = Sheets("SAISIE V9").Range("D" & o)
If Sheets("SAISIE V9").Range("E" & o) = "TTC" Then B = B & "/" & A
Next o

Application.DisplayAlerts = False
Workbooks(Nom_Esclave2).Close (False)
Application.DisplayAlerts = False
Workbooks(Nom_Maitre2).Activate

Sheets("Liste_2").Cells(m, 7).Value = X
Sheets("Liste_2").Cells(m, 8).Value = y
Sheets("Liste_2").Cells(m, 9).Value = Z
Sheets("Liste_2").Cells(m, 10).Value = B