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

XL 2013 code vba pour remplissage automatique

louane2022

XLDnaute Nouveau
Bonjour,
je souhaite savoir quel code VBA pour remplissage instantané selon des mots clés.
 

Pièces jointes

  • REMPLISSAGE INSTANTANEE.xlsx
    9.7 KB · Affichages: 13

job75

XLDnaute Barbatruc
Bonjour louane2022, mapomme,

Voyez le fichier joint et cette fonction VBA :
VB:
Function Extract$(x$, matrice)
Dim s, ub%, i%
s = Split(Application.Trim(x))
ub = UBound(s)
For i = 0 To ub
    If IsNumeric(Application.Match(s(i), matrice, 0)) Then
        If i < ub Then Extract = s(i + 1)
        Exit For
    End If
Next
End Function
Le code doit être placé impérativement dans un module standard.

Formule en C2 à tirer vers le bas =Extract(A2;{"FAV.";"VERS";"CB"})

La matrice {"FAV.";"VERS";"CB"} contient 3 mots clés.

A+
 

Pièces jointes

  • REMPLISSAGE INSTANTANEE(1).xlsm
    17.6 KB · Affichages: 6

job75

XLDnaute Barbatruc
Une solution nettement plus rapide grâce au Dictionary dans ce fichier (2) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object, matrice, i&, tablo, resu(), s, ub%, j%
'---mémorisation---
Set d = CreateObject("Scripting.Dictionary")
matrice = Array("FAV.", "VERS", "CB") 'modifiable
For i = 0 To UBound(matrice): d(matrice(i)) = "": Next i
'---tableau des résultats---
tablo = [A1].CurrentRegion.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
ReDim resu(1 To UBound(tablo), 1 To 1)
For i = 2 To UBound(tablo)
    s = Split(Application.Trim(tablo(i, 1)))
    ub = UBound(s)
    For j = 0 To ub
        If d.exists(s(j)) Then
            If j < ub Then resu(i, 1) = s(j + 1)
            Exit For
        End If
Next j, i
'---restitution---
Application.EnableEvents = False 'désactive les évènements
If FilterMode Then ShowAllData 'si la feuille est filtrée
With [C1] '1ère cellule de destination
    resu(1, 1) = .Value
    .Resize(i - 1) = resu
    .Offset(i - 1).Resize(Rows.Count - i - .Row + 2).ClearContents  'RAZ en dessous
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
La macro est placée dans le code de la feuille et se déclenche quand une cellule quelconque est modifiée.

Testé en recopiant le tableau A2:A9 sur 50 000 lignes :

- recalcul des fonctions du post #4 => 2,2 secondes

- cette macro => 0,6 seconde chez moi sur Win 11 Excel 2019.
 

Pièces jointes

  • REMPLISSAGE INSTANTANEE(2).xlsm
    19.5 KB · Affichages: 3
Dernière édition:

Discussions similaires

Réponses
0
Affichages
480
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…