Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…