Recréer un comportement similaire à la fonctionnalité de « Flash Fill » (Remplissage Instantané), Excel VBA

Recréer un comportement similaire à la fonctionnalité de « Flash Fill » (Remplissage Instantané), Excel VBA

Voici une explication détaillée et un code VBA pour recréer un comportement similaire à la fonctionnalité de « Flash Fill » (Remplissage Instantané) dans Excel.
Problématique :
Vous souhaitez remplir automatiquement une colonne de données en fonction d’un modèle fourni dans une cellule voisine. Par exemple, si vous avez une liste de noms comme « John Smith » dans la colonne A, vous voudriez remplir automatiquement les colonnes B et C avec « John » et « Smith » respectivement.
Étapes :
1. Identifier le Modèle : L’utilisateur définira un modèle dans une ou deux lignes d’exemples.
2. Appliquer le VBA pour remplir les données : Le code VBA utilisera cet exemple pour remplir les autres cellules en détectant le modèle.
Code VBA pour simuler le Flash Fill :

Sub CreateFlashFill()
    Dim ws As Worksheet
    Dim rng As Range
    Dim cell As Range
    Dim pattern As String
    Dim fillRange As Range
    Dim inputColumn As Range
    Dim outputColumn As Range
    Dim i As Long
    ' Définir la feuille et les colonnes d'entrée/sortie
    Set ws = ThisWorkbook.Sheets("Sheet1") ' Modifiez selon le nom de votre feuille
    Set inputColumn = ws.Range("A2:A20") ' Définir la plage des données d'entrée
    Set outputColumn = ws.Range("B2:B20") ' Définir la plage de la sortie (simulant le Flash Fill)
    ' Effacer les données précédentes dans la colonne de sortie
    outputColumn.ClearContents
    ' Obtenir le modèle de la première ligne (exemple)
    pattern = inputColumn.Cells(1, 1).Value ' Changez cela en fonction de votre modèle
    ' Parcourir la plage de données d'entrée
    For Each cell In inputColumn
        ' Vérifier si la valeur de la cellule correspond au modèle
        If cell.Value <> "" Then
            ' En fonction du modèle, diviser ou transformer la valeur
            ' Exemple : ici, nous séparons le nom complet en prénom et nom
            Dim parts() As String
            parts = Split(cell.Value, " ") ' Exemple : séparer par un espace (ajustez si nécessaire)
            ' Vérifier s'il y a plusieurs parties à gérer
            If UBound(parts) >= 0 Then
                ' Dans ce cas, nous plaçons la première partie dans la colonne de sortie
                outputColumn.Cells(cell.Row - 1, 1).Value = parts(0) ' Prénom
            End If
            If UBound(parts) > 0 Then
                ' S'il y a une deuxième partie, la mettre dans la cellule suivante
                outputColumn.Cells(cell.Row - 1, 2).Value = parts(1) ' Nom
            End If
        End If
    Next cell
End Sub

Explication détaillée :
1. Définir la feuille et les colonnes :

  • Nous définissons la feuille de calcul où se trouvent les données d’entrée (ws = ThisWorkbook.Sheets("Sheet1")).
  • Nous définissons la colonne d’entrée (par exemple, A2:A20) et la colonne de sortie où nous voulons simuler le comportement de Flash Fill (par exemple, B2:B20).

2. Définition du modèle :

  • Le modèle est défini par l’exemple fourni dans la première ligne de la colonne d’entrée (pattern = inputColumn.Cells(1, 1).Value). C’est ici que l’utilisateur donne un exemple de transformation (par exemple « John Smith » dans la première ligne).

3. Parcourir les données d’entrée :

  • Le code VBA parcourt la plage de la colonne d’entrée (For Each cell In inputColumn).
  • Si la cellule n’est pas vide, il effectue la transformation. Dans cet exemple, nous divisons les noms en fonction de l’espace (Split(cell.Value, " ")), mais vous pouvez l’adapter pour d’autres modèles, comme séparer des dates, extraire certains chiffres, etc.

4. Diviser et remplir la sortie :

  • Après avoir divisé la chaîne en parties, le code place la première partie (prénom) dans la cellule correspondante de la colonne de sortie (outputColumn.Cells(cell.Row - 1, 1).Value = parts(0)).
  • Si une deuxième partie existe (nom), elle est placée dans la cellule suivante (outputColumn.Cells(cell.Row - 1, 2).Value = parts(1)).

5. Sortie finale :

  • Après l’exécution de la macro, les colonnes B et C seront automatiquement remplies en fonction du modèle défini dans la première ligne.

Personnalisation :

    • Correspondance du modèle : Vous pouvez modifier la fonction Split() ou ajouter une logique personnalisée pour votre modèle spécifique (par exemple, si vous avez besoin de séparer des dates, d’extraire des numéros spécifiques, de formater des chaînes, etc.).
    • Plages dynamiques : Si la plage est dynamique (pas toujours 20 lignes), vous pouvez ajuster les plages d’entrée et de sortie pour détecter automatiquement la dernière ligne utilisée :

Set inputColumn = ws.Range("A2:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)

Limitation de Flash Fill :
Contrairement à la fonction Flash Fill intégrée d’Excel, qui utilise l’apprentissage automatique pour détecter des modèles basés sur plusieurs exemples, cette solution VBA nécessite de définir manuellement le modèle et ne remplit les données que sur la base du premier exemple.
Conclusion :
Ce code VBA permet d’automatiser le remplissage basé sur des modèles, similaire à la fonction Flash Fill dans Excel. Il peut être étendu pour fonctionner avec des modèles plus complexes et personnalisé pour différentes manipulations de données en fonction des besoins de l’utilisateur.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x