Microsoft 365 Ajouter dans TS en fonction valeur de cellule

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

eric72

XLDnaute Accro
Bonjour à tous,
Je rencontre un problème pour ajouter une ligne dans un TS dont le nom est dans une cellule, je m'explique:
- J'ai un onglet base, en a1 une valeur, exemple "Production"
- On retrouve cette valeur dans l'onglet "Données" avec une correspondance "Abrégé"
- J'aimerais ajouter les infos Nom Prénom de "Base" dans le tableau dont le nom est l'abrégé de "A1" Production, mais je ne parviens pas à déterminer le nom du tableau à partir de ma cellule A1
Je m'en remets donc une nouvelle fois à votre savoir.
Merci beaucoup pour votre aide.
Eric
 

Pièces jointes

Solution
bonjour

essaie ceci
VB:
Sub test()
    Dim NomTab, Nom, Prénom As String
    Dim SheetsName As String
    Dim LastLine As Long
    
    With Sheets("Base") 'on récupère les infos
        NomTab = .Range("A1") 'c'est aussi le nom de la feuille qui contient le tableau du meme nom
        Nom = .Range("A4")
        Prénom = .Range("B4")
    End With
    
    
    NomTabAbrégé = Application.WorksheetFunction.XLookup(Feuil1.Range("A1"), Feuil4.Range("TbService[Service]"), Feuil4.Range("TbService[Abrégé]"))
    With Sheets(NomTabAbrégé).listobjects(1)
        .ListRows.Add
        LastLine = .ListRows.Count
        .DataBodyRange(LastLine, 1) = Nom
        .DataBodyRange(LastLine, 2) = Prénom
    End With
End Sub
bonjour

essaie ceci
VB:
Sub test()
    Dim NomTab, Nom, Prénom As String
    Dim SheetsName As String
    Dim LastLine As Long
    
    With Sheets("Base") 'on récupère les infos
        NomTab = .Range("A1") 'c'est aussi le nom de la feuille qui contient le tableau du meme nom
        Nom = .Range("A4")
        Prénom = .Range("B4")
    End With
    
    
    NomTabAbrégé = Application.WorksheetFunction.XLookup(Feuil1.Range("A1"), Feuil4.Range("TbService[Service]"), Feuil4.Range("TbService[Abrégé]"))
    With Sheets(NomTabAbrégé).listobjects(1)
        .ListRows.Add
        LastLine = .ListRows.Count
        .DataBodyRange(LastLine, 1) = Nom
        .DataBodyRange(LastLine, 2) = Prénom
    End With
End Sub
 
bonjour

essaie ceci
VB:
Sub test()
    Dim NomTab, Nom, Prénom As String
    Dim SheetsName As String
    Dim LastLine As Long
   
    With Sheets("Base") 'on récupère les infos
        NomTab = .Range("A1") 'c'est aussi le nom de la feuille qui contient le tableau du meme nom
        Nom = .Range("A4")
        Prénom = .Range("B4")
    End With
   
   
    NomTabAbrégé = Application.WorksheetFunction.XLookup(Feuil1.Range("A1"), Feuil4.Range("TbService[Service]"), Feuil4.Range("TbService[Abrégé]"))
    With Sheets(NomTabAbrégé).listobjects(1)
        .ListRows.Add
        LastLine = .ListRows.Count
        .DataBodyRange(LastLine, 1) = Nom
        .DataBodyRange(LastLine, 2) = Prénom
    End With
End Sub
Bonjour vgendron,
Merci pour ta réponse, je vois que tu tiens compte du nom de la feuille, alors que moi j'essayais avec le nom du tableau, ça fonctionne et c'est bien le principal.
Merci beaucoup encore une fois.
 
pour tenir compte du nom du tableau,
il suffit de remplacer "ListObjects(1)" par "ListObjects(NomTabAbrégé")
mais.. j'ai pas essayé.. je crois que dans ce cas, il faut aussi préciser le nom de la feuille qui contient le tableau
j'aurais pu écrire directement
Sheets(NomTabAbrégé).listobjects(NomTabAbrégé)

ListbObjects(1) prend le 1er tableau de la feuille....donc..s'il y en a plusieurs...
 
pour tenir compte du nom du tableau,
il suffit de remplacer "ListObjects(1)" par "ListObjects(NomTabAbrégé")
mais.. j'ai pas essayé.. je crois que dans ce cas, il faut aussi préciser le nom de la feuille qui contient le tableau
j'aurais pu écrire directement
Sheets(NomTabAbrégé).listobjects(NomTabAbrégé)

ListbObjects(1) prend le 1er tableau de la feuille....donc..s'il y en a plusieurs...
Le seul petit hic est que quand le tableau est vide ça ajoute à la deuxième ligne plutôt que la 1ère!!!
Désolé
 
Le seul petit hic est que quand le tableau est vide ça ajoute à la deuxième ligne plutôt que la 1ère!!!
Désolé
il faut le vider avant..
sélectionnes toutes les lignes du tableau SAUF la ligne d'entete
clic droit
supprimer les lignes

==>visuellement tu vas "voir" une ligne de données vide, mais dans les faits.. VBA voit une table SANS ligne de données
==> listrows.count=0
Listrows.add ajoute une ligne==> visuellement, tu vois la meme chose que toute à l'heure, mais maintenant VBA voit une ligne de données vide
 
il faut le vider avant..
sélectionnes toutes les lignes du tableau SAUF la ligne d'entete
clic droit
supprimer les lignes

==>visuellement tu vas "voir" une ligne de données vide, mais dans les faits.. VBA voit une table SANS ligne de données
==> listrows.count=0
Listrows.add ajoute une ligne==> visuellement, tu vois la meme chose que toute à l'heure, mais maintenant VBA voit une ligne de données vide
Re bonjour vgendron,
Sans vouloir abuser , j'aimerais éviter que si le nom existe déjà, on ajoute une ligne, j'ai donc mis ce code mais bien évidemment cela ne fonctionne pas:

VB:
Sub test()
    Dim NomTab, Nom, Prénom As String
    Dim SheetsName As String
    Dim LastLine As Long
    
    With Sheets("Base") 'on récupère les infos
        NomTab = .Range("A1") 'c'est aussi le nom de la feuille qui contient le tableau du meme nom
        Nom = .Range("A4")
        Prénom = .Range("B4")
    End With
    
    
    
    NomTabAbrégé = Application.WorksheetFunction.XLookup(Feuil1.Range("A1"), Feuil4.Range("TbService[Service]"), Feuil4.Range("TbService[Abrégé]"))
  [B]  Dim i As Variant
         i = Application.Match(Nom, Sheets(NomTabAbrégé).listobjects(1), 0)
        If IsError(i) Then Exit Sub[/B]

    
    With Sheets(NomTabAbrégé).listobjects(1)
        .ListRows.Add
        LastLine = .ListRows.Count
        .DataBodyRange(LastLine, 1) = Nom
        .DataBodyRange(LastLine, 2) = Prénom
    End With
End Sub
Je suppose qu'il faut préciser la colonne mais je ne vois pas comment faire!!!
Désolé et merci encore.
 
il faut le vider avant..
sélectionnes toutes les lignes du tableau SAUF la ligne d'entete
clic droit
supprimer les lignes

==>visuellement tu vas "voir" une ligne de données vide, mais dans les faits.. VBA voit une table SANS ligne de données
==> listrows.count=0
Listrows.add ajoute une ligne==> visuellement, tu vois la meme chose que toute à l'heure, mais maintenant VBA voit une ligne de données vide
Je peux aussi faire comme ça, pas l'idéal mais ça marche
VB:
 i = Application.Match(Nom, Sheets(NomTabAbrégé).Range("a:a"), 0)
😉
 
essaie avec ca:
i = Application.Match(Nom, Sheets(NomTabAbrégé).listobjects(1).listcolumns(1), 0)

et un peu de lecture qui peut aider
 
- 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

Retour