drouault
Messages postés73Date d'inscriptionsamedi 9 juillet 2005StatutMembreDernière intervention14 août 2007
-
18 juil. 2005 à 13:53
cs_69chris
Messages postés318Date d'inscriptionjeudi 30 janvier 2003StatutMembreDernière intervention30 décembre 2005
-
18 juil. 2005 à 16:48
Bonjour, j'ai besoin de me déplacer dans deux classeurs pour réaliser des opérations.
J'ai déclaré ces deux classeurss par :
Private WitEvents Class_Export as Excel.Workbook
Private WitEvents Class_Bord as Excel.Workbook
Ensuite quand je veux rendre actif l'un ou l'autre des deux classeurs pour les balayer, j'utilise:
Set Class_bord = ActiveWorkBook
Je lance ma boucle pour balayer une colonne dans le premier fichier, puis je lance une deuxiéme boucle à l'intérieur de la premiere boucle pour balayer le deuxième fichier afind e tester des correspondances et faire un comptage du nombre de correspondances.
Or je n'arrive pas à rendre actif le classeur que je souhaite, le premier ouvert reste toujours actif. Comment faire??
Et si quelqu'un à d'autres idées c'est le bienvenue car cette méthode est assez lourde pour l'ordinateur en temps d'éxécution.
Merci d'avance
drouault
Messages postés73Date d'inscriptionsamedi 9 juillet 2005StatutMembreDernière intervention14 août 2007 18 juil. 2005 à 16:32
Merci d'avoir jeter un oeil 69chris. Je ne vois pas comment me passer de l'activation car je vois pas où lui préciser que je change de classeur dans la boucle. Je t'ai mis mon bout de code si t'as un peu de temps pour regarder.
Et j'ai essayé de passer par une formule sur la fin mais ça ne marche pas mieux.
Dsl suis débutant en VB avec Excel.
Merci d'avance
18/07/2005 Code par balayage des cellules
Dim i As Long
Dim j As Long
Dim Code_art_bord As String
Dim Code_art_export As String
Dim compteur As Long
compteur = 0
'On rend le classeur et feuille actif sur lequel on souhaite balayer les enregistrements (fichier bordereau)
Set Class_bord = ActiveWorkbook
'Set Detail_art = ActiveWorkSheet
'On boucle dans cette plage pour balayer les codes articles
For i = 7 To 15
Code_art_bord = Cells(i, 6)
Set Class_Export = ActiveWorkbook
For j = 6 To 15
Code_art_export = Cells(j, 6)
Next j
Set Class_bord = ActiveWorkbook
If Code_art_bord = Code_art_export Then
compteur = compteur + 1
End If
MsgBox (compteur)
Next i
18/07/2005
Code avec l'utilisation d'une formule
Dim Col_calc_bord As Range
Set Col_calc_bord = Range(Cells(7, 11), Cells(250, 11))
cs_69chris
Messages postés318Date d'inscriptionjeudi 30 janvier 2003StatutMembreDernière intervention30 décembre 20051 18 juil. 2005 à 16:48
Pour moi, ça doit donner quelque chose comme ça. (j'ai modifier l'emplacement de comptage).
J'ai pas trop le temps de tester...
L'iddée , c'est d'utiliser l'accès aux cellule depuis le classeur
"wrkbook.Cells()". Comme ça, pas besoin d'activer. au passage, Set
Class_Export = ActiveWorkbook définit Class_Export au classeur
actif.... Pas trop ce que tu veux non? La méthode Activate est plus
adapté. N'ésite pas à consulter l'aide même si elle est pas sur sympa,
ça donne déjà une idée des méthodes/propriétés utilisables.
Workbooks(1) et (2) permet d'affecter le bon classeur à la bonne variable. A moins que ça soit déjà fait.
Pour "voire" un peu mieux, utilise le débuggeur. Point d'arret en
cliquant sur le côté gauche de l'éditeur et ensuite clicque droit sur
une variable et "ajouter un espion". La valeur s'affiche dans un
bandeau en dessous.
Dim iCptBord As Long
Dim iCptArt As Long
Dim Code_art_bord As String
Dim Code_art_export As String
Dim compteur As Long
Set Class_Export = Workbooks(1)
Set Class_bord = Workbooks(2)
compteur = 0
'On boucle dans cette plage pour balayer les codes articles