Range Offset tableau et nom de colonne

Jerembi

XLDnaute Nouveau
Bonjour,

Tout d'abord merci de prendre en compte que je suis novice en VBA, je vous expose mon petit souci qui reste pour le moment en dehors de ma compréhension

Pour mon travail, je traite des données qui proviennent d'une BDD qui comporte parfois des erreurs (infos manquantes).
J'ai alors besoin de combler des vides dans un tableau lorsque des cellule sont vides dans la 3eme colonne je vérifie s'il y a une donnée dans la 1ere colonne de la même ligne et si c'est le cas je recopie simplement les valeurs de la colonne 1 et colonne 2 en colonne 3 & 4 et je passe à la ligne suivante. Tout fonctionne tant que je me sers d'un Range au format "C2:C100" mais je voudrais pouvoir utiliser le nom de la colonne plutôt qu'un nombre de ligne défini puisque la taille du tableau est variable...
Une petite aide serait la bienvenue ;). Faut il une boucle autrement??

Macro1 qui fonctionne :
----------------------------------------------------------------------------
Sub Compléter_Cellules_vides()

Dim c As Range

Application.ScreenUpdating = False

For Each c In Range("C2:C31")
If c = "" And c.Offset(, -2) <> "" Then
c = c.Offset(, -2)
c.Offset(, 1) = c.Offset(, -1)
Else
End If
Next

Application.ScreenUpdating = True

End Sub
----------------------------------------------------------------------------

Macro2 qui ne fonctionne pas

Sub Compléter_Cellules_vides2()

Dim c As Range

Application.ScreenUpdating = False

For Each c In Range("Tableau1[[#Headers],[date cloture cor]]")
If c = "" And c.Offset(, -2) <> "" Then
c = c.Offset(, -2)
c.Offset(, 1) = c.Offset(, -1)
Else
End If
Next

Application.ScreenUpdating = True

End Sub
-----------------------------------------------------------------------
 

Pièces jointes

  • MacroBouchetrou-V2.xlsm
    23.7 KB · Affichages: 6
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Votre macro légèrement modifiée pour qu'elle réponde au nombre de ligne en colonne 3 (C)
Définition d'une plage pour éviter le recalcul de la plage à chaque bouclage de For c
VB:
Sub Compléter_Cellules_vides()
    Dim c As Range, plage As Range
    
    Set plage = Sheets("Feuil1").Range("Tableau1[date cloture cor]")
    Application.ScreenUpdating = False

    For Each c In plage
        If c = "" And c.Offset(, -2) <> "" Then
            c = c.Offset(, -2)
            c.Offset(, 1) = c.Offset(, -1)
        Else
        End If
    Next

    Application.ScreenUpdating = True

End Sub

Cordialement
 

Jerembi

XLDnaute Nouveau
Bonjour,

Votre macro légèrement modifiée pour qu'elle réponde au nombre de ligne en colonne 3 (C)
Définition d'une plage pour éviter le recalcul de la plage à chaque bouclage de For c
VB:
Sub Compléter_Cellules_vides()
    Dim c As Range, plage As Range
   
    Set plage = Sheets("Feuil1").Range("Tableau1[date cloture cor]")
    Application.ScreenUpdating = False

    For Each c In plage
        If c = "" And c.Offset(, -2) <> "" Then
            c = c.Offset(, -2)
            c.Offset(, 1) = c.Offset(, -1)
        Else
        End If
    Next

    Application.ScreenUpdating = True

End Sub

Cordialement
Merci beaucoup Roblochon pour ce retour très rapide !!
 

Discussions similaires

Réponses
4
Affichages
267
Réponses
1
Affichages
233

Membres actuellement en ligne

Statistiques des forums

Discussions
314 499
Messages
2 110 249
Membres
110 711
dernier inscrit
chmessi