XL 2016 [Résolu]Application match VBA

  • Initiateur de la discussion Initiateur de la discussion Etn
  • Date de début Date de début

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 !

Etn

XLDnaute Occasionnel
Bonjour,

Je souhaiterais, en fonction du nombre en colonne A, placer une lettre en colonne B. Je pense qu'il faut utiliser le application.match mais je trouve pas la bonne méthode.

C'est bien plus clair avec l'exemple ci-joint.

Pourriez vous m'aider svp ?

Merci d'avance,
Etn
 

Pièces jointes

Bonjour ETN,
On peut le faire aussi avec une fonction perso :
VB:
Function ETN(N, P)
    L = Application.ThisCell.Row
    C = Application.ThisCell.Column
    If Cells(L, C - 1) = N Then
        ETN = P
    Else
        ETN = ""
    End If
End Function
Ce qui évite un bouton.
 

Pièces jointes

ou en automatique sans fonction avec un Worksheet_Change :
Code:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Address = "$E$12" Or Target.Address = "$E$13" Then
        Range("B2:B100").ClearContents
        Ind = Application.Match(Range("E12"), Range("A:a"), 0)
        Cells(Ind, 2) = Range("E13")
    End If
End Sub
 

Pièces jointes

Le VBA est inutile mais si l'on y tient on peut lui faire entrer la formule précédente en colonne B.

Voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'désactive les évènements
If FilterMode Then ShowAllData 'si la feuille est filtrée
With Range("A1", UsedRange).Offset(1).Columns(2)
    .Formula = "=REPT(E$13,A2=E$12)" 'à adapter
    .Value = .Value 'supprime les formules
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
Testée sur 100 000 lignes : la macro s'exécute chez moi en 0,45 seconde.
 

Pièces jointes

Bien entendu il est plus logique d'utiliser Application.Match :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
If FilterMode Then ShowAllData 'si la feuille est filtrée
On Error Resume Next
With Range("A1", UsedRange).Offset(1)
    .Columns(2).ClearContents 'RAZ
    .Cells(Application.Match([E12], .Columns(1), 0), 2) = [E13] 'à adapter au besoin
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
Même sur 100 000 lignes l'exécution est immédiate.

Bonne nuit.
 
- 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

  • Question Question
Microsoft 365 Power Query
Réponses
8
Affichages
112
Réponses
10
Affichages
539
Réponses
20
Affichages
698
Retour