comparer cellules dans deux colonnes via Instr(chaine)

CAPRI_456

XLDnaute Occasionnel
Bon dimance le Forum,

J'ai un souci dans une boucle qui compare les cellules d'une colonne d'un fichier aux cellules d'une colonne d'un autre fichier:

voici un extrait du code

' si le contenu de la colonne F (pays) est identifié dans la colonne P (lieux) alors
' D = colonne F dans pays et m = ligne de cette colonne
' N = range ("P2") dans pays

If InStr(W2.Range("D" & m), N) <> 0 Then '(signifie cellules identiques)
'alors appliquer la couleur fonc, coul caractères, etc.. aux 2 cellules concernées
'pour vérifier l'efficacite de la comparaison

Wsheet.Range("P2").Font.Color = vbRed 'en rouge 'RGB(0, 0, 255)
W2.Range("D" & m).Interior.ColorIndex = 6

End If


'Tout cela fonctionne parfaitement au sein de ma boucle
'Mais je voudrais, colorer en jaune si la comparaison ne donne pas de "matching"
'en utilsant Else par exemple

' ---compare--- 1- SI CELLULES IDENTIQUES -------colorise.....

If InStr(W2.Range("D" & m), N) <> 0 Then

Wsheet.Range("P2").Font.Color = vbRed 'en rouge 'RGB(0, 0, 255)
W2.Range("D" & m).Interior.ColorIndex = coulrouge

'2- SI CELLULES PAS RETROUVEES DANS LES DEUX col-------colorise.....

Else
Wsheet.Range("P2").Interior.ColorIndex = 3


Cela ne fonctionne pas pour le point 2

ou bien dois- je utiliser en leiu et place de Else :

a) If NOT InStr(W2.Range("D" & m), N) <> 0 Then 'au lieu de Else
b) If InStr(W2.Range("D" & m), N) = 0 Then

Merci pour votre aide

CAPRI_456
 

Softmama

XLDnaute Accro
Re : comparer cellules dans deux colonnes via Instr(chaine)

Bonjour,

à tester :
VB:
If InStr(W2.Range("D" & m), N) > 0 Then  
  Wsheet.Range("P2").Font.Colorindex = 3
  W2.Range("D" & m).Interior.ColorIndex = 3
Else
  Wsheet.Range("P2").Interior.ColorIndex = 6
end if

Colorindex : 3 pour rouge, 6 pour jaune
 

CAPRI_456

XLDnaute Occasionnel
Re : comparer cellules dans deux colonnes via Instr(chaine)

VB:
If InStr(W2.Range("D" & m), N) > 0 Then 
Wsheet.Range("P2").Font.Colorindex = 3
W2.Range("D" & m).Interior.ColorIndex = 3 'rouge
Else
Wsheet.Range("P2").Interior.ColorIndex = 6 'jaune
end if

Bonsoir le Forum, Softmama,
Merci pour la modification

j'ai appliqué la modification dans mon code....
lorsqu'il y a correspondance dans les 2 colonnes cela me colorise en jaune
lorsqu'il n'a a pas correspondance .................. cela me colorise aussi en jaune
(soit un item existe en "P2", mais n'existe pas dans la plage "D")


tout est coloré, cela prouve donc que ma boucle parcoure tous les items,

mais, indépendemment des couleurs , je souhaiterai enregistrer dans un fichier
si correspondance : enregistre plage dans fichier avec nom en "P2" & ".xls"
ceux là, le parviens à les créer

si pas correspondance : enregistre plage dans fichier avec nom en "P2" précédé de "NEW" & ".xls"

et là , je perd le fil....
Peut être y a t'il plus facile pour comparer que l'instruction "Instr"

Merci d'avance, pour votre aide
Bonne soirée à tous

CAPRI_456
 

Bebere

XLDnaute Barbatruc
Re : comparer cellules dans deux colonnes via Instr(chaine)

bonjour Capri,Softmama
essaye avec like

Code:
If W2.Range("D" & m) like "*" & Wsheet.Range("P2") & "*" Then 
Wsheet.Range("P2").Font.Colorindex = 3
W2.Range("D" & m).Interior.ColorIndex = 3 'rouge
Else
Wsheet.Range("P2").Interior.ColorIndex = 6 'jaune
end if

pour la demande enregistrer,un bout de fichier,svp
à bientôt
 

CAPRI_456

XLDnaute Occasionnel
Re : comparer cellules dans deux colonnes via Instr(chaine)

Bonjour, le Forum, Sotmama, Bebere,

Bebere, j'ai appliqué le LIKE au lieu de INSTR
Voir mon code dans le Module du fichier lieux.xls joint

1ère étape - faire des traitements en colonne P

Dim cell As Range
Const limit As Integer = 5
For Each cell In Range("P2:p" & Range("P65536").End(xlUp).Row) 'boucle sur col P
'--- b) ici pour les blancs ------------------------------------------------------------------------
'si le contenu de la colonne P est VIDE(blanc) y place le mot "NIHIL"
If cell.Value = "" Then ' = "" signifie rien ou vide
cell.Interior.ColorIndex = 5 'caractères en rouge
cell.Value = "NIHIL" ' place le mot "NIHIL"
End If
'----c) ici pour les dépassement de 3 caractères en colonne P --------------------------
If Len(cell) > limit Then 'reduit à 5 caractères (constante ci-dessus)
cell.Font.ColorIndex = 5 'caractères en blanc
cell.Value = "ERROR" 'place le mot "ERROR" '
End If


OK pour cette partie
par contre pour la suite, lorsqu'il n'y a pas de matching , je ne parviens pas à mettre dans P... le mot NEW suivi de "-" et du nom OTC qui existait avant.....

résultat à obtenir "NEW-OTC"


2 étape - via un code je split en automatique la colonne P et crée un onglet par code qui se trouve en colonne P ( souvent x fois le même) pour regrouper avant d'enregistrer.
ici : pas joint le code pour ne pas faire trop lourd , mais il fonctionne.


3 étape - enregistrer sous nom fichier et répertoires en fonction de critères repris en col de la feuille dépots (voir code en module 2)
3-a) je fais un COPY de la plage de chacun des onglets

3-b) si le fichier existe déjà dans le répertoire, je l'ouvre - puis PASTESPECIAL

nom fichier = donnée en col C correspondant au CODE en col D
nom répertoire = donnéé en col L correspondant au CODE en col D

Merci pour ton aide Bebere,
Je continue à chercher la solution...
 

Pièces jointes

  • lieux.zip
    20 KB · Affichages: 48
  • lieux.zip
    20 KB · Affichages: 51
  • lieux.zip
    20 KB · Affichages: 49

Si...

XLDnaute Barbatruc
Re : comparer cellules dans deux colonnes via Instr(chaine)

Salut

étape1, 3 boucles
Code:
Sub Traitement()
    Dim Dl As Long, cell As Range, Plage As Range
    Const limit As Integer = 5
    Dl = Cells(Rows.Count, "P").End(xlUp).Row
    Set Plage = Range("P2:P" & Dl)
    For Each cell In Plage  'boucle sur col P
        'si le contenu de la colonne P est VIDE(blanc) y place le mot "NIHIL"
        If cell = "" Then
        cell.Interior.ColorIndex = 4  'caractères en rouge
        cell.Value = "NIHIL" 
        End If
    Next
    'ici pour les dépassement de [B]5[/B] caractères en colonne P, si moins, attention à NIHIL !  
    For Each cell In Plage  'boucle sur col P
        If Len(cell) > limit Then 
            cell.Interior.ColorIndex = 4    'caractères en vert
            cell.Value = "ERROR"              'place le mot "ERROR" '
        End If
    Next
    'ici pour voir s'il s'agit d'un code inconnu dans la liste des depots
    Dim Nom As String, Est As Range
    For Each cell In Plage
        Nom = cell
        Set Est = Sheets("Depots").[D:D].Find(cell)
        If Est Is Nothing Then
            cell = "NEW-" & Nom
            cell.Interior.ColorIndex = 23  ' en bleu
        End If
    Next
End Sub
 

CAPRI_456

XLDnaute Occasionnel
Re : comparer cellules dans deux colonnes via Instr(chaine)

Bonjour, le Forum, Sotmama, Bebere,
Bonjour Si...

étape1, 3 boucles


Je te remercie pour avoir mis de l'ordre dans mes boucles et surtout la dernière pour conserver le nom du nouveau depôt

Je vais maintenant pouvoir poursuivre l'enregistrement de l'étape 3 ,
en bouclant non pas sur la feuille"TOUT" qui à servi aux rectifications,
mais sur chacune des autres feuilles :
-- tenant compte que le fichier existe déjà --donc ajout de la plage à ce fichier
-- ou que le fichier est à créer sur base d'un modèle -- donc crétaion du fichier + ajout de la plage

Merci pour cette aide rapide,
Le Forum

CAPRI_456
 

Bebere

XLDnaute Barbatruc
Re : comparer cellules dans deux colonnes via Instr(chaine)

bonjour Capri,Si
à essayer
Code:
Sub Traitement()
    Dim cell As Range, cel As Range
    Const limit As Integer = 5

    For Each cell In Range("P2:P" & Range("P65536").End(xlUp).Row)  'boucle sur col P
        If cell.Value = "" Then            ' si cell vide
            cell.Interior.ColorIndex = 3  'cell en rouge,pour caractère remplacer interior par font
            cell.Value = "NIHIL"           ' place le mot "NIHIL"
        ElseIf Len(cell) > limit Then            'si Len(cell) >limit
            cell.Interior.ColorIndex = 4    'cell en vert
            cell.Value = "ERROR"              'place le mot "ERROR" '
Else 'autres cas
With Worksheets("Depots")
            Set cel = .Cells.Find(cell.Value, LookIn:=xlValues, lookat:=xlPart)
            If Not cel Is Nothing Then
                cell.Interior.ColorIndex = 8   ' en bleu clair
            Else
                cell.Value = "NEW" & "-" & cell.Value
                cell.Interior.ColorIndex = 6  ' jaune
            End If
        End With
        End If
    Next cell

End Sub
et pour la suite met un bout de fichier(plus facile) et explication
ce que j'ai compris,une boucle sur les 4 feuilles,y mettre les données
autrement créer un fichier
à bientôt
 

CAPRI_456

XLDnaute Occasionnel
Re : comparer cellules dans deux colonnes via Instr(chaine)

bonjour le forum , Softmama, ..Si, Bebere,



essayé = parfait

Merci Bebere cette version avec ElseIf..
Merci aussi a Si..

Pour l'enregistrement j'ai trouvé quelque chose pour boucler sur tout les onglets, sauf l'initial ("TOUT") et enregistrement en fonction de deux paramètres dans les colonnes de la feuille depots.

Pour l'instant , cela fonctionne, je dois encore voir avec "NEW-OTC", NEW-etc..., car ceux -là ne sont pas dans ma feuille dépots (puisque nouveaux) et donc, je vais devoir
les y ajouter au départ du code "Traitement" dans le module.

J'essaye et si cela ne vas pas , je reviens à vous

Merci

CAPRI_456
 

Discussions similaires

Réponses
7
Affichages
312

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 812
dernier inscrit
abdouami