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
PS. Je travaille sur Excel 2003 au travail et Excel 2007 depuis chez moi
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
PS. Je travaille sur Excel 2003 au travail et Excel 2007 depuis chez moi
Pièces jointes
Dernière édition: