Comparaison de colonnes : comparer une partie des valeurs des cellules

Uturn

XLDnaute Nouveau
Bonjour à tous et par avance merci à ceux qui prendront de leur temps pour m'apporter de l'aide :)

Mon problème est le suivant :

Je suis en train de constituer une base de données sur les substances chimiques réglementées à partir d'information provenant de différentes sources réglementaires.

La réglementation évoluant en permanence cette base à besoin d'être mise à jour régulièrement.

L'objectif étant de savoir si une substance ou une sélection de substances saisies sont concernées par la réglementation, j'utilise une macro permettant de comparer la ou les substances saisies aux substances réglementées présentent dans la base.

En pratique, une même substance chimique pouvant avoir plusieurs noms, les substances chimiques sont identifiées par un numéro du type 199-20-8 appelé "numéro CAS"

La macro recherche si les valeurs d'une plage de "numéro CAS" saisis sont présentes dans la colonne "numéro CAS" de la base des substances réglementées.

Sub Recherche_substances_par_numéros_CAS()
Dim CompareRange As Variant, x As Variant, y As Variant
' Set CompareRange equal to the range to which you will
' compare the selection.
Set CompareRange = Range("C3:C1490")
' NOTE: If the compare range is located on another workbook
' or worksheet, use the following syntax.
' Set CompareRange = Workbooks("Book2"). _
' Worksheets("Sheet2").Range("C1:C5")
'
' Loop through each cell in the selection and compare it to
' each cell in CompareRange.
For Each x In Selection
For Each y In CompareRange
If x = y Then x.Offset(0, 1) = x
Next y
Next x
End Sub


Hors je rencontre un problème avec l'une des sources de données qui n'est pas formatée de manière à ce que la macro fonctionne.

Cette source présente pour un certain nombre de substances réglementées les informations de la sorte :
Au sein d'une même cellule, plusieurs numéros CAS :

208-15-2 [1]
457-3-8 [2]
56-5-12 [3]

ce qui rend inopérant le fonctionnement de la macro si je recherche par exemple la valeur 208-15-2 : aucun résultat n'est renvoyé compte tenu du fait que la recherche repose sur la chaine de caractère totale de chacune des cellules sélectionnées.

N'ayant que de très minces notions en Excel je ne sais pas comment résoudre ce problème.

Je ne vois que deux pistes, qui me sont inaccessibles :

- Modifier si cela est possible la macro pour la rendre efficace avec ce type de contrainte

- Utiliser si cela est possible une macro permettant de générer, à partir des lignes contenant une cellule du type

208-15-2 [1]
457-3-8 [2]
56-5-12 [3]

des lignes du type :

Ligne 1. 208-15-2
Ligne 2. 457-3-8
Ligne 3. 56-5-12

Cette dernière solution me semblant beaucoup plus compliquée à développer, je serais très intéressé pas vos commentaires sur la solution la mieux adaptée selon vous ... et la manière de la mettre en œuvre ! :)

Je vous joins le fichier sur lequel je travaille avec, sur la deuxième feuille, le reformatage que je recherche si pensez que cette deuxième piste est judicieuse

Encore une fois merci pour votre aide

Bon w-e :cool:

PS. Je travaille sur Excel 2003 au travail et Excel 2007 depuis chez moi
 

Pièces jointes

  • Base de données substances.xls
    113 KB · Affichages: 175
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Comparaison de colonnes : comparer une partie des valeurs des cellules

Bonjour Uturn et bienvenue :),
Pas évident de comprendre ce que doit faire ton code :confused:...
Une première solution serait de modifier
Code:
      Set c = .Find("[1]", LookAt:=xlPart, LookIn:=xlValues)
mais ce n'est pas la réf que tu cherches, mais [1] :confused:...
Sinon, il serait possible de décomposer tes lignes en mettant sur chaque ligne les [1], [2], etc. Mais peut-on bêtement dupliquer les colonnes D et E :rolleyes: ?
Bon WE :cool:
 

Uturn

XLDnaute Nouveau
Re : Comparaison de colonnes : comparer une partie des valeurs des cellules

Bonjour JNP :),

D'abord mes très cordiaux remerciements pour ta réponse rapide :cool:

Mon premier problème est de savoir comment comparer une liste de "numéro CAS" saisie dans la colonne H à la liste des numéro CAS présents en colonne C.

La comparaison mise en œuvre par la macro du module 1 devient inopérante quand une même cellule de la colonne C contient plusieurs numéro CAS

Dans ton message, tu t'es intéressé à la macro du module 3 que j'ai essayé d'exploiter pour reformater les lignes contenant des cellules qui posent ce type de problème.

Compte-tenu du fait que j'aurai à mettre à jour très régulièrement la base, en l'état cette macro n'est pas satisfaisante : elle ne permet que de copier les cellules contenant la chaine [1] dans la feuille 2

je souhaiterais donc trouver une solution, si cela est possible, qui me permette :

- soit de rendre la comparaison de la macro 1 efficace dans tous les cas

- soit de reformater simplement toutes les lignes pour rendre la comparaison de la macro 1 possible

D'avance tous mes remerciements pour ton point de vue sur ce sujet

Bien cordialement,

Un message pour le forum : merci à ses contributeurs qui m'ont permis plus d'une fois par leur temps consacré de mieux connaître l'outil et son potentiel
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
166

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16