Comparaison de 2 classeurs: ouverture de ces classeurs

Bonjour tout le monde,

je cherche a comparer les valeurs de cellules de 2 fichiers differents, mais je pense que je ne sais toujours pas les ouvrir malgre les differents cas trouves sur differents forums: j'ai une erreur d'execution 424 "objet requis" lors de l'affectation du fichier de depart (wk1) d'ou je lance le code:

Sub Step2()

' Partie declaration de variables
Dim ws1 As Worksheet, ws2 As Worksheet
Dim wk1 As Workbook, wk2 As Workbook
Dim Cel1 As Range, Cel1s As Range
Dim Cel2 As Range, Cel2s As Range
Dim i1 As Long, i2 As Long, nl1 As Long, nl2 As Long
Dim i As Long, al As Long
Dim text As String

' Declaration du classeur d'entree
    Set wk1 = Workbook.Open("C:\Users\katia\Desktop" & "Tableau suivi obso Test.xlsm")
' Declaration de la feuille qui contient les donnees: ws1
    Set ws1 = Worksheets("Substance")
' Declaration du classeur de destination
    Set wk2 = Workbook.Open("C:\Users\katia\Desktop" & "Arborescence.xlsx")
' Declaration de la feuille de destination
    Set ws = wb.Sheets("Arbo")

' Determination du nombre de lignes du fichier de depart
    wk1.ws1.Activate
    nl1 = Range("K" & Rows.Count).End(xlUp).Row
    MsgBox ("Nombre de ligne fichier depart:" & nl1)

' Determination du nombre de lignes dans le fichier d'arrivee
    wk2.ws2.Activate
    nl2 = Range("C" & Rows.Count).End(xlUp).Row
    MsgBox ("Nombre de ligne fichier arrivee:" & nl2)

' Determination du nombre de lignes

    Set Cel1s = ws1.Range("K5" & ":K" & nl1)

     i = 1
     For Each Cel1 In Cel1s
        If Not IsEmpty(Cel1) Then
        text = Cel1.Offset(0, -2)
           MsgBox (i & "  -->  " & Cel1 & " texte= " & text)
        End If
        i = i + 1
     Next Cel1

End Sub

J'ajoute ne pas etre du tout familier avec Windows en general et VBA en particulier... c'est pourquoi la structure du programme peut vous paraitre stupide...

Merci de votre aide, Philippe.

Hello,

Déjà,

' Declaration du classeur d'entree
    Set wk1 = Workbook.Open("C:\Users\katia\Desktop" & "Tableau suivi obso Test.xlsm")
Set ws1 = Worksheets("Substance")
' Declaration du classeur de destination
    Set wk2 = Workbook.Open("C:\Users\katia\Desktop" & "Arborescence.xlsx")

Tu n'as pas d'antislash entre desktop et le nom de ton fichier, je ne vois pas comment il peut aller plus loin.
En plus, si le nom du fichier n'est pas dans une variable, aucune raison de partager ton code en 2 parties.

Essaie :

' Declaration du classeur d'entree
    Set wk1 = Workbook.Open("C:\Users\katia\Desktop\Tableau suivi obso Test.xlsm")
Set ws1 = Worksheets("Substance")
' Declaration du classeur de destination
    Set wk2 = Workbook.Open("C:\Users\katia\Desktop\Arborescence.xlsx")

Merci de ta reponse JoyeuxNoel, mais cela ne fonctionne pas, meme en "concatenant" les 2 chaines avec le "\"... j'ai toujours le meme type d'erreur...

Vu le message d'erreur, je me demandais si les wk, declares en workbook, n'avaient pas une autre nature?

Je ne suis pas assez familier avec VBA pour bien comprendre la nature des differentes variables...

Si vous avez d'autrs idees je suis preneur ^^'

Oh, je me suis focalisé sur le chemin et je n'ai pas fait attention à ça :

c'est Workbooks.open, avec un s à la fin.

Ah oui, c'est beaucoup mieux, merci infiniment :)

Comment savoir s'il ouvre effectivement ces 2 fichiers (dont le courant ici, j'espere qu'ouvrir un fichier deja ouvert ne pose pas de probleme)? Car je veux faire imprimer le nombre de lignes du fichier de depart et de celui de destination, mais rien ne se produit?

Je redonne le code car je me suis apercu qu'il y avait des erreurs dans certains noms de variables de la partie declaration (toutes ces variables ne servent pas encore!).

Merci encore!

Sub Step2()

' Partie declaration de variables
Dim ws1 As Worksheet, ws2 As Worksheet
Dim wk1 As Workbook, wk2 As Workbook
Dim Cel1 As Range, Cel1s As Range
Dim Cel2 As Range, Cel2s As Range
Dim i1 As Long, i2 As Long, nl1 As Long, nl2 As Long, nl As Long
Dim i As Long, al As Long
Dim text As String

' Declaration du classeur d'entree
    Set wk1 = Workbooks.Open("C:\Users\katia\Desktop\Tableau suivi obso Test.xlsm")
' Declaration de la feuille qui contient les donnees: ws1
    Set ws1 = Worksheets("Substance")
' Declaration du classeur de destination
    Set wk2 = Workbooks.Open("C:\Users\katia\Desktop\" & "Arborescence.xlsx")
' Declaration de la feuille de destination
    Set ws2 = wk2.Workdheets("Arbo")

' Determination du nombre de lignes du fichier de depart
    wk1.ws1.Activate
    nl1 = Range("K" & Rows.Count).End(xlUp).Row
    MsgBox ("Nombre de ligne fichier depart:" & nl1)

' Determination du nombre de lignes dans le fichier d'arrivee
    wk2.ws2.Activate
    nl2 = Range("C" & Rows.Count).End(xlUp).Row
    MsgBox ("Nombre de ligne fichier arrivee:" & nl2)

' Parcourt de la colonne K
    wk1.ws1.Activate
    Set Cel1s = ws1.Range("K5" & ":K" & nl1)

    i = 1
    For Each Cel1 In Cel1s
       If Not IsEmpty(Cel1) Then
          text = Cel1.Offset(0, -2)
          MsgBox (i & "  -->  " & Cel1 & " texte= " & text)
       End If
       i = i + 1
    Next Cel1

End Sub

Alors non, si un des fichiers est le fichier actif, il faudra que tu mettes

Set wk1 = activeworkbook

Ca peut etre wk2, bien entendu.

À aucun moment tu ne lui demandes d'imprimer.
T'as l'air de faire une usine à gaz pour pas grand chose, non?

J'ai d'enormes lacunes: je pensais que

wk1.ws1.Activate

permettait d'avoir le bon classeur & la bonne feuille actifs (et de meme pour wk2.ws2 pour le classeur de destination), mais je ne comprends pas pourquoi cela ne fonctionne pas? Quelle difference (a part la syntaxe differente) avec

Set wk1 = activeworkbook

Par deformation d'autres langages, je pensais que la syntaxe wk1.ws1.Activate ouvrait et rendait "actif" le fichiers avec la feuille qui nous interesse, mais cela ne semble pas etre le cas...

Cela est une usine a gaz car le programme doit parcourir 2 colonnes du fichier 1 cellule par cellule, et comparer chacune de ces cellules aux valeurs des cellules d'une colonne du fichier 2, si c'est egal alors il faut inscrire un commentaire du fichier 1 dans le fichier 2.... Quand ca marchera il sera temps de voir comment le simplifier ;)

Pour l'instant, le code explorait les colonnes du fichier 1 et donnait le nombre de lignes a explorer ainsi que le contenu des cellules de la colonne K. J'ai commence a ecrire le programme sans variable de worknook ou worksheet et ce que je voulais fonctionne correctement, c'est le passage d'un classeur a l'autre qui semble est le noeud du probleme...

Sinon, tu peux essayer de t'inspirer de ça, qui marche :

Sub test()

Dim ws1, ws2 As Worksheet

Set ws1 = ThisWorkbook.Worksheets("Substance")
ws1.Activate
Set ws2 = Workbooks.Open("C:\Users\katia\Desktop\Arborescence.xlsx").Worksheets("Arbo")
Ws2.activate
End Sub

Mais effectivement, si un spécialiste peut expliquer pourquoi Wk1.ws1.activate ne fonctionne pas, je suis preneur !

Et attention, tu as écrit Workdheets

Set ws2 = wk2.Workdheets("Arbo")

Ce que tu propose fonctionne en effet tres bien:

' Declaration du classeur d'entree
'    Set wk1 = Workbooks.Open("C:\Users\katia\Desktop\Tableau suivi obso Test.xlsm")
' Declaration de la feuille qui contient les donnees: ws1
    Set ws1 = Worksheets("Substance")
    nl1 = Range("K" & Rows.Count).End(xlUp).Row
    MsgBox ("Nombre de ligne fichier depart: " & nl1)

' Declaration du classeur de destination
    Set wk2 = Workbooks.Open("C:\Users\katia\Desktop\" & "Arborescence.xlsx")
' Declaration de la feuille de destination
    Set ws = wk2.Worksheets("Arbo")
    nl2 = Range("C" & Rows.Count).End(xlUp).Row
    MsgBox ("Nombre de ligne fichier arrivee: " & nl2)

Mais cela risque de ne pas repondre a mon probleme, puisqu'il me faut naviguer entre les 2 classeurs pour chaque colonne. C'est pour cela qu'il y a une boucle qui me permet d'explorer les cellules de la colonne K du fichier 1, mais pour chaque cellule je dois pouvoir lire les cellules du fichier 2 afin de les comparer: il faut donc que je passe a chaque increment d'un fichier a l'autre, et pour l'instant je ne vois pas comment... je pensais mettre dans la boucle le "activate", que je trouvais deja lourd, mais si en plus il faut redefinir a chaque fois les wk et ws cela me parait encore plus lourd...

Je vais tacher de regarder cela de plus pres, s'il y a des idees je suis preneur!

Et en tous les cas merci JoyeuxNoel, je suis redevenu optimiste!

Rechercher des sujets similaires à "comparaison classeurs ouverture"