VBA: comment comparer deuc cellules de natures différetes

Salut!

Si des gens s'y connaissent un peu en VBA, j'aimerais bien avoir un peu d'aide. En vous remerciant d'avance.

Alors dans ma feuille lamda de mon classeur excel, j'ai 2 colonnes A et B.

La cellules de la colonne A contient des données de type LONG;

Quant à la colonne B, la seule différence avec la précédente réside dans le faite qu'une cellule de B PEUT contenir plusieurs éléments de type LONG.

Pour être plus claire, voici un exemple:

A1=12546 B1=12546,14587,36542,78956,23215

A2=45896 B2=45879,98752,58952

A3=69832 B3=85236

......................................................ETC

Ma question:

Dans ma macro, je cherche à afficher dans la colonne C de ma feuille "RESULTAT","OUI" si pour chaque cellule de A, on retrouve sa valeur dans la cellule B et non le cas échéant.

En reprenant l'exemple ci-dessus, j'obtiens:

C1="OUI"

C2="NON"

C3="NON"

Bon j'ai déjà essayé avec une boucle for each Myobject IN Mycollection.... Mais le problème c'est que ni mon objet et ma collection ne sont fixes.

De même, en passant par une boucle pour:

For ligne=premier_element TO dern_element

'Mon premier_element et le dernier ayant été déterminé au préalable et les variables définies( Dim valeur as LONG, lignetrouvee as RANGE)

set valeur=Worksheets("RESULTAT").range("A"&ligne)

lignetrouvee=Worksheets("RESULTAT").range("B2:B9999").find(valeur)

.......etc

ça ne compile pas jusqu'au bout en même temps je ne compare des données de même nature...

SOME IDEAS?

Bonjour

A tester

Sub Compare()

  With Range("C1:C" & Range("A" & Rows.Count).End(xlUp).Row)
    .Formula = "=IF(ISNUMBER(FIND(A1,B1,1)),""Oui"",""Non"")"
    .Value = Value
  End With
End Sub

Ok merci beaucoup de cette réponse rapide

Je ne l'ai pas encore testé mais le code va évaluer toutes les cellules actives de mes colonnes A et B, ligne par ligne?

Bonjour

En testant tu auras ta réponse

Indice : La macro comparera toutes les valeurs jusqu'à la dernière valeur en colonne A

Bonne nuit

J'ai essayé avec mon exemple ci dessus

ça compile bien, ça me compte bien mes lignes existantes mais ça ne m'affiche rien en C

rectif: ça marche mais quand je sors de mon end with, POUF! tous les éléments de ma colonne C disparaissent.

De plus, j'aimerais préciser aussi une chose: certes j'ai di que les éléments de la colonne A sont de type LONG mais ils ne sont pas pareils que ceux de la colonne B

Ëxemple: en A1=9, A2=965872, A3=65...etc

B1=96528,4521478,254136...etc

Désolé c'est de ma faute si je n'ai pas précisé. My apology

Parce qu'en testant avec l'exemple ci-dessus, en C1=OUI car A1=Left(B1,1) alors que mois je veux la donnée entière.

Merci ENCORE par avance de ton aide


Dernier élément que j'ai oublié

Si je veux vérifier que si A se trouve dans B ou E(même type que B) en reprenant ta formule, puis-je faire

Sub compare()

With Range("C3:C" & Range("A" & Rows.Count).End(xlUp).Row)

.Formula = "=IF(ISNUMBER(FIND(A3,B3,1)),""OUI"",""NON"")OR IF(ISNUMBER(FIND(A3,E3,1)),""OUI"",""NON"")"

.Value = Value

End With

End Sub

OU PLUTOT

Sub compare()

With Range("C3:C" & Range("A" & Rows.Count).End(xlUp).Row)

.Formula = "=OR(IF(ISNUMBER(FIND(A3,B3,1)),""OUI"",""NON""),IF(ISNUMBER(FIND(A3,E3,1)),""OUI"",""NON"")

.Value = Value

End With

End Sub

???

Bonjour

On va procéder par ordre

Tu fournis un fichier dans lequel tu notes ce que tu as et tu inscris les résultats souhaités en expliquant pourquoi

A-Par contre, ce qui m'embête c'est qu'avec le code que tu as écris, à la fin de ma compilation, rien ne s'affiche mais en parcourant le With..end With

je constate que c'est dès la fermeture du end with que le résultat que je veux obtenir disparaît. Bon pour cette partie pas besoin de fichier non?

B-En ce qui concerne ma comparaison, je t'ai joints un fichier excel et je désire comparer les colonnes E,Q ET R de la feuille "SIAT"

Bonjour

Il n'y a aucune raison, d'après le code, que la colonne s'efface

Et même ça, on est obligé de suivre pas-à-pas le déroulement de la macro, afin de comprendre ce qui se passe, et sans fichier en cause, cela ne sera pas facile

ÉDIT : Ton fichier n'est pas passé

Sub maj()

'réinitialise le fichier

Dim ligne As Long

Sheets("Feuille calcul SIAT").Activate

Sheets("Feuille calcul SIAT").Columns("A:U").Delete

Sheets("Résultats").Activate

Sheets("Résultats").Range("C6:L99999").ClearContents

Sheets("Extraction SIAT").Activate

'On importe les lignes où il y a un numero de gamme dans la feuille calcul

With Worksheets("Extraction SIAT")

If .FilterMode = True Then .ShowAllData

End With

Sheets("Extraction SIAT").Range("A50000:XFD1048000").Select

Selection.Delete

Sheets("Extraction SIAT").Cells(1, 11).Select

Sheets("Extraction SIAT").Range("K1").Select

Selection.AutoFilter Field:=9, Criteria1:="<>"

Sheets("Extraction SIAT").Select

Sheets("Extraction SIAT").Columns("A:U").SpecialCells(xlCellTypeVisible).Copy

Sheets("Feuille calcul SIAT").Activate

Sheets("Feuille calcul SIAT").Columns("A:U").Select

Selection.PasteSpecial xlPasteAll

Sheets("Feuille calcul SIAT").Activate

For ligne = 2 To 99999

If IsEmpty(Sheets("Feuille calcul SIAT").Cells(ligne, 4)) Then

Sheets("Feuille calcul SIAT").Range("A" & ligne + 1 & ":XFD1048000").Select

Selection.Delete

GoTo oksuppression

End If

Next

oksuppression:

With Worksheets("Extraction SIAT")

If .FilterMode = True Then .ShowAllData

End With

'On compare

Dim lignetrouvee As Range, ligne_calcul As Long, numerogamme As Long

Dim ligne_calcul_AIC As Long, dernligne_extract_AIC As Long

Dim ligne_resultat As Long

ligne_resultat = 6

Sheets("Résultats").Activate

ligne_calcul_AIC = 2

Sheets("Extraction AIC").Activate

Sheets("Extraction AIC").Columns("A:J").Select

Selection.Sort Key1:=Sheets("Extraction AIC").Range("B2"), Header:=xlNo, Order1:=xlDescending, Orientation:=xlTopToBottom

For ligne = 2 To 50000

If IsEmpty(Sheets("Feuille calcul SIAT").Range("K" & ligne)) Then GoTo fin

numerogamme = Sheets("Feuille calcul SIAT").Range("K" & ligne)

Set lignetrouvee = Sheets("Extraction AIC").Range("B2:B20000").Find(numerogamme)

If lignetrouvee Is Nothing Then 'Le numero de gamme n'a pas été trouvé

GoTo numgammesuivant

End

Else 'On a trouvé le numéro de gamme

ligne_extract_AIC = lignetrouvee.Row

dernligne_extract_AIC = ligne_extract_AIC

Dim i As Long

For i = 1 To 5000

Sheets("Extraction AIC").Activate

If Sheets("Extraction AIC").Cells(ligne_extract_AIC, 2).Value = Sheets("Extraction AIC").Cells(ligne_extract_AIC + i, 2).Value Then

dernligne_extract_AIC = dernligne_extract_AIC + 1

Else: GoTo suite

End If

Next

suite:

'Copie du num de la DR

Sheets("Extraction AIC").Activate

Sheets("Extraction AIC").Range("F" & ligne_extract_AIC & ":F" & dernligne_extract_AIC).Select

Selection.Copy

Sheets("Résultats").Activate

Sheets("résultats").Cells(ligne_resultat, 7).PasteSpecial xlPasteValues

Sheets("Extraction AIC").Activate

Sheets("Extraction AIC").Range("H" & ligne_extract_AIC & ":H" & dernligne_extract_AIC).Select

Selection.Copy

Sheets("Résultats").Activate

Sheets("résultats").Cells(ligne_resultat, 13).PasteSpecial xlPasteValues

Sheets("Extraction AIC").Activate

Sheets("Extraction AIC").Range("B" & ligne_extract_AIC & ":B" & dernligne_extract_AIC).Select

Selection.Copy

Sheets("Résultats").Activate

Sheets("résultats").Cells(ligne_resultat, 14).PasteSpecial xlPasteValues

Sheets("résultats").Activate

Sheets("résultats").Range("C" & ligne_resultat & ":C" & ligne_resultat + i - 1).Select

Selection.Value = Sheets("Feuille calcul SIAT").Range("G" & ligne)

Sheets("résultats").Activate

Sheets("résultats").Range("D" & ligne_resultat & ":D" & ligne_resultat + i - 1).Select

Selection.Value = Sheets("Feuille calcul SIAT").Range("M" & ligne)

Selection.NumberFormat = "d/m/yy h:mm;@"

Sheets("résultats").Activate

Sheets("résultats").Range("E" & ligne_resultat & ":E" & ligne_resultat + i - 1).Select

Selection.Value = Sheets("Feuille calcul SIAT").Range("N" & ligne)

Selection.NumberFormat = "h:mm;@"

Sheets("Résultats").Activate

Sheets("résultats").Activate

Sheets("résultats").Range("F" & ligne_resultat & ":F" & ligne_resultat + i - 1).Select

Selection.Value = Sheets("Feuille calcul SIAT").Range("O" & ligne)

Selection.NumberFormat = "d/m/yy h:mm;@"

Sheets("Résultats").Activate

ligne_resultat = ligne_resultat + i

End If

numgammesuivant:

Next

fin:

'On affiche dans le tableau des résultat

'On cherche les interfaces

Dim colonneEPC As Long, colonnedebutEPC As Long, colonnedureeEPC As Long, colonnefinEPC As Long

Dim colonneactinterface As Long, colonnedebutact As Long, colonnedureeact As Long, colonnefinact As Long

Dim colonneOI As Long, colonnetacheplanning As Long

colonneEPC = 3

colonnedebutEPC = 4

colonnedureeEPC = 5

colonnefinEPC = 6

colonneactinterface = 7

colonnedebutact = 8

colonnedureeact = 9

colonnefin = 10

colonneOI = 11

colonnetacheplanning = 12

Dim ligne_extract_SIAT As Long, dern_ligne_resultat As Long, num_DR As String, num_R As String, num_EP As String, ligneR As Range

Dim ligneEP As Range

dern_ligne_resultat = Worksheets("Résultats").Range("C2000").End(xlUp).Row

ligne_resultat = 6

'on croise les demande de régime de SIAT et de l'AIC et en fonction des DR ou R trouvées,

'on affiche les dates, durées provenant de SIAT

For ligne = ligne_resultat To dern_ligne_resultat

num_EP = Sheets("Résultats").Range("C" & ligne)

Set ligneEP = Sheets("Extraction SIAT").Range("G2:G20000").Find(num_EP)

If ligneEP Is Nothing Then 'l'EP n'a pas été trouvé

Sheets("Résultats").Range("M" & ligne).Select

ActiveCell.EntireRow.Delete

ligne = ligne - 1

Else

ligne_extract_SIAT = ligneEP.Row

Sheets("Résultats").Range("P" & ligne) = Sheets("Extraction SIAT").Range("Q" & ligne_extract_SIAT)

Sheets("Résultats").Range("Q" & ligne) = Sheets("Extraction SIAT").Range("R" & ligne_extract_SIAT)

End If

num_DR = Sheets("Résultats").Range("G" & ligne)

num_R = Sheets("Résultats").Range("M" & ligne)

Set ligneR = Sheets("Extraction SIAT").Range("I2:I20000").Find(num_R)

'On cherche le numéro de la ligne dans SIAT où les numéros de régimes de l'AIC et SIATsont identiques

Set lignetrouvee = Sheets("Extraction SIAT").Range("H2:H20000").Find(num_DR)

If num_DR = "" Then GoTo lignesuivante

If (num_DR = "9" Or num_DR = "8" Or num_DR = "7") Then

If num_R = "" Then GoTo lignesuivante

If ligneR Is Nothing Then 'Le numero de R n'a pas été trouvé

Sheets("Résultats").Range("M" & ligne).Select

ActiveCell.EntireRow.Delete

ligne = ligne - 1

Else

ligne_extract_SIAT = ligneR.Row

Sheets("Résultats").Range("G" & ligne) = Sheets("Résultats").Range("M" & ligne)

Sheets("Résultats").Range("H" & ligne) = Sheets("Extraction SIAT").Range("M" & ligne_extract_SIAT)

Sheets("Résultats").Range("H" & ligne).NumberFormat = "d/m/yy h:mm;@"

Sheets("Résultats").Range("I" & ligne) = Sheets("Extraction SIAT").Range("N" & ligne_extract_SIAT)

Sheets("Résultats").Range("I" & ligne).NumberFormat = "h:mm;@"

Sheets("Résultats").Range("J" & ligne) = Sheets("Extraction SIAT").Range("O" & ligne_extract_SIAT)

Sheets("Résultats").Range("J" & ligne).NumberFormat = "d/m/yy h:mm;@"

Sheets("Résultats").Range("K" & ligne) = Sheets("Extraction SIAT").Range("L" & ligne_extract_SIAT)

Sheets("Résultats").Range("L" & ligne) = Sheets("Extraction SIAT").Range("P" & ligne_extract_SIAT)

Sheets("Résultats").Range("O" & ligne) = Sheets("Extraction SIAT").Range("E" & ligne_extract_SIAT)

End If

ElseIf lignetrouvee Is Nothing Then 'Le numero de DR n'a pas été trouvé

Sheets("Résultats").Range("G" & ligne).Select

ActiveCell.EntireRow.Delete

ligne = ligne - 1

Else

ligne_extract_SIAT = lignetrouvee.Row

Sheets("Résultats").Range("H" & ligne) = Sheets("Extraction SIAT").Range("M" & ligne_extract_SIAT)

Sheets("Résultats").Range("H" & ligne).NumberFormat = "d/m/yy h:mm;@"

Sheets("Résultats").Range("I" & ligne) = Sheets("Extraction SIAT").Range("N" & ligne_extract_SIAT)

Sheets("Résultats").Range("I" & ligne).NumberFormat = "h:mm;@"

Sheets("Résultats").Range("J" & ligne) = Sheets("Extraction SIAT").Range("O" & ligne_extract_SIAT)

Sheets("Résultats").Range("J" & ligne).NumberFormat = "d/m/yy h:mm;@"

Sheets("Résultats").Range("K" & ligne) = Sheets("Extraction SIAT").Range("L" & ligne_extract_SIAT)

Sheets("Résultats").Range("L" & ligne) = Sheets("Extraction SIAT").Range("P" & ligne_extract_SIAT)

Sheets("Résultats").Range("O" & ligne) = Sheets("Extraction SIAT").Range("E" & ligne_extract_SIAT)

End If

Next

lignesuivante:

'Remplissage de la colonne ACTIVITEE TERMINEE MAIS REGIME NON DECONSIGNEE

dern_ligne_resultat = Worksheets("Résultats").Range("C20000").End(xlUp).Row

ligne_resultat = 6

For ligne = ligne_resultat To dern_ligne_resultat

If Sheets("Résultats").Range("K" & ligne).FormulaR1C1 = "TERM" Or Sheets("Résultats").Range("K" & ligne).FormulaR1C1 = "FINT" Or Sheets("Résultats").Range("K" & ligne).FormulaR1C1 = "PARE,PRET,TERM" Or Sheets("Résultats").Range("K" & ligne).FormulaR1C1 = "PRET,TERM" Or Sheets("Résultats").Range("K" & ligne).FormulaR1C1 = "FINT,TERM" Or Sheets("Résultats").Range("K" & ligne).FormulaR1C1 = "ENCO,PARE,TERM" Or Sheets("Résultats").Range("K" & ligne).FormulaR1C1 = "ENCO,PRET,TERM" Or Sheets("Résultats").Range("K" & ligne).FormulaR1C1 = "HIST" Or Sheets("Résultats").Range("K" & ligne).FormulaR1C1 = "HIST,PRET,TERM" Or Sheets("Résultats").Range("K" & ligne).FormulaR1C1 = "HIST,TERM" Then

Sheets("Résultats").Range("B" & ligne).FormulaR1C1 = "A DECONSIGNER"

Else

Sheets("Résultats").Range("B" & ligne).FormulaR1C1 = "REGIME DECONSIGNE"

End If

Next

'Remplissage de la colonne LIEN SIAT en fonction des conditions spécifiées dans le cdc

Worksheets("Résultats").Activate

With Range("A6:A" & Range("O" & Rows.Count).End(xlUp).Row)

.Formula = "=IF(OR(ISNUMBER(FIND(O6,P6,1)),ISNUMBER(FIND(O6,Q6,1))),""OUI"",""NON"")"

.Value = Value

End With

'Supprime la colonne N qui est inutile pour le résultat final

Sheets("Résultats").Activate

Columns("N:N").Delete shift:=xlToLeft

'on supprime les doublons

Sheets("Résultats").Activate

Sheets("Résultats").Range("$A$5:$S$999999").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6 _

, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17), Header:=xlYes

MsgBox ("Maj terminée")

End Sub


Bon la j'ai du supprimer plusieurs colonnes car le fichier fait plus de 300 KO.

Tu trouveras donc les colonnes A, B, C et moi j'aimerais savoir si pour chaque cellule de A, je retrouve sa valeur soit dans B ou C: je mets oui dans ce cas là dans une colonne et non sinon

9test.zip (22.17 Ko)
Rechercher des sujets similaires à "vba comment comparer deuc natures differetes"