Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Achat - Vente Divers : clemzz, aurelien, rahasiyam, pseudo7594 et 24 utilisateurs inconnus

 Mot :   Pseudo :  
 
 Page :  1  2  3  4
Page Précédente 
Auteur
 Sujet :

comparer des colonnes suivant une condition

 
n°13901
startom
Profil : Jeune recrue
Posté le 27-06-2005 à 11:45:23  profilanswer
 

BOnjour à tous,
 
Je vais vous exposer un problème qui me soul depuis un moment car j'ai besoin de cette macro mais je ne m'en dépatouille pas! :fou:  :pt1cable:  
Et pourtant ca a pas l'air compliqué,le truc c'est que je suis mauvais en vba (en fait, je débute) :whistle:  
 
Voila le truc:
j'ai deux feuilles excel, deux bases de données (db1 et db2)
objectif : mettre en évidence dans la db1 les nouveautés, cad les données que l'on ne trouve pas dans db2.
dans la db1, c'est la colonne 1 qui m'intéresse et que je dois comparer à 4 colonnes de db2 (mais par ligne!) pour savoir si le contenu d'une cellule de col1/db1 se trouve quelquepart dans les 4 col de db2.
 
sans code ca donne ca:  
 
comparer db1/L1C1 avec db2/L1C1 puis db2/L1C2 (si infructueux) puis db2/L1C3 (si infructueux) puis db2/L1C4 (si infructueux)
puis on fait pareil sur toues les ligne de db2 jusqu'à trouver une ligne où le contenu de db1/L1C1 est trouvé.
Alors si ce contenu est trouvé, on peut passer à la ligne suivante.
 
car ce qui m'intéress c'est ce qui n'est pas trouvé.
en effet, si le contenu de db1/L1C1 n'est pas trouvé, je le mets en couleur comme ca, les nouveautés sautent aux yeux.
 
ca m'avait l'air simple mais...
a marche pas !  
 
 
merci vraiment bocou de votre aide, je suis la pour toutes questions supplémentaires
bonnne journée
 
BANZAI!!
 
 

n°13913
galopin01
Profil : Membre
Posté le 27-06-2005 à 21:22:35  profilanswer
 

bonsoir,
Une solution :

Code :
  1. Sub Test()
  2. Dim iLR1%, iLR2%, i%, j%, k%, z$, Tablo
  3. 'Gèle l'écran pour accélérer le traitement
  4. Application.ScreenUpdating = False
  5. 'Détermination de la dernière ligne de chaque feuille
  6. iLR1 = Worksheets("DB1" ).Cells(65535, 1).End(xlUp).Row
  7. iLR2 = Worksheets("DB2" ).Cells(65535, 1).End(xlUp).Row
  8. 'Charge en mémoire les valeurs de DB2
  9. Tablo = Worksheets("DB2" ).Range("A2:D" & iLR2)
  10. With Worksheets("DB1" )
  11. 'Colorie toute les cellules en rouge
  12. .Range("A2:A" & iLR1).Interior.ColorIndex = 3
  13. 'Pour chaque ligne dans DB1
  14. For i = 2 To iLR1
  15. 'Mémorise la valeur de la cellule
  16. z = .Cells(i, 1).Value
  17.   'Parcourt le tableau et recherche l'égalité
  18.   For j = 1 To UBound(Tablo)
  19.     For k = 1 To 4
  20.       'si trouve une égalité pose un drapeau
  21.       If Tablo(j, k) = z Then Y = True
  22.     Next
  23.   's'il y a un drapeau décolore la cellule
  24.   If Y Then
  25.   .Cells(i, 1).Interior.ColorIndex = xlColorIndexNone
  26.   'remet le drapeau à Faux
  27.   Y = False
  28.   'et arrête l'examen du tableau
  29.   Exit For
  30.   End If
  31.   Next
  32. 'recommence sur les valeurs suivantes de DB1
  33. Next
  34. End With
  35. End Sub

Ce n'est pas vraiment une solution de débutant, mais comme j'ignorais si tu avais quelques lignes, ou plusieurs milliers de lignes à traiter, j'ai tout de suite fait pour plusieurs milliers...
Important : Cette macro doit être collée dans un nouveau module Standart (Module1) par exemple
La macro est faite avec les noms de feuille DB1 et DB2 correspondant aux bases de données. A toi d'adapter à tes noms de feuilles réels.
La macro commence à travailler ligne 2 dans chaque feuille.  
Pour commencer à travailler ligne 7 dans DB1 et ligne 9 dans DB2 il faut modifier la macro comme suit :

Code :
  1. Tablo = Worksheets("DB2" ).Range("A9:D" & iLR2)
  2. With Worksheets("DB1" )
  3. .Range("A7:A" & iLR1).Interior.ColorIndex = 3
  4. For i = 7 To iLR1

Enfin il ne t'aura pas échappé que j'ai suivi la démarche inverse. Je commence par colorier toutes les cellules pour décolorer les doublons : Il est plus simple de travailler sur les doublons que sur les restes...
A+


---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°13918
galopin01
Profil : Membre
Posté le 28-06-2005 à 04:41:10  profilanswer
 

Re !
Pour la route, je t'ai refait la même façon débutant :

Code :
  1. Sub Test2()
  2. Dim iFR1%, iFR2%, iLR1%, iLR2%, i%, j%, k%, F1$, F2$, z$
  3. 'Gèle l'écran pour accélérer le traitement
  4. Application.ScreenUpdating = False
  5. 'Détermination de la première ligne de chaque feuille
  6. iFR1 = 2 'Ligne de Départ de DB1
  7. iFR2 = 2 'Ligne de Départ de DB2
  8. 'Détermination des noms de feuille
  9. F1 = "DB1"
  10. F2 = "DB2"
  11. 'Détermination de la dernière ligne de chaque feuille
  12. iLR1 = Worksheets(F1).Cells(65535, 1).End(xlUp).Row
  13. iLR2 = Worksheets(F2).Cells(65535, 1).End(xlUp).Row
  14. 'Colorie toute les cellules en rouge
  15. Worksheets(F1).Range("A" & iFR1 & ":A" & iLR1).Interior.ColorIndex = 3
  16. 'Pour chaque ligne dans DB1
  17. For i = iFR1 To iLR1
  18. 'Mémorise la valeur de la cellule
  19. z = Worksheets(F1).Cells(i, 1).Value
  20.   'Parcourt DB2 et recherche l'égalité
  21.   For j = iFR2 To iLR2
  22.     For k = 1 To 4
  23.       'si trouve une égalité pose un drapeau
  24.       If Worksheets(F2).Cells(j, k) = z Then Y = True
  25.     Next
  26.   's'il y a un drapeau décolore la cellule
  27.   If Y Then
  28.   Worksheets(F1).Cells(i, 1).Interior.ColorIndex = xlColorIndexNone
  29.   'remet le drapeau à Faux
  30.   Y = False
  31.   'et arrête l'examen du tableau
  32.   Exit For
  33.   End If
  34.   Next
  35. 'recommence sur les valeurs suivantes de DB1
  36. Next
  37. End Sub

De la même manière tu as juste à régler les lignes de départ et les noms de feuilles sur :

Code :
  1. iFR1 = 2
  2. iFR2 = 2
  3. F1 = "DB1"
  4. F2 = "DB2"

Pour info j'ai testé les 2 macros sur 1000 lignes.
Pour Sub Test : moins d'une seconde...
Pour Sub Test2 : 22 secondes
Tu fais comme tu comprends !
A+
 
 


---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°13919
startom
Profil : Jeune recrue
Posté le 28-06-2005 à 07:59:06  profilanswer
 

:bounce:  :bounce:  
 
bonjour galopin01
 
MERCI  
vraiment un grand merci, une réponse le lendemain, je n'en attendais vraiment pas tant,  
c'était si facile que ca? j'ai pas encore testé les réponses mais j'admire le geste qui est vraiment tout à ton honneur, je teste la réponse aujourd'hui.
Si j'arrive à m'en servir et si tu le désires, je me ferais une joie de te citer dans mon rapport car je suis en ce moment en stage (ingénieur matériaux) et il ya une partie remerciements dans mon rapport...
 
je te tiens au courant, une dernière fois, merci bocoup
 
PS: au cas ou, est ce que je pourrais te poser quelques questions sur le code histoire de bien comprendre comment il marche?
 
bye
 
la journée commence super
 
BANZAI!!

n°13920
startom
Profil : Jeune recrue
Posté le 28-06-2005 à 08:16:22  profilanswer
 

chapo, je viens d'essayer sur deux feuilles, c'est super rapide et très efficace, maintenant je vais l'adapter pour deux classeurs
 
oui car en fait, pour pas abuser et faire trop compliqué, j'ai dis que le travail se faisait entre deux feuilles, soit! mais sur deux classeurs différents, mais je pense que cela ne posera pas de probleme à ton code non?
 
a+
 
BANZAI!!

n°13923
startom
Profil : Jeune recrue
Posté le 28-06-2005 à 11:29:26  profilanswer
 

je viens de le tester sur les véritables bases de données et j'ai du coup quelques questions:
 
est il possible que les cases se colorent même quand le contenu n'est pas rigoureusement le même mais si on a au moins par exemple 5 caractère en commun? ex: machin31 est reconnu différent de machin_31 alors que c'est pareil
 
y'a t'il une différence entre mot en majuscule et mot en minuscule?
 

n°13924
startom
Profil : Jeune recrue
Posté le 28-06-2005 à 11:31:03  profilanswer
 

en aparté, merci beaucoup à tous ceux qui donnent de leur temps sur ce genre de forum, c'est la première fois que j'y ai recours et je suis très agréablement surpris,  
 
bravo à tous

n°13933
galopin01
Profil : Membre
Posté le 28-06-2005 à 16:54:14  profilanswer
 

bonjour,
pour travailler sur 2 classeurs...
Les macros étant censées être sur Classeur1/DB1
il suffit que les 2 classeurs soient ouverts.
Modifier Sub Test de la manière suivante :

Code :
  1. iLR2 = Workbooks("Classeur2" ).Worksheets("DB2" ).Cells(65535, 1).End(xlUp).Row
  2. 'Charge en mémoire les valeurs de DB2
  3. Tablo = Workbooks("Classeur2" ).Worksheets("DB2" ).Range("A2:D" & iLR2)

Pour Sub Test2 il n'y a qu'une ligne a modifier :

Code :
  1. iLR2 = Workbooks("Classeur2" ).Worksheets(F2).Cells(65535, 1).End(xlUp).Row

La macro doit être lancée quand Classeur1/DB1 est actif(visible)
Pour une recherche sur des bribes ce mots ce n'est pas possible dans ce contexte.
Pour que la macro ne fasse pas de différence entre les majuscules/minuscules, il suffit de coller la ligne suivante :
Option Compare Text
AVANT TOUTE MACRO EN TETE DE TON MODULE
Nota : La macro est paramétrée pour travailler sur 30000 lignes au maximum
pour travailler sur plus de 30000 lignes il suffit de changer tous les caractères % par un ! (dans les Dim...)
Pour les autres questions. Pas de problème !
Ok ?


Message édité par galopin01 le 28-06-2005 à 16:57:11

---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°13954
startom
Profil : Jeune recrue
Posté le 29-06-2005 à 09:39:31  profilanswer
 

bonjour,
 
merci galopin, ton aide est précieuse
 
pour la taille des base de donnée, elles font largement moins de 30000 lignes (ce sont des bases de données matériaux), plutot au maximum 2000 ou 3000 grand max, donc pas de prob de ce coté la
 
par contre ce qui deviens un problème et la je penses que ca se complique franchement c'est à propos des bribes de mots. En effet, il est très rare que deux matériaux soient écrits de la même manière (sauf en théorie) et pour l'instant le passage de la macro me colore tout en rouge alors qu'il y des points communs
 
je sais la, je deviens salaud ;)
 
si tu veux pour être clair, d'un côté sur DB1, je vais avoir un nom de matériau genre stycast 2650 et dans la grosse base de donnée, qu'il faut alimenter et qui sert donc de référence, on aura parmi les 4 colonnes, une qui contient plusieurs (celle rencontrées jusque la pour ce matériau) désignation pour ce meme matériau comme stycast2650; stc2650... et les trois autres sont trois normes (ISO,DIN et EN) dont plus rigides mais la première...
 
alors je pense utiliser la fonction left()=""
ca se fait?
 
bonne journée

n°13956
startom
Profil : Jeune recrue
Posté le 29-06-2005 à 10:18:46  profilanswer
 

voila j'ai juste rajouté changé cette ligne, innocemment, mais  
a marche pas  
 
If Left(Tablo(j, k), 5) = z Then Y = True
 
why?  :pfff:

n°13957
galopin01
Profil : Membre
Posté le 29-06-2005 à 10:41:23  profilanswer
 

Re:
Tu peux utiliser toute fonction qui travaille sur des bribes de chaines mais toujours avec résultat toujours très aléatoire.
Ex:
If Left(Tablo(j, k),4) = Left(z,4) Then Y = True
Mais si tu veux épuiser toutes les combinaisons de bribes de chaines... bon courage !
On peut aussi combiner avec la méthode "find" ou l'opérateur "like" avec les mêmes réserves et sans compter le temps de traitement qui risque de croitre de façon exponentielle.
Je vais être coincé jusqu'à dimanche because boulot mais je tacherai de gratter un peu dessus la nuit. Si tu peux me préciser un peu quels bribes de chaines peuvent-être considérés comme pertinent dans DB1...
Mais si on veut un résultat fiable avec un système de comparaison aproximative, celà suppose une demande de confirmation par Msgbox dès qu'il n'y a pas égalité stricte.
Du coup ce n'est pas le temps de traitement qui risque de devenir préoccupant, mais ce qui va rester de tes vacances quand tu auras fini de répondre aux Msgbox de confirmation !  
A+
 


---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°13976
startom
Profil : Jeune recrue
Posté le 30-06-2005 à 10:48:13  profilanswer
 

bonjour,
 
(au fait, j'utilise sub test())
 
Comment va? ca m'impressionne que tu trouves le temps de me répondre aussi briévement, mais comme tu le peux tant mieux!? Je pense que ce qui suit se complique et risque d'être plus intéressant.
 
C'est vrai que le point clef va se situer dans l'analyse du contenu des cellules.
Le temps de calcul, pas un problème, l'opérateur qui lancera son application vaquera à une autre occupation si le calcul est long, de toute facon, comparé au temps qu'il lui faudrait pour faire la meme chose manuellement, il y gagne, donc on peut réfléchir à l'analyse du contenu.
 
voici un exemple qui ne devrait pas se colorer en rouge mais qui le fait:
 
dans DB1: une cellule contient '7075 OR 7175'
dans DB2: une cellule lui correspond, 'AA7075, A-Z5GU, AW-7075'
en effet, ces deux cellules désignent le même matériau!
 
Ma question: est il possible de chercher dans une cellule de DB2 une partie du contenu de DB1. Je m'explique, est il possible de chercher 7075 dans les cellules de DB2?
La méthode Find a l'air de s'y préter mais son usage ne m'est pas familier
 
Si tu as besoin de deux classeurs pour mieux comprendre les limites de l'actuel code, je peux t'en envoyer, si possible.
 
Merci et a+

n°13978
startom
Profil : Jeune recrue
Posté le 30-06-2005 à 11:07:27  profilanswer
 

Re
 
Je viens de remarquer que la fonction de recherche de base d'excel (ctrl+f) donne de bons résultats, c'est à dire que, si je reprends l'exemple de l'aluminium 7075, la méthode {ctrl+f} me trouve les bonnes cellules dans DB2, meme si 7075 est collé à AA ou n'est pas seul dans la cellule.
 
est ce la fonction find() que sollicite cette option "Rechercher"??
si oui, ca m'a l'air d'être une bonne solution , je suis dessus, modestement :p

n°13980
startom
Profil : Jeune recrue
Posté le 30-06-2005 à 11:25:29  profilanswer
 

Re
 
on m'a parlé du SQL, qu'est ce tu en pense,
une requete SQL peut servir ou il faut plutot se diriger vers du ADO?
 
a+

n°13990
galopin01
Profil : Membre
Posté le 30-06-2005 à 15:18:44  profilanswer
 

Bonjour,
Regarde ici
et encore... il faut multiplier par 4 pour le nombre de colonnes de DB2 !
Mais j'essaye quand même.
A+


Message édité par galopin01 le 30-06-2005 à 17:41:00

---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°13993
galopin01
Profil : Membre
Posté le 30-06-2005 à 17:56:25  profilanswer
 

Re:
Il ya encore une autre possibilité de recherche avec la fonction Instr je vais tester tout celà pour voir s'il y a des possibilités d'obtenir un résultat avant que tu deviennes grand père...
A+


---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°13994
galopin01
Profil : Membre
Posté le 30-06-2005 à 20:40:27  profilanswer
 

Re:
Voilà une solution (à adapter avec tes noms de feuilles et de classeur)
J'ai retenu le même principe que la première macro qui était quand même plus... agréable. Donc tes modifs seront semblables...

Code :
  1. Sub Test()
  2. Dim a As Byte, iLR1%, iLR2%, i%, j%, k%, x%, z$, iL%, iT%, ZExTStr$, Tablo, Y As Boolean
  3. 'Gèle l'écran pour accélérer le traitement
  4. Application.ScreenUpdating = False
  5. 'Détermination de la dernière ligne de chaque feuille
  6. iLR1 = Worksheets("DB1" ).Cells(65535, 1).End(xlUp).Row
  7. iLR2 = Worksheets("DB2" ).Cells(65535, 1).End(xlUp).Row
  8. 'Charge en mémoire les valeurs de DB2
  9. Tablo = Worksheets("DB2" ).Range("A2:D" & iLR2)
  10. With Worksheets("DB1" )
  11. 'Colorie toute les cellules en rouge
  12. .Range("A2:A" & iLR1).Interior.ColorIndex = 3
  13. 'Pour chaque ligne dans DB1
  14. a = 6           'Dimensionne la longueur de la chaine de recherche
  15. For i = 2 To iLR1
  16. 'Mémorise la valeur de la cellule
  17. z = .Cells(i, 1).Value
  18. iL = Len(z) + 1
  19.   'Parcourt le tableau et recherche la chaîne de longueur y dans z
  20.   For j = 1 To UBound(Tablo)
  21.     For k = 1 To 4
  22.     iT = Len(Tablo(j, k))
  23.       'Evalue le nombre de boucles nécessaires
  24.       For x = 1 To iL - a
  25.       'Scanne toutes les possibilités de chaine selon la longueur de z
  26.       ZExTStr = Mid(z, x, a)
  27.         'Teste la chaîne trouvée
  28.         If InStr(1, Tablo(j, k), ZExTStr) > 0 Then
  29.         Y = True
  30.         Exit For
  31.         End If
  32.       Next
  33.     If Y Then Exit For
  34.     Next
  35.   's'il y a un drapeau décolore la cellule
  36.   If Y Then
  37.   .Cells(i, 1).Interior.ColorIndex = xlColorIndexNone
  38.   'remet le drapeau à Faux
  39.   Y = False
  40.   'et arrête l'examen du tableau
  41.   Exit For
  42.   End If
  43.   Next
  44. 'recommence sur les valeurs suivantes de DB1
  45. Next
  46. End With
  47. Application.ScreenUpdating = True
  48. End Sub

La macro est testée sur une feuille DB1 de 1000 lignes contenant chacune 20 caractères aléatoires.
La feuille DB2 contenait elle aussi sur 1000 lignes et 4 colonnes 20 caractères aléatoires dans chaque cellules...
Dans ces conditions l'ordinateur donne quelques signes de mécontentement mais si tu ne travaille pas sur une pièce de musée ça devrait passer à condition de fermer toutes les autres applis.
Avec une chaine de recherche de 6 caractères et dans mes conditions le travail est terminé en 1'30"
On peut faire varier la longueur de la chaine de recherche mais si on diminue la longueur de la chaine on augmente le temps de traitement...
En définitive ce qui fera la différence c'est la longueur de tes chaines.
Si tu as des chaines de plus de 30 caractères dans DB1 ou DB2 il faudra peut-être que je revoie ma copie...
Sinon ça sera pas mal.
PS: Pour l'instant je n'ai pas mis de MsgBox de confirmation car avec mes chaînes de caractères il n'y a pas de risque d'erreur)
Mais si tu diminues la longueur de la chaîne de recherche comme tu augmentes également le risque d'erreur, il faudra surement que je rajoute celà. Peut-être dans un moment...
A+


Message édité par galopin01 le 30-06-2005 à 21:06:27

---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°13995
galopin01
Profil : Membre
Posté le 30-06-2005 à 21:11:32  profilanswer
 

Voilà la modif pour avoir un message de confirmation.
Tu remplaces la boucle If... End If par celle là :

Code :
  1. 'Teste la chaîne trouvée
  2.         If InStr(1, Tablo(j, k), ZExTStr) > 0 Then
  3.         If MsgBox("Validez vous cette correspondance :" & Chr(10) & z & Chr(10) & _
  4.         " = " & Tablo(j, k), 36, "  CONFIRMATION ?" ) = 6 Then
  5.         Y = True
  6.         Exit For
  7.         End If
  8.         End If

Ok ?  
:sol:  


---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°14025
startom
Profil : Jeune recrue
Posté le 04-07-2005 à 08:54:03  profilanswer
 

Bonjour,  
excuse moi mais il m'est arrivé une chose terrible vendredi (dont je ne parlerais pas) et je n'ai pas eu le courage de m'y remettre.
 
Je vois que tu n'as pas chomé, je vais essayer tout ca aujourd'hui,
 
 
merci ;)
 
PS: ton "ici" un peu plus haut renvoie sur un fichier zip...vide!? étrange non ?

n°14026
startom
Profil : Jeune recrue
Posté le 04-07-2005 à 10:36:23  profilanswer
 

Re: j'aimerais te faire parvenir les deux feuilles qui me servent comme feuilles tests, comment puis faire?

n°14027
startom
Profil : Jeune recrue
Posté le 04-07-2005 à 10:48:22  profilanswer
 

je viens de le tester, il y a de grands progrès mais ce n'est pas encore terminé (mais presque je te rassure), je pense que le plus simple maintenant c'est que je te fasse parvenir mes feuilles de travail
 
merci mille fois

n°14028
startom
Profil : Jeune recrue
Posté le 04-07-2005 à 10:50:46  profilanswer
 

je me suis avancé, j'avais mal paramétré la macro, tout est encore en rouge alors que rien ne devrait l'être... dsl

n°14029
galopin01
Profil : Membre
Posté le 04-07-2005 à 12:47:33  profilanswer
 

Bonjour,  
Comme au début j'ai utilisé "DB1" et "DB2" comme noms de feuille à toi de les remplacer par les noms qui te conviennent
Si DB2 est sur un autre classeur tu mets le nom du classeur comme précédemment !

Code :
  1. iLR2 = Workbooks("Classeur2" ).Worksheets("DB2" ).Cells(65535, 1).End(xlUp).Row
  2. 'Charge en mémoire les valeurs de DB2
  3. Tablo = Workbooks("Classeur2" ).Worksheets("DB2" ).Range("A2:D" & iLR2)


Je te rappelle que les macros doivent être sur "DB1" et que les 2 classeurs doivent être ouvert. En plus c'est "DB1" qui doit être visible à l'écran quand tu démarres la macro.
Par contre cette fois ci, je n'ai pas prévu de réglage de première ligne...
La macro démarre d'office ligne 2. Ce qui ne devrait en principe pas poser de problème.  
Laisse tomber le zip vide.
Si vraiment tu n'arrives pas à finaliser tu me passes une copie (zippée) de tes classeurs avec juste les feuilles qui m'intéressent et au maximum 20 lignes par feuilles (je n'ai pas l'ADSL à la maison) à l'adresse suivante :
Galopin01@laposte.net
Pour écrire remplacer galopin01 par :  
Roger.Mazurczak
A+


---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°14030
startom
Profil : Jeune recrue
Posté le 04-07-2005 à 12:57:47  profilanswer
 

Re
 
Ne t'inquiète pas, je comprends le code et je comprends ce qu'il faut changer pour l'adapter
ce que je ne comprends pas c'est pourquoi malgré ce code simple, la recherche ne marche pas sur le classeur d'essai que j'ai créé.
 
Je te le fais parvenir de suite.
 
A+

n°14043
galopin01
Profil : Membre
Posté le 05-07-2005 à 07:34:15  profilanswer
 

Re:  
Pour compléter ma réponse par mail, tu es passé de la colonne A à la colonne B :  
Dans la propriété Cells(x, y) y correspond au numéro de colonne, donc pour les lignes concernées il fallait passer de 1 à 2.
Tout va bien maintenant ?


Message édité par galopin01 le 05-07-2005 à 07:43:48

---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°14044
startom
Profil : Jeune recrue
Posté le 05-07-2005 à 08:29:38  profilanswer
 

salut galopin
 
dsl mais je n'ai pas encore recu ton mail
effectivement, j'avais zappé ce détail important, maintenant il me propose effectivement des boites de dialogue pour valider les correspondance mais chose bizarre: il faut appuyer plusieurs fois sur non pour passer à la porposition suivante et après avoir appuyer sur oui aux bonnes correspondances, tout est en rouge...
 
mystère...
 
mais merci, cela est une très bonne solution surtout avec un cahier des charges aussi restreint
 
a+

n°14045
startom
Profil : Jeune recrue
Posté le 05-07-2005 à 08:32:25  profilanswer
 

après vérife, c'est deux cliks sur non
et les clicks sur oui ne décolore pas la case

n°14046
startom
Profil : Jeune recrue
Posté le 05-07-2005 à 09:14:31  profilanswer
 

re: histoire d'en rajouter,  
est il possible de faire apparaitre en début d'éxécution de la macro une inputbox pour demander à l'utilisateur qu'elle est la colonne qui l'intéresse dans DB1 (les 4 de DB2 seront toujours les actuelles)? en effet, celle ci ne sera pas toujours la deuxième et à l'avenir, les utilisateurs n'auront pas accès au code que je vais mettre en déclenchement par un bouton perso
 
merci a+
 
 

n°14049
galopin01
Profil : Membre
Posté le 05-07-2005 à 11:25:55  profilanswer
 

Bonjour,
Tu affectes cette macro au bouton (ou tu copies le code selon le type de bouton)

Code :
  1. Sub Galopin()
  2. Dim b As Byte, sb$, sMsg$
  3. b = ActiveCell.Column
  4. sb = Split(ActiveCell.Address, "$" )(1)
  5. sMsg = b & "  (" & sb & " )"
  6. If MsgBox("La macro teste la colonne sélectionnée :" & Chr(10) & _
  7.       Chr(10) & "Voulez-vous tester la colonne   " & _
  8.       sMsg & "   ?", 36, Space(18) & "Etes-vous sûr(e) ?" ) = 6 Then Test b
  9. End Sub

Ensuite tu modifies la macro principale comme suit :
 
Sub Test(b As Byte)
 
ensuite remplacer 2 par b dans les lignes suivantes ...
iLR1 = Worksheets("DB1" ).Cells(65535, b).End(xlUp).Row
iLR2 = Worksheets("DB2" ).Cells(65535, b).End(xlUp).Row
...
z = .Cells(i, b).Value
...
.Cells(i, b).Interior.ColorIndex = xlColorIndexNone
 
A+


Message édité par galopin01 le 05-07-2005 à 11:27:38

---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
n°14054
galopin01
Profil : Membre
Posté le 05-07-2005 à 21:28:37  profilanswer
 

Errare...
Sur la base de ton classeur joint iLR2 est définitivement fixé comme suit :
iLR2 = Worksheets("DB2" ).Cells(65535, 2).End(xlUp).Row  
 
Il y a un petit supplément !
pour que ce soit totalement compatible avec la dernière modif...
 
Remplacer la ligne après :
'Colorie toute les cellules en rouge
 
.Range(Cells(1, b), Cells(iLR1, b)).Interior.ColorIndex = 3
a = 4
For i = 1 To iLR1
Dans ces deux lignes le chiffre rouge doit être identique :
Si 1 la macro commence à examiner la première ligne de DB1.
Si 2 elle commence à la deuxième ligne : à toi de choisir !
 
Ok ? Tu arrives à suivre ou tu veux que je te remette tout ça au propre ?


---------------
Je ne répondrai pas aux messages privés non sollicités. Merci de poser vos questions sur le forum.
 Page :  1  2  3  4
Page Précédente 

Aller à :
Ajouter une réponse