Range Offset tableau et nom de colonne

  • Initiateur de la discussion Initiateur de la discussion Jerembi
  • 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 !

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

Dernière édition:
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
 
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 !!
 
- 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

Réponses
8
Affichages
233
Réponses
2
Affichages
202
Réponses
10
Affichages
443
Retour