Erreur execution 9

Résolu
renaud97434 Messages postés 31 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 26 août 2008 - 29 nov. 2007 à 07:37
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 - 29 nov. 2007 à 09:13
mon probleme: erreur 9 l'indice n'appartient pas à la selection.
suite à une copie de macro dans un autre projet.
j'ai deux projet: reporting cm et suivcm

dans le projet reporting cm j'au un userform. un bouton de commande vient appeler la macro lignes.
cette macro vient chercher des informatiosn dans deux feuilles recap et extract de suivcm.xls

voici le code et l'erreur est en rouge

Sub lignes()
Dim xl As New Excel.Application
xl.Visible = False
xl.Workbooks.Open ("C:\Documents and Settings\davezac\Bureau\reporting CM\suivcm.xls")
Dim plage As Range
Dim i  As Long
Dim j As Long
Dim s As Double
Dim t As Double
Dim u As Double
Dim v As Double
Dim w As Double
Dim x As Double
Dim y As Double
Dim z As Double
Dim a As Double
Dim b As Double
Dim c As Double
Dim d As Double
Dim e As Double
Dim f As Double
Dim g As Double
Dim h As Double
'initialisation des variables
i = 0
j = 0
s = 0
t = 0
u = 0
v = 0
w = 0
x = 0
y = 0
z = 0
a = 0
b = 0
c = 0
d = 0
e = 0
f = 0
g = 0
h = 0




Do While Worksheets("extract").Cells(i + 2, 4) <> ""

i = i + 1
If Sheets("recap").Cells(5, 9) <= Sheets("extract").Cells(i + 1, 4) And Sheets("extract").Cells(i + 2, 4) <= Sheets("recap").Cells(6, 9) And Sheets("extract").Cells(i + 1, 5) = .Sheets("recap").Cells(2, 9) Then


j = j + 1


s = s + Sheets("extract").Cells(i + 1, 18).Value
t = t + Sheets("extract").Cells(i + 1, 9).Value
u = u + Sheets("extract").Cells(i + 1, 10).Value
v = v + Sheets("extract").Cells(i + 1, 19).Value
w = w + Sheets("extract").Cells(i + 1, 20).Value
x = x + Sheets("extract").Cells(i + 1, 21).Value
y = y + Sheets("extract").Cells(i + 1, 11).Value
z = z + Sheets("extract").Cells(i + 1, 12).Value
a = a + Sheets("extract").Cells(i + 1, 13).Value
b = b + Sheets("extract").Cells(i + 1, 14).Value
c = c + Sheets("extract").Cells(i + 1, 17).Value
d = d + Sheets("extract").Cells(i + 1, 3).Value
e = e + Sheets("extract").Cells(i + 1, 6).Value
f = f + Sheets("extract").Cells(i + 1, 7).Value
g = g + Sheets("extract").Cells(i + 1, 8).Value
h = h + Sheets("extract").Cells(i + 1, 15).Value
Else
j = j
s = s
t = t
u = u
v = v
w = w
x = x
y = y
z = z
a = a
b = b
c = c
d = d
e = e
f = f
g = g
h = h
End If
Loop
Sheets("recap").Cells(14, 13).Value = i
Sheets("recap").Cells(15, 13).Value = j
Sheets("recap").Cells(17, 13).Value = s
Sheets("recap").Cells(18, 13).Value = t
Sheets("recap").Cells(19, 13).Value = u
Sheets("recap").Cells(20, 13).Value = v
Sheets("recap").Cells(21, 13).Value = w
Sheets("recap").Cells(22, 13).Value = x
Sheets("recap").Cells(23, 13).Value = y
Sheets("recap").Cells(24, 13).Value = z
Sheets("recap").Cells(25, 13).Value = a
Sheets("recap").Cells(26, 13).Value = b
Sheets("recap").Cells(27, 13).Value = c
Sheets("recap").Cells(28, 13).Value = d
Sheets("recap").Cells(29, 13).Value = e
Sheets("recap").Cells(30, 13).Value = f
Sheets("recap").Cells(31, 13).Value = g
Sheets("recap").Cells(32, 13).Value = h


End Sub
merci de m'éclairer...

6 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 nov. 2007 à 08:10
Salut,
Au vu de ce que tu as mis il me semble que:

"dans le projet reporting cm j'au un userform. un bouton de commande vient appeler la macro lignes.
cette macro vient chercher des informatiosn dans deux feuilles recap et extract de suivcm.xls"

La collection Worksheets se rapporte au classeur ou se trouve le code.

Et donc Worksheets("extract") ne permet pas d'atteindre la feuille extract de suivcm

De plus pourquoi utiliser une autre variable application?

Essaie peu être

Sub lignes()
Dim XlSuivcm As WorkBook
Set XlSuivcm = Application.Workbooks.Open("C:\Documents and Settings\davezac\Bureau\reporting CM\suivcm.xls")

   '... lereste
   
   
   'La boucle
   
   Do While XlSuivcm.Worksheets("extract").Cells(i + 2, 4) <> vbNullString
   
   '...
   Wend
 '... lereste

End Sub<hr />, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
renaud97434 Messages postés 31 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 26 août 2008
29 nov. 2007 à 08:25
merci ca marche.


 


mais je n'ai pas compris le set il sert à quoi?


uen autre question:
puis je remplacer une cellule (ici xlsuivcm.sheets("recap").cells(5.7) par la valeur d'un combo box?
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 nov. 2007 à 08:30
Re,
Le set permet d'affecter le résultat de Application.Workbooks.Open("C:\Documents and Settings\davezac\Bureau\reporting CM\suivcm.xls")
à la variable de type WorkBook

Pour ta deuxième question il va falloir développer un peu plus car jen'ai pas trop compris ce que tu souhaitais

@+: Ju£i?n
Pensez: Réponse acceptée
0
renaud97434 Messages postés 31 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 26 août 2008
29 nov. 2007 à 08:42
ok . merci avec ton explication je viens de comprendre.
mais ca veut dire qu'il faille toujours faire comme cela pour aller chercher un fichier xls différent...

pour le reste:
mon userform est enregistré dans le projet reportingcm.
mon userform utilise des combobox (avec liste déroulante).
j'en ai trois.
dans row source il faut que je mette une liste qui appartient au xlsuivcm.sheets("extract").range("dates")
avec dates=a1:a20 par exemple
cad aller chercher une liste dans un fichier différent.

j'ai saisi:
xlsuivcm.sheets("extract").range("dates") dans rowsource.
ca ne marche pas
dans la code du combobox1
j'ai fait:
rowsource= xlsuivcm.sheets("extract").range("dates")
marche pas non plus.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
29 nov. 2007 à 09:01
personnellement quand je dois faire des récups dans VB6 de données venant d'excel ou d'autocad je commence par les mettre dans un tableau avant de les traiter en local  je trouve cela bien plus simple à gérer ainsi car l'instanciation à excel (par le "set truc =...." je n'ai ainsi à la faire que le temps de cette récup de données.
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
29 nov. 2007 à 09:13
voici la réponse à une question semblable qu'a faite JMO  ( que je remercie ici pour sa précision et sa clarté)
le grand intéret c'est qu'il a résumé pratiquement toutes les lignes indispensables pour avoir une réponse et un comportement sain de excel qui bien qu'étant fait pas le créateur de VB6 et VBA  se comporte de façon très fantaisiste en automation

L'exemple ci-dessous facilement adaptable pour vb6 correspond au point 1.
- recherche des fichiers excel;
- ouverture du fichier;
- écriture cellule A10 dans tous les onglets.

Option Explicit
Dim strPath
strPath = "C:\SCRIPTS\Fichiers\Test"

Call FnRechercheFichiersExcel(strPath,Inputbox("saisie pour cellule A10",,Date))

MsgBox "script terminé"

'=========================================================
Function FnRechercheFichiersExcel(strPath, strSaisie)
Dim objFso, objFile, strListe
Set objFso = CreateObject("Scripting.FileSystemObject")

For Each objFile in objFso.GetFolder(strPath).Files
    If LCase(objFso.GetExtensionName(objFile.Path)) = "xls" then
       Call FnListeClasseur(objFile.Path, strSaisie)
    End if
Next
Set objFso = Nothing
End Function

Function FnListeClasseur(strPath, strSaisie)
Dim objExcel, objClasseur, i
Set objExcel = CreateObject("Excel.Application")
Set objClasseur = objExcel.WorkBooks.Open(strPath)
objExcel.DisplayAlerts = False 
objExcel.Application.Visible = False

For i = 1 To objClasseur.Sheets.Count
    objExcel.ActiveWorkbook.Worksheets(i).Select()
    objExcel.Cells(10,1).Value = strSaisie
Next

objExcel.ActiveWorkbook.SaveAs strPath
objExcel.ActiveWorkbook.Saved = True
objExcel.ActiveWorkbook.Close
objExcel.DisplayAlerts = True
objExcel.Application.Visible = True
Set objExcel = Nothing
Set objClasseur = Nothing
End Function

jean-marc
0
Rejoignez-nous