Autres Créer lignes tableau en fonction d'une valeur cellule

Moran

XLDnaute Nouveau
Bonjour à tous !

Voici mon problème.
Je souhaite créer des tableaux, sur un seul et même onglet et que les lignes de ces derniers se créent automatiquement en fonction d'une valeur indiquée dans une cellule...et que les formules présentes sur la ligne 1 se reproduisent dans les suivantes.

J'espère que je suis suffisamment clair dans mes explications.

Merci pour votre aide !
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Moran et bienvenu, bonjour le forum,

C'est clair sans l'être...

et que les lignes de ces derniers se créent automatiquement en fonction d'une valeur indiquée dans une cellule
Ce que je te propose c'est l'utilisation de tableaux structurés (ListObject).
Tu crées un tableau avec justes les en-têtes et une ligne vide puis menu Insertion/Tableau.
Tu écris les formules et les formats dans la ligne vide.
Les formules sont automatiquement reportées dans les lignes suivantes. Les lignes se créent automatiquement quand tu remplis la dernière cellule d'une ligne et que tu utilise la touche [Entrée] ou [Tabulation]...
 

Moran

XLDnaute Nouveau
Bonjour,

Merci pour ta réponse Robert.
En fait, je voudrais que le nombre indiqué dans une cellule (par exemple 7 en A1) ajoute 6 lignes à un tableau en dessous (j'aurais déjà créé l'en-tête et la première ligne).

Merci et belle journée.
 

Robert

XLDnaute Barbatruc
Repose en paix
Tu veux qu'il rajoute autant de lignes que le numéro (7) moins un (=6). Et tu complèteras le reste. C'est ça ? j'ai prêté mon appareil à tirer les vers du nez et je galère un peu je t'avoue...
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Robert, le fil,

à moi aussi, ça m'a paru bizarre : si on met 7 en A1, alors pourquoi 6 lignes (= 7 - 1) ?

alors j'ai relu plus attentivement l'énoncé ; Moran a écrit :

« (j'aurais déjà créé l'en-tête et la première ligne) »

donc, d'après moi, il faut comprendre ainsi :

Moran a déjà créé un tableau (probablement un tableau structuré) : ligne d'en-têtes + 1ère ligne (que cette 1ère ligne soit vide ou remplie ensuite) ; le nombre 7 mis en A1 est le nombre total de lignes voulu : c'est bien la 1ère ligne du tableau (vide ou non) + 6 autres lignes ; il faut donc ajouter 7 - 1 = 6 lignes au tableau. :)

soan
 

Moran

XLDnaute Nouveau
Vous avez raison, avec un fichier, ça sera plus simple !
Je souhaiterais que les tableaux de l'onglet "RAPPORT DE SOURCING" se "créent" à partir de la cellule "A113" : j'ai déjà l'en-tête et de la 1ère ligne, je voudrais donc ajouter les lignes à créer après la 1ère en conservant les formules.
Encore merci pour votre aide et le temps que vous m'accordez !
 

Pièces jointes

  • RAPPORT DE SOURCING - EXEMPLE AUTOMATISATION.xlsx
    760.7 KB · Affichages: 7

Moran

XLDnaute Nouveau
Bonjour Robert, le fil,

à moi aussi, ça m'a paru bizarre : si on met 7 en A1, alors pourquoi 6 lignes (= 7 - 1) ?

alors j'ai relu plus attentivement l'énoncé ; Moran a écrit :

« (j'aurais déjà créé l'en-tête et la première ligne) »

donc, d'après moi, il faut comprendre ainsi :

Moran a déjà créé un tableau (probablement un tableau structuré) : ligne d'en-têtes + 1ère ligne (que cette 1ère ligne soit vide ou remplie ensuite) ; le nombre 7 mis en A1 est le nombre total de lignes voulu : c'est bien la 1ère ligne du tableau (vide ou non) + 6 autres lignes ; il faut donc ajouter 7 - 1 = 6 lignes au tableau. :)

soan
C'est exactement ça !
 

Deadpool_CC

XLDnaute Accro
Oui mais quand tu lis, "Créer DES tableaux"
Donc combien de colonne, ou se positionne les cellules pour indiquer le nombre de ligne, ....
bref sans le fichier exemple à part lui faire un boucle VBA sur changement de la cellule A1 => Ajout du nb ligne sur la ranche du tableau nommé puis vidage de la celulle A1, je vois pas bien quoi proposer d'autre.
 

Moran

XLDnaute Nouveau
Oui mais quand tu lis, "Créer DES tableaux"
Donc combien de colonne, ou se positionne les cellules pour indiquer le nombre de ligne, ....
bref sans le fichier exemple à part lui faire un boucle VBA sur changement de la cellule A1 => Ajout du nb ligne sur la ranche du tableau nommé puis vidage de la celulle A1, je vois pas bien quoi proposer d'autre.
Je viens de mettre le fichier...
 

soan

XLDnaute Barbatruc
Inactif
Bonsoir Moran, le fil,

pour faire ton exo, j'ai converti tes 5 tableaux simples
en 5 tableaux structurés, dont voici les noms :

T01_Interlocuteurs
T02_Présentation
T03_Livraisons
T04_Personnel
T05_Produits



sur la 3ème feuille "RAPPORT DE SOURCING" :

fais Alt F8 ➯ fenêtre "Macro" ; au cas où ça ne marcherait pas :
va sur la 2ème feuille, puis reviens sur la 3ème feuille ; refais Alt F8.


exécute la macro Essai(), puis vérifie tes 5 tableaux. :)



code VBA :

VB:
Option Explicit

Sub Essai()
  If ActiveSheet.Name <> "RAPPORT DE SOURCING" Then Exit Sub
  Dim nb&
  nb = [A113]
'en A113, il y a une formule qui retourne 0 !
'donc ci-dessous, je simule une lecture de 9
'(9 lignes, ligne d'en-têtes comprise)
nb = 9
  nb = nb - 1: If nb < 2 Then Exit Sub
  Dim nTB As Byte, nLT&, nLS&, lg1&, i As Byte
  Application.ScreenUpdating = 0
  With ActiveSheet
    nTB = .ListObjects.Count
    For i = 1 To nTB
      With .ListObjects(i)
        If Not .DataBodyRange Is Nothing Then
          nLT = .ListRows.Count: nLS = nb - nLT
          If nLS > 0 Then
            lg1 = .DataBodyRange.Cells(1).Row
            Rows(lg1 + nLT).Resize(nLS).Insert
            .Resize .Range.Resize(nLT + nLS + 1)
          End If
        End If
      End With
    Next i
  End With
End Sub

soan
 

Pièces jointes

  • RAPPORT DE SOURCING - EXEMPLE AUTOMATISATION.xlsm
    775.9 KB · Affichages: 10

Moran

XLDnaute Nouveau
Bonjour Soan,

C'est exactement ça !
Merci beaucoup pour ton aide !

Mais serait-il possible de créer le nombre de lignes sans devoir modifier la valeur dans le code ?
Par exemple, en indiquant un nombre maximum de lignes à créer, par exemple 100, mais que les tableaux ne se complètent qu'avec le nombre de lignes indiquées en A113 ?
Si je ne souhaite que 5 lignes, il n'y a que 5 lignes qui se créent dans les tableaux.

Merci pour le temps passé sur ma demande !
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Moran,

C'est exactement ça !

merci pour ton retour ! 😊



Serait-il possible de créer le nombre de lignes sans devoir modifier la valeur dans le code ?

oui, mais ce qui gêne, c'est que la formule en A113 retourne 0 ! 😭
rappel de cette formule : =NBVAL('Form Submissions'!D:D)-1

quand y'aura des données en colonne D de la feuille "Form Submissions",
ça s'arrangera automatiquement si tu fais aussi cette petite modif :

pour le début de la sub, au lieu de :

VB:
Sub Essai()
  If ActiveSheet.Name <> "RAPPORT DE SOURCING" Then Exit Sub
  Dim nb&
  nb = [A113]
'en A113, il y a une formule qui retourne 0 !
'donc ci-dessous, je simule une lecture de 9
'(9 lignes, ligne d'en-têtes comprise)
nb = 9
  nb = nb - 1: If nb < 2 Then Exit Sub

il faudra ceci :

VB:
Sub Essai()
  If ActiveSheet.Name <> "RAPPORT DE SOURCING" Then Exit Sub
  Dim nb&: nb = [A113]: nb = nb - 1: If nb < 2 Then Exit Sub

(la suite du code VBA, en dessous, doit rester inchangée !)



indiquer un nombre maximum de lignes à créer, par exemple 100, mais que les tableaux ne se complètent qu'avec le nombre de lignes indiquées en A113 ; si je ne souhaite que 5 lignes, il n'y a que 5 lignes qui se créent dans les tableaux.​

oui, mais où tu veux le placer, ce 100 ?

je propose sur la même feuille "RAPPORT DE SOURCING", en A115 ;
ensuite, fais ce changement en début de sub :

au lieu de :
VB:
Sub Essai()
  If ActiveSheet.Name <> "RAPPORT DE SOURCING" Then Exit Sub
  Dim nb&: nb = [A113]: nb = nb - 1: If nb < 2 Then Exit Sub

il faudra :​

VB:
Sub Essai()
  If ActiveSheet.Name <> "RAPPORT DE SOURCING" Then Exit Sub
  Dim nb&: nb = [A113]: If nb > [A115] Then nb = [A115]
  nb = nb - 1: If nb < 2 Then Exit Sub

(c'est non testé, mais ça devrait aller)

soan
 

soan

XLDnaute Barbatruc
Inactif
@Moran

en A113, tu avais dit que c'est le nombre de lignes total du tableau, y compris la ligne d'en-têtes ; c'est pour ça qu'il y a nb = nb - 1 ; si ça a changé et que c'est le nombre de lignes total du tableau, sauf la ligne d'en-têtes, alors enlève nb = nb - 1 ; ça donne :​

VB:
Sub Essai()
  If ActiveSheet.Name <> "RAPPORT DE SOURCING" Then Exit Sub
  Dim nb&: nb = [A113]: If nb < 2 Then Exit Sub

si c'est ça : ok ; sinon, je ne vois pas !

soan
 

Discussions similaires

Statistiques des forums

Discussions
312 047
Messages
2 084 864
Membres
102 690
dernier inscrit
souleymaane