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 SubOk 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