Créer des plages dynamiques, Excel VBA

Créer des plages dynamiques, Excel VBA

Voici un code VBA détaillé pour créer des plages dynamiques dans Excel, ainsi qu’une explication approfondie :
Code VBA pour Créer des Plages Dynamiques
Ce code définit une plage nommée dynamique qui s’étend ou se rétrécit en fonction du nombre de cellules remplies dans une colonne spécifique.

Sub CreateDynamicRange()
    Dim ws As Worksheet
    Dim rng As Range
    Dim lastRow As Long
    Dim rangeName As String
    ' Définir la feuille de travail
    Set ws = ThisWorkbook.Sheets("Sheet1") ' Modifiez selon vos besoins
    ' Définir la colonne où la plage dynamique doit être créée
    Dim col As String
    col = "A" ' Modifiez selon vos besoins
    ' Trouver la dernière ligne non vide dans la colonne spécifiée
    lastRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row
    ' Définir la plage dynamiquement
    Set rng = ws.Range(ws.Cells(2, col), ws.Cells(lastRow, col)) ' Ajustez la ligne de départ si nécessaire
    ' Définir le nom de la plage
    rangeName = "DynamicRange"
    ' Supprimer la plage nommée si elle existe déjà
    On Error Resume Next
    ws.Names(rangeName).Delete
    On Error GoTo 0
    ' Créer la plage nommée
    ws.Names.Add Name:=rangeName, RefersTo:=rng
    ' Informer l'utilisateur
    MsgBox "La plage nommée dynamique '" & rangeName & "' a été créée avec succès.", vbInformation, "Succès"
    ' Nettoyage
    Set ws = Nothing
    Set rng = Nothing
End Sub

Explication Détaillee
1. Sélection de la Feuille de Travail
Set ws = ThisWorkbook.Sheets("Sheet1")

  • Cette ligne attribue la feuille Sheet1 à la variable ws.
  • Vous pouvez modifier "Sheet1" pour cibler une autre feuille.

2. Définition de la Colonne
Dim col As String
col = "A"

  • La colonne pour la plage dynamique est définie sur la colonne « A ».
  • Vous pouvez changer cette valeur pour indiquer une autre colonne.

3. Trouver la Dernière Ligne Non Vide
lastRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row

  • ws.Rows.Count donne le nombre total de lignes (par exemple, 1 048 576 dans Excel 2016+).
  • .End(xlUp).Row remonte depuis la dernière ligne pour trouver la dernière cellule remplie.

4. Définition de la Plage Dynamique
Set rng = ws.Range(ws.Cells(2, col), ws.Cells(lastRow, col))

  • La plage commence à partir de la ligne 2 (modifiable) et s’étend jusqu’à la dernière ligne remplie.
  • Cela rend la plage flexible pour s’agrandir ou se réduire au fur et à mesure des modifications des données.

5. Nommer la Plage Dynamique
rangeName = "DynamicRange"

  • La plage se voit attribuer le nom "DynamicRange".
  • Vous pouvez changer ce nom selon vos préférences.

6. Gérer les Plages Nommées Existantes
On Error Resume Next
ws.Names(rangeName).Delete
On Error GoTo 0

  • Si la plage nommée existe déjà, elle est supprimée pour éviter les erreurs.
  • On Error Resume Next empêche les erreurs d’exécution.

7. Créer la Plage Nommée
ws.Names.Add Name:=rangeName, RefersTo:=rng

  • Cette ligne crée la plage nommée qui fait référence à la plage dynamique définie précédemment.

8. Notification à l’Utilisateur
MsgBox "La plage nommée dynamique '" & rangeName & "' a été créée avec succès.", vbInformation, "Succès"

  • Un message de confirmation indique que la plage dynamique a été créée avec succès.

9. Nettoyage
Set ws = Nothing
Set rng = Nothing

  • Cela libère la mémoire en affectant Nothing aux objets.

Comment Utiliser le Code
1. Ouvrez Excel et appuyez sur ALT + F11 pour ouvrir l’Éditeur VBA.
2. Allez dans Insertion > Module pour créer un nouveau module.
3. Copiez et collez le code ci-dessus dans le module.
4. Exécutez la macro CreateDynamicRange.
5. Vérifiez dans Formules > Gestionnaire de noms (CTRL + F3) pour voir la nouvelle plage nommée.
Avantages des Plages Dynamiques

  • Expansion Automatique : Pas besoin de modifier manuellement les références de plage.
  • Flexibilité des Données : Pratique pour les Tableaux Croisés Dynamiques, Graphiques et Formules.
  • Efficacité : Réduit les erreurs manuelles et améliore l’automatisation.
Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x