Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
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
'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.....
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
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
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
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😛" & 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...
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
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
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
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
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD