Banzai64 a écrit :
Bonjour
Regardes si cela te convient
est ce que
possible de comparé la valeur des cellules ?
Nombre de ligne Visible >2:
valeur des cellule
*Si même copier la valeur de la première Cellule ,
* si non :
-Résultat : "!!!!" , avec commentaire ==> "Attention!! double valeurs pour même DEP Num" & Valeur1 & Valeur2 .....
Nombre de ligne Visible = 2:
*copier la valeur de la 2éme Cellule ,
Nombre de ligne Visible = 1:
Commentaire "Pas de résultat "
Dim J As Long, NbLg As Long, NBLigne As Long
Dim Fichier
Dim WSDestin As Worksheet
Fichier = Application.GetOpenFilename("Excel (*.xlsx), *.xlsx", , "Sélection du fichier", , False)
If Fichier = False Then Exit Sub
Application.ScreenUpdating = False
Set WSDestin = Sheets("SOL Check")
With WSDestin
.Range("D2:E" & .Range("A" & Rows.Count).End(xlUp).Row).ClearContents
End With
With Workbooks.Open(Fichier)
With .Sheets("Feuil2")
NbLg = .Range("A" & Rows.Count).End(xlUp).Row
For J = 2 To WSDestin.Range("A" & Rows.Count).End(xlUp).Row
.Range("A1:O" & NbLg).AutoFilter Field:=1, Criteria1:=WSDestin.Range("A" & J)
.Range("A1:O" & NbLg).AutoFilter Field:=5 + WSDestin.Range("B" & J), Criteria1:="<>"
NBLigne = Application.Subtotal(103, .Columns("A"))
NBLigne = Application.Subtotal(103, .Columns("A"))
vcli = .Range("D3:D" & NbLg).SpecialCells(xlCellTypeVisible).Cells(1, 1)
vclj = .Range("D3:D" & NbLg).SpecialCells(xlCellTypeVisible).Cells(NBLigne, 1)
If NBLigne > 1 And vcli = vclj Then
.Range("C2:C" & NbLg).SpecialCells(xlCellTypeVisible).Cells(1, 1).Copy
WSDestin.Range("D" & J).PasteSpecial Paste:=xlPasteValues
ElseIf NBLigne > 1 And vcli <> vclj Then
WSDestin.Range("D" & J) = "!!!!!"
WSDestin.Range("E" & J) = "Attention !! Double solution: " & vcli & " |" & vclj
Else
WSDestin.Range("F" & J) = "Pas de résultat"
End If
.ShowAllData
Next J
End With
.Close savechanges:=False
End With
j'essai d'obtenir la valeur de la dernière ligne mais la macro garde toujours même valeu, mais je n’arrive pas j'ai fait un recherche et je trouve un truc comme ça :
Sub zzzz()
Set plg = Range("A1", Cells(Cells.Find("*", , , , 2, 2).Row, Cells.Find("*", , ,
, 1, 2).Column))
MsgBox plg(plg.Count).Address
End Sub
PS : Je te déconseille fortement d'utiliser la méthode "SpecialCells" avec le
type "xlCellTypeLastCell"
Elle réserve bien des surprises car elle considère comme non vide les cellules
formatées autrement que par défaut et mémorise les précédentes
saisies/formatages mêmes s'ils ont été supprimés
Pour le fun :
Sub zzz2()
x StrReverse(Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Address)
y = """" & x & """"
MsgBox StrReverse(Left(x, Evaluate("find(""$""," & y & ",find(""$""," & y &
")+1)")))
End Sub
merci