Erreur execution 9 [Résolu]

renaud97434 31 Messages postés lundi 26 novembre 2007Date d'inscription 26 août 2008 Dernière intervention - 29 nov. 2007 à 07:37 - Dernière réponse : pile_poil 682 Messages postés vendredi 6 avril 2007Date d'inscription 4 août 2012 Dernière intervention
- 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...
Afficher la suite 

Votre réponse

6 réponses

jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 29 nov. 2007 à 08:10
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jrivet
renaud97434 31 Messages postés lundi 26 novembre 2007Date d'inscription 26 août 2008 Dernière intervention - 29 nov. 2007 à 08:25
0
Utile
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?
Commenter la réponse de renaud97434
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 29 nov. 2007 à 08:30
0
Utile
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
Commenter la réponse de jrivet
renaud97434 31 Messages postés lundi 26 novembre 2007Date d'inscription 26 août 2008 Dernière intervention - 29 nov. 2007 à 08:42
0
Utile
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.
Commenter la réponse de renaud97434
pile_poil 682 Messages postés vendredi 6 avril 2007Date d'inscription 4 août 2012 Dernière intervention - 29 nov. 2007 à 09:01
0
Utile
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.
Commenter la réponse de pile_poil
pile_poil 682 Messages postés vendredi 6 avril 2007Date d'inscription 4 août 2012 Dernière intervention - 29 nov. 2007 à 09:13
0
Utile
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
Commenter la réponse de pile_poil

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.