syntaxe VBA plage de cellule avec variable

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 !

superbog

XLDnaute Occasionnel
Voilà
dans la feuille "HR" je voudrais comparer les lignes de la plage C2:E300 avec celles de la plage F2:H300 et si les lignes sont identiques, alors recopier la cellule I dans la cellule M de la même ligne

voici le code, il ne fonctionne pas

Code:
Sub verif2()


Dim i As Integer

    'Recherche de la ligne et tri dans chaque feuille
For i = 2 To 300

If Sheets("HR").Range(.Cells(i, "c"), .Cells(i, "e")) = Sheets("HR").Range(.Cells(i, "f"), .Cells(i, "h")) Then
Sheets("HR").Cells(i, "m") = Sheets("HR").Cells(i, "i")


         End If
         
         Next i
End Sub

pourriez vous m'aider?
 
Re : syntaxe VBA plage de cellule avec variable

bonjour Superbog
à tester

Code:
Sub verif2()
    Dim i As Long

    'Recherche de la ligne et tri dans chaque feuille
    With Sheets("HR")
        For i = 2 To 300
            If .Cells(i, "c") = .Cells(i, "f") And .Cells(i, "d") = .Cells(i, "g") And .Cells(i, "e") = .Cells(i, "h") Then
                .Cells(i, "m") = .Cells(i, "i")
            End If
        Next i
    End With

End Sub
 
Re : syntaxe VBA plage de cellule avec variable

Bonjour Superbog, Bebere 🙂

Un essai ?:
Code:
Sub verif2()
Dim i&, j&, egal As Boolean
   'Recherche de la ligne et tri dans chaque feuille
   With Sheets("HR")
      For i = 2 To 300
         egal = True
         For j = 0 To 2
            egal = egal And (.Cells(i, "c").Offset(, j) = .Cells(i, "f").Offset(, j))
         Next j
         If egal Then .Cells(i, "m") = .Cells(i, "i")
      Next i
   End With
End Sub
 
Re : syntaxe VBA plage de cellule avec variable

Re,

En plus concis ?:
VB:
Sub verif2()
  With Sheets("HR")
    .Range("m2").FormulaArray = _
        "=IF(AND(RC[-10]:RC[-8]=RC[-7]:RC[-5]),IF(RC[-4]="""","""",RC[-4]),"""")"
    .Range("m2").AutoFill Destination:=Range("m2:m300"), Type:=xlFillDefault
    .Range("m2:m300") = .Range("m2:m300").Value
  End With
End Sub
 
Re : syntaxe VBA plage de cellule avec variable

Bonjour superbog, Bebere, mapomme,

Si les plages avaient un grand nombre de lignes, des tableaux VBA seraient plus rapides :

Code:
Sub verif2()
Dim P1 As Range, P2 As Range, P3 As Range, P4 As Range
Dim t1, t2, t3, t4, ncol%, i&, j%
With Sheets("HR")
Set P1 = .[C2:E300]: Set P2 = .[F2:H300]: Set P3 = .[I2:I300]: Set P4 = .[M2:M300]
End With
P4 = "" 'facultatif, si l'on veut réinitialiser la plage
t1 = P1: t2 = P2: t3 = P3: t4 = P4 'matrices, plus rapides
ncol = UBound(t1, 2)
For i = 1 To UBound(t1)
  For j = 1 To ncol
    If t1(i, j) <> t2(i, j) Then GoTo 1
  Next
  t4(i, 1) = t3(i, 1)
1 Next
P4 = t4 'restitution
End Sub
Il faudrait comparer avec la 2ème solution de mapomme qui est aussi très rapide.

Bonne journée.
 
Re : syntaxe VBA plage de cellule avec variable

Bonjour à tous

mapomme
Les presque même endives sans autofill, c'est un chouia plus concis 😉
Code:
Sub UnPetitChiconNonAutofilet()
With Sheets("HR").Range("m2:m300")
.FormulaArray = _
"=IF(AND(RC[-10]:RC[-8]=RC[-7]:RC[-5]),IF(RC[-4]="""","""",RC[-4]),"""")"
.Value = .Value
End With
End Sub
 
Re : syntaxe VBA plage de cellule avec variable

Hello Jean-Marie,

Ta solution ne peut pas marcher, tu ne l'as donc pas testée 🙄

La validation matricielle doit en effet se faire sur chaque cellule de la colonne M, pas sur la plage entière.

A+
 
Re : syntaxe VBA plage de cellule avec variable

Bonjour job75


Si j'ai testé 😉
Mais simplement le fait de remplir les cellules sans l'autofill
Maintenant je comprends pourquoi mapomme avait de l'autofill dans ces endives 😉

Mais comme superbog semble déjà satisfait et n'est pas revenu dans son fil, ma honte sera moins grande 😉
 
Re : syntaxe VBA plage de cellule avec variable

Re,

Comme tu le souhaites JM, on peut entrer une formule sur toute la plage :

Code:
Sub UnPetitChiconNonAutofilet()
With Sheets("HR").Range("m2:m300")
.FormulaArray = _
"=IF((C2:C300=F2:F300)*(D2:D300=G2:G300)*(E2:E300=H2:H300),IF(I2:I300="""","""",I2:I300),"""")"
.Value = .Value
End With
End Sub
A+
 
Re : syntaxe VBA plage de cellule avec variable

Re

Job75
C'était pas vraiment que je le souhaite 😉
je voulais juste taquiner mapomme avec mon endive, pardon mes endives en ce matin pluvieux 😉

Donc finalement, l'idée n'était pas si mauvaise alors 😉
On peut dans le cas présent se passer de l'autofill
 
Re : syntaxe VBA plage de cellule avec variable

Re,

Sur Win 7 - Excel 2010 j'ai testé sur 100000 lignes (vides, donc identiques) les durées d'exécution.

- macro mapomme post #5 => 21,7 secondes

- macro job75 post #10 => 0,69 seconde

- macro job75 post #6 => 0,41 seconde.

On voit de nouveau que les tableaux VBA sont très performants.

A+
 
- 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

Discussions similaires

Réponses
15
Affichages
657
Réponses
5
Affichages
839
Réponses
2
Affichages
496
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
8
Affichages
750
Retour