Problème de RechercheV à partir de VB6

Signaler
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Bonjour,

Je rencontre un problème avec un code qui est lancé à partir d'un application VB6.

Losque je clique sur le Bouton VB6, qui contient ce code:
Private Sub cmdTranfertDe_Click()
Dim i As Integer, J As Integer
For i = 1 To Workbooks("test macro milages.xls").Sheets("Page1-1").UsedRange.Rows.Count
   If IsNumeric(Workbooks("test macro milages.xls").Sheets("Page1-1").Cells(i, "E").Value) Then
       For J = 1 To Workbooks("Classeur.xlsx").Sheets("Feuil1").UsedRange.Rows.Count
           If Workbooks("Classeur.xlsx").Sheets("Feuil1").Cells(J, "A").Value = Workbooks("test macro milages.xls").Sheets("Page1-1").Cells(i, "E").Value Then
               Workbooks("test macro milages.xls").Sheets("Page1-1").Cells(i, "U") = Workbooks("Classeur.xlsx").Sheets("Feuil1").Cells(J, "B").Value
               Exit For
           End If
       Next J
   End If
Next i
End Sub


Il me donne comme erreur: Erreur d'exécution 9: Indice en dehors de la plage.


Je m'explique.

Le code doit exporter des valeurs d'un des fichiers excel vers l'autres fichier si chaqunes des cellules de la colonne E correspond au cellule de la cellule du 2e fichier.

Bien entendu, les 2 fichier excel seront ouvert. De plus, j'ai aussi comme référence: Microsoft Excel 12.0 Object Library.


Merci encore por votre aide.

6 réponses

Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Je vais donner plus d'info

Dans mon premier fichier, test macro milages.xls, ps: sans macro", dans la colonne E, il y a des numéros ex: 01001, 01002, 01003 .......

Dans mon 2e fichier excel, colonne A, ce trouve aussi les numéros:
01001,01002,01003.........

Par contre, à coté de chaques numéro, dans la colonne B, il y a un autre numéro, ex: 1,2,3,4,5..........

Ce que je veux faire maintenant, c'est que tous les numéro de la colonne E du premier fichier excel, un après l'autre, regarde dans le 2e fichier excel colunne A afin de trouver la même valeur, s'il si trouve, la valeur de la colonne B, ira s'inscrire dans le 1er fichier excel, dans la colonne U.


Est-ce possible?
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
salut,

Workbooks("test macro milages.xls")

en principe ce n'est pas lié à un fichier mais à un objet excel quel est ton code d'ouverture du fichier? où est déclaré Workbooks?

[hr]
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Nul part
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
c'est réglé alors


regarde dans les sources existantes pour communiquer ("piloter") avec excel, CE SI TU ES VRAIMENT SOUS VB6 ET NON VBA, bien entendu

++
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
OK, je viens de travailler dessus ce code, qui, je crois est mieux.

Par contre, j'ai toujours un error 9: Indice en dehors de la plage, sur cette partie du code:
Set ws1 = excel.Workbooks("test macro milages.xls").Sheets("Page1-1")


Code complet:
Private Sub cmdTranfertDe_Click()
    Dim ws1     As Excel.Worksheet
    Dim ws2     As Excel.Worksheet
    Dim Range1  As Excel.Range
    Dim Range2  As Excel.Range
    Dim Cell1   As Excel.Range
    
    Set ws1 = Excel.Workbooks("test macro milages.xls").Sheets("Page1-1")
    Set ws2 = Excel.Workbooks("Classeur.xlsx").Sheets("Feuil1")
    
    Set Range1 = Excel.Intersect(ws1.Columns("E:E"), ws1.UsedRange)
    Set Range2 = Excel.Intersect(ws2.Columns("A:B"), ws2.UsedRange)
    
    On Error Resume Next '-- a good use of this in cases VLookup fails
    For Each Cell1 In Range1.Cells
        Cell1.Offset(0, 16).Value = Excel.Application.WorksheetFunction.VLookup(Cell1, Range2, 2, 0)
        '-- if VLookup fails, Cell1.Offset(0, 16) in column "U" is unchanged
        '-- if required the next line below can be used:
        'If Err Then Cell1.Offset(0, 16).Value = "": Err.Clear
    Next
    On Error GoTo 0
    
End Sub
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
ws déclaré ok, mais ni instancié (new), ni attaché à un objet excel (référence ou createobject)