Comparer 2 classeurs , dont 1 fermé

CAPRI_456

XLDnaute Occasionnel
Bien le bonsoir à tous ,

Le vba repris ici colorie automatiquement dans feuille 'Detail' les données si elles sont retrouvées dans la feuille 'ListeKWE'
en conservant cette dernière couleur.

Cela marche parfaitement car, les deux feuilles sont dans le classeur ouvert.

Comment faire alors :
-- si la feuille 'liste KWE' se trouve dans un classeur fermé autre que la feuille 'Détail', mais dans le même répertoire = 1ère difficulté

--- si la liste doit comprendre 90.000 lignes alors que le max est de 65.......par feuille .. je pense créer 45000 lignes sur chaque feuille et donc il faut que la VBA teste successivement les lignes de chaque feuille
= 2ème difficulté

Si vous avez l'un ou l'autre tuyau ?? Merci d'avance pour vos réflexions

Capri_456
 

MichelXld

XLDnaute Barbatruc
bonsoir

Pour la 1ere partie de ta question, tu peux tester le classeur joint
( j'espere tu n'as pas trop de lignes dans le Feuille 'details' sinon le temps de calcul risque d'etre long)


pour la 2eme partie de ta question , d'ou viennent les 90000 lignes : d'une autre application ? d'un fichier texte ? d'une base Access ?
Ce serait plus pratique d'effectuer la requete dans une base Access


bonne soirée
MichelXld [file name=comparerClasseurs.zip size=44473]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/comparerClasseurs.zip[/file]
 

Pièces jointes

  • comparerClasseurs.zip
    43.4 KB · Affichages: 135
C

CAPRI_456

Guest
Bsoir le forum, merci MichelXLD pour l'avancée,

la recherche des cel identiques se fait bien
mais comment faire au lieu d'afficher toute la ligne en rouge :

ds le classeur fermé, certaines cel du champ 4 sont de couleur :soit en rouge(3) ,soit en vert (6)
après 'clic sur le bouton' elles sont comparées au champ 3 du classeur ouvert
, si lignes identiques elles se colorient , mais IL FAUT /
1--- que les couleurs données dans le classeur fermé apparaissent dans le classeur ouvert(champ3)
2--- que si des couleurs sont modifiées(par période) dans ce classeur fermé, les changements sont pris en compte , après clic sur le bouton

Merci pour votre aide [file name=classeurOuvert2.zip size=13669]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/classeurOuvert2.zip[/file]
 

Pièces jointes

  • classeurOuvert2.zip
    13.3 KB · Affichages: 68
C

CAPRI_456

Guest
Bonsoir le Forum,Michel XLD

Je vais essayer d'être plus clair et je joins donc deux petits fichiers 1 ouvert 'PAN1' l'autre fermé 'PAN2'

DANS LE CLASSEUR PAN1
Lors de la vente des articles, sur base de mon rélevé des factures, je voudrais que la VBA recherche les cellules identiques dans le stock , donc:

sur identité champs HS code et Article (entre PAN1 et PAN2) -- attribution de la couleur qui existe au sein du stock (PAN2) rouge ou vert et report dans les col C et D de PAN 1

sur identité champs HS code et Article (entre PAN1 et PAN2) --
MAIS absence de couleur sein du stock (PAN2)
..... COLORER EN GRIS en PAN1

sur champs HS code et Article dans (PAN1) et non retrouvés dans (PAN2 )... colorer en JAUNE dans (PAN1) [file name=PAN1.zip size=30414]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/PAN1.zip[/file]
 

Pièces jointes

  • PAN1.zip
    29.7 KB · Affichages: 72

MichelXld

XLDnaute Barbatruc
bonjour

Comme je l'ai déja indiqué dans mon précédent message : il n'est pas possible de lire ou d'agir sur les formats de cellules d'un fichier fermé


à la place des couleurs de cellules dans le classeur fermé , il faudrait que tu ajoutes une colonne qui reprenne un 'code strategie' et ensuite filtrer les requetes à partir de ce parametre

en reprenant ton classeur fermé tu ajoutes une colonne dont l'entete est 'CodeStrategie' dans la colonne 4 , et chaque cellule contient un 'x' pour par exemple remplacer la couleur rouge ,'y' pour la couleur verte ...


ce qui donne dans ton projet :


'Necessite d'activer la reference 'Microsoft ActiveX Data Object 2.x Library'
'Menu Outils
'References
'Coche la ligne Microsoft ActiveX Data Object 2.x Library
'x dépend de la version installée sur ton poste
'Clique sur OK pour valider
'
'
Dim Rs As ADODB.Recordset
Dim Cn As String, Cible As String, Fichier As String
Dim j As Integer, x As Integer, i As Integer

Fichier = ThisWorkbook.Path & '\\\\\\\\Pan2.xls'

'parametres pour la connection au classeur fermé
Cn = 'DRIVER={Microsoft Excel Driver (*.xls)};' & _
'ReadOnly=1;DBQ=' & Fichier & ';' & 'extended properties=''Excel 8.0;'''

'derniere ligne non vide dans la colonne C du classeur ouvert
x = Range('C65536').End(xlUp).Row

Application.ScreenUpdating = False

'la procedure va boucler sur toutes les lignes du classeur ouvert et controler
'si une ligne identique existe dans le classeur fermé
For i = 2 To x

If Not Cells(i, 3) = '' Then
'parametrage de la requete pour comparer les lignes du classeur fermer
'avec le tableau du classeur ouvert
Cible = 'SELECT * FROM [Feuil1$] WHERE ' & _
'[HS code]='' & Cells(i, 3) & '' AND ' & _
'[Article]='' & Cells(i, 4) & '''

Set Rs = New ADODB.Recordset
Rs.Open Cible, Cn, adOpenKeyset

If Not Rs.EOF Then
Select Case Rs.Fields(3).Value 'CodeStrategie dans colonne 4
Case 'x'
Range(Cells(i, 3), Cells(i, 4)).Interior.ColorIndex = 3
Case 'y'
Range(Cells(i, 3), Cells(i, 4)).Interior.ColorIndex = 4
Case Else
Range(Cells(i, 3), Cells(i, 4)).Interior.ColorIndex = 15
End Select
End If

Rs.Close
Set Rs = Nothing
End If
Next i

Application.ScreenUpdating = True




bonne journée
MichelXld
 

CAPRI_456

XLDnaute Occasionnel
Bonsoir le Forum, Bsoir MichelXLD

Merci... pour la 'stratégie' à développer pour accéder et comparer les données identiques trouvées dans un classeur fermé en y ajoutant un 'CodeStratégie' en col 4.

J'ai adapté mon code, mais VBA débogueur m'affiche msg erreur de compilation
'TYPE DEFINI NON DEFINI PAR L'UTILISATEUR

en pointant la ligne de code
'Dim Rs As ADODB.Recordset'

Da quoi s'agit-il

Merci pour l'aide
 

CAPRI_456

XLDnaute Occasionnel
merci Michel XLD, le FORUM

petite case à cocher, grands effets. La Stratégie que tu as developpé fonctionne à merveille

Jusqu'au 'boutiste' JE SUIS <<<<et dernière Q? sur ce sujet d'action sur un classeur fermé.

Comment insérer une ligne de code qui me dit,,,
si je compare col 3 et 4 (cl.ouvert) à (cl.fermé)
et qu'il n'y a pas identité (donc pas retrouvé dans cl fermé ---colorer en jaune col 3 et 4 du cl ouvert

en clair,,, si non identite et non code ds col codeStrategie donc jaune en col 3 et 4

merci 1000 x pour cette derniere contribution
 

MichelXld

XLDnaute Barbatruc
bonjour

dans ce cas tu peux ajouter

If Not Rs.EOF Then
Select Case Rs.Fields(3).Value 'CodeStrategie dans colonne 4
Case 'x'
Range(Cells(i, 3), Cells(i, 4)).Interior.ColorIndex = 3
Case 'y'
Range(Cells(i, 3), Cells(i, 4)).Interior.ColorIndex = 4
Case Else
Range(Cells(i, 3), Cells(i, 4)).Interior.ColorIndex = 15
End Select

Else
Range(Cells(i, 3), Cells(i, 4)).Interior.ColorIndex = 6

End If


bonne journée
MichelXld
 

CAPRI_456

XLDnaute Occasionnel
bsoir Michel XLD, le Forum

Parfait cela à marché dans mes fichiers exemples
mais lorsque j'utilise mon fichier original

bug... qui signale

Erreur d’exécution ‘-21247217887 (80040e21)’ :
Ce pilote ne prend pas en charge les propriétés demandées

Puis affiche en jaune la commande dans le debogage
Rs.Open Cible, Cn, adOpenKeyset


De quoi s'agit-il
 

MichelXld

XLDnaute Barbatruc
bonjour

je ne saisi pas : je n'ai pas vu ton classeur original ....
compare les 2 versions et cherches les différences entre les classeurs .

le code erreur est 21247217887 ou 2147217887 ?

est ce que tu as des cellules qui contiennent plus de 255 carateres dans le classeur fermé ?


bonne journée
MichelXld
 

CAPRI_456

XLDnaute Occasionnel
bonsoir MichelXLD, le Forum,

j'ai vérifié et n'ai pas constaté de discordances dans mes fichiers postés et mes fichiers réels
si ce n'est que la feuille 1 comporte 35000 lignes
je l'ai teste en résuisant à 1155 lignes et le msg d'erreur est toujours le même

--le message d'erreur est effectivement
2147217887 (80040e 21)
-- je n'ai pas de cellules > à 255 car.ds le classeur fermé

je joins les 2 classeurs pour le test

mERCI POUR L'aide
 

Discussions similaires

Statistiques des forums

Discussions
312 391
Messages
2 087 984
Membres
103 690
dernier inscrit
LeDuc