renaud97434
Messages postés31Date d'inscriptionlundi 26 novembre 2007StatutMembreDernière intervention26 août 2008
-
29 nov. 2007 à 07:37
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDerniè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
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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]
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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
renaud97434
Messages postés31Date d'inscriptionlundi 26 novembre 2007StatutMembreDernière intervention26 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 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.
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 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