[EXCEL - VBA] Err d'exec 9 : l'indice n'app..

Résolu
artamys Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   -  
artamys Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

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

    eric
    0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    0
  3. artamys Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   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
    0