Commencer par corriger la formule car pas besoin de quatre colonnes pour extraire les données de la deuxième !
Donc en B2 - j'en déduis donc qu'il y a une ligne de titre, est-ce si compliqué de l'expliquer ?! - nouvelle formule :
=RECHERCHEV(A2,listeOT!$A:$B,2,FAUX) …
En recopiant cette formule en B3, la référence A2 devient logiquement A3 pour que cela fonctionne.
Donc pour ne pas effectuer une formule par cellule de la colonne B, il faut passer par une formule en notation R1C1 :
sélectionner la cellule B2 puis dans le VBE - l'éditeur du VBA - dans la fenêtre Exécution (CTRL G)
entrer ? activecell.FormulaR1C1 et valider : la conversion de la formule en notation R1C1
apparait nativement en anglais en dessous.
Cette conversion est directement exploitable dans la plage de la feuille "BaseOPE" et donc sans boucle !
Deux méthodes pour calculer cette plage.
La première utilise la propriété CurrentRegion comme dans la précédente discussion :
1 2 3 4 5 6 7 8
| Sub Demo1()
With Worksheets("BaseOPE").Cells(1).CurrentRegion.Columns(1)
With .Offset(1, 1).Resize(.Rows.Count - 1)
.FormulaR1C1 = "formule convertie ici"
.Formula = .Value
End With
End With
End Sub |
Pointer la première colonne évite une erreur quand la seconde est vide …
La deuxième méthode se sert de la propriété Range.End :
1 2 3 4 5 6 7 8
| Sub Demo2()
With Worksheets("BaseOPE")
With Range(.Cells(2, 1), .Cells(1).End(xlDown)).Offset(, 1)
.FormulaR1C1 = "formule convertie ici"
.Formula = .Value
End With
End With
End Sub |
Lorsqu'il s'agit d'une colonne discontinue - avec des trous dans les saisies - partir de la dernière cellule
de la colonne pour remonter avec la propriété
End (cf l'aide VBA intégrée) sur sa dernière saisie …
Possibles améliorations en cas de lenteur :
• désactiver au préalable l'affichage via la propriété
ScreenUpdating.
• Calculer la plage exacte pour la formule RECHERCHEV : il y a ce qu'il faut dans cette discussion
et consulter aussi l'aide de la propriété
Range.Address, c'est comme les LEGO !
_________________________________________________________________________________________________
Merci de cliquer sur
pour chaque message ayant aidé puis sur
pour clore cette discussion …
Partager