VBA Modification codage

Bonjour le forum
Pourquoi ce code ne prend pas en compte la première ligne de mon Tableau?
Merci d'avance
Nonno
essai.xlsm
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim tableau As ListObject
    Dim premièreCelluleVide As Range

    ' Référence au tableau structuré "Tableau1"
    Set tableau = Me.ListObjects("Tableau1")

    ' Vérifier si la cellule double-cliquée est dans I1:I4
    If Not Intersect(Target, Me.Range("I1:I4")) Is Nothing Then
        Cancel = True

        ' Trouver la première cellule vide dans la première colonne de Tableau1
        Set premièreCelluleVide = tableau.ListColumns(5).DataBodyRange.Cells(1).Resize(tableau.ListRows.Count - 1).Find("")

        ' Vérifiez que premièreCelluleVide n'est pas Nothing
        If Not premièreCelluleVide Is Nothing Then
            ' Copie la valeur de la cellule double-cliquée
            premièreCelluleVide.Value = Target.Value
        Else
            MsgBox "Aucune cellule vide trouvée dans le tableau.", vbExclamation
        End If
    End If
End Sub

Bonjour,

De ce que je vois c'est plutôt la dernière ligne que votre code devrait ignorer :

Vous faites .Resize(tableau.ListRows.Count - 1) cela retire la dernière ligne du tableau de la sélection. Si vous voulez récupérer toute la colonne 5, faites simplement

Set premièreCelluleVide = tableau.ListColumns(5).DataBodyRange.Find("")

Si cependant vous avez toujours l'impression que le code ignore votre première cellule, qui est j'imagine celle que vous cherchez, c'est probablement qu'elle contient un espace ou un caractère invisible. Vérifiez bien qu'elle soit vide.

Rien de changé, passe directement à la deuxième ligne

4essai.xlsm (23.02 Ko)

bonjour nonno, salut saboh12617,

un essai

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     Dim c     As Range, r

     On Error Resume Next
     Set c = Me.ListObjects("Tableau1").ListColumns(5).DataBodyRange     'directement première colonne ou 5ième colonne ????
     If c Is Nothing Then MsgBox "erreur":exit sub    'problème avec ce TS ou listcolumn
     On Error GoTo 0

     If Not Intersect(Target, Me.Range("I1:I4")) Is Nothing Then     ' Vérifier si la cellule double-cliquée est dans I1:I4
          Cancel = True
          r = Application.IfError(Application.Match("", c, 0), 0)     'quelle celluleest vide, 0=erreur
          If r > 0 Then
               c.Cells(r, 1).Value2 = Target.Value2
          Else
               MsgBox "Aucune cellule vide trouvée dans cette colonne du tableau.", vbExclamation
          End If
     End If
End Sub

Bonjour à tous,

La question est, pourquoi chercher la première cellule vide de la colonne 1 ?

Si c'est pour ajouter une ligne à la suite, alors utilisez tout simplement la méthode Add de la collections ListRows.

Vous avez aussi de très bon articles sur les tableaux structuré sur la toile.

Re,

@Jean-Paul si j'ai bien compris c'est plutôt pour peupler une colonne existante mais vide ligne par ligne.

Auquel cas une solution simple c'est d'utiliser Range (qui comprend l'en-tête) plutôt que DataBodyRange. Et donc la 2e cellule (= d'où part toujours .Find (c'est comme ça)) sera toujours la 1e ligne de data du tableau. Soit :

Set premièreCelluleVide = tableau.ListColumns(5).Range.Find(vbNullString)

Chez moi aucun pb.

Bonjour à tous, oui c'est ça il suffisait du supprimer "DataBody"

Merci encore et bon Après midi.

Cordialement

Nonno

Rechercher des sujets similaires à "vba modification codage"