XL 2019 Aide incrémentation automatique tableau

moipmoi

XLDnaute Nouveau
Bonjour à toutes et à tous !

Je suis nouveau sur excel et excel-download, tout d'abord merci pour toutes ces ressources et conseils !!

Je vous écris car je n'ai pas réussi à faire ce que je souhaitais en fouillant le forum, j'espère avoir regardé correctement.

Nous utilisons dans mon travail un fichier excel afin de suivre notre activité, la préparation de traitement (une ligne par préparation).
Je souhaiterais "automatiser" son remplissage, afin d'éviter les erreurs: l'idée que j'avais était d'avoir mon tableau principal dans une feuille, nommée "ordonnancier", et une seconde feuille permettant de le remplir, nommée "Formulaire". Généralement nous remplissons ce tableau en fin de demi-journée, 6 ou 7 lignes à la fois. Les différentes colonnes seraient remplies dans la feuille "formulaire", puis une fois terminé le tableau principal de la feuille "ordonnancier" serait incrémenter et le tableau de la feuille "Formulaire" supprimé pour pouvoir recommencer (à l'aide d'une macro ou d'un code vba ?).

J'espère avoir été clair et que la solution n'est pas trop évidente, j'ai essayé de faire quelques macro mais je débute et n'ai jamais fait de vba...

Merci d'avance pour votre aide !! :)
 

Pièces jointes

  • Essai ordonnancier.xlsx
    178.2 KB · Affichages: 12
Solution
Bonjour à tous,

Pas certain d'avoir compris la question :rolleyes:

Avec une procédure VBA. La procédure est commentée.
Le code est dans le module de Feuil1 (Formulaire).
Pour transférer, cliquer sur le bouton "Transférer".

Le code:
VB:
Sub transférer()
Dim tOrdo As ListObject, nLigOrdo&, base As Range, tForm As ListObject, nLigForm&

   Set tForm = Sheets("formulaire").Range("a1").ListObject                 'on affecte à tForm le tableau structuré en A1 de la feuille "formulaire"
   nLigForm = tForm.ListRows.Count                                         'nombre de lignes de données du tableau structuré tForm
   If nLigForm < 1 Then MsgBox "Aucune ligne à transférer !": Exit Sub     'si le nombre de ligne de tForm est 0 alors on...

cp4

XLDnaute Barbatruc
Bonjour à toutes et à tous !

Je suis nouveau sur excel et excel-download, tout d'abord merci pour toutes ces ressources et conseils !!

Je vous écris car je n'ai pas réussi à faire ce que je souhaitais en fouillant le forum, j'espère avoir regardé correctement.

Nous utilisons dans mon travail un fichier excel afin de suivre notre activité, la préparation de traitement (une ligne par préparation).
Je souhaiterais "automatiser" son remplissage, afin d'éviter les erreurs: l'idée que j'avais était d'avoir mon tableau principal dans une feuille, nommée "ordonnancier", et une seconde feuille permettant de le remplir, nommée "Formulaire". Généralement nous remplissons ce tableau en fin de demi-journée, 6 ou 7 lignes à la fois. Les différentes colonnes seraient remplies dans la feuille "formulaire", puis une fois terminé le tableau principal de la feuille "ordonnancier" serait incrémenter et le tableau de la feuille "Formulaire" supprimé pour pouvoir recommencer (à l'aide d'une macro ou d'un code vba ?).

J'espère avoir été clair et que la solution n'est pas trop évidente, j'ai essayé de faire quelques macro mais je débute et n'ai jamais fait de vba...

Merci d'avance pour votre aide !! :)
Bonjour,
J'ai téléchargé et ouvert ton fichier. Je t'avoue que ça ne me donne pas envie d'essayer de t'aider. En effet, ton fichier a été monté "à la va vite", 1847 lignes doublons (voir image) moipmoi.gif
Ce tuto pourrait répondre à ta demande sinon il serait plus judicieux de créer ton propre Formulaire (userform).

A+
 

moipmoi

XLDnaute Nouveau
Bonjour,

Merci d'avoir regardé.
Le fichier n'a pas été monté "à la va vite", je l'ai simplement anonymisé et ne voulait pas perdre le nombre de lignes initiales du tableau, mais j'aurais probablement due le préciser.

Je vais regarder le tuto merci :)
Bonjour,
J'ai téléchargé et ouvert ton fichier. Je t'avoue que ça ne me donne pas envie d'essayer de t'aider. En effet, ton fichier a été monté "à la va vite", 1847 lignes doublons (voir image)Regarde la pièce jointe 1149929
Ce tuto pourrait répondre à ta demande sinon il serait plus judicieux de créer ton propre Formulaire (userform).

A+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Pas certain d'avoir compris la question :rolleyes:

Avec une procédure VBA. La procédure est commentée.
Le code est dans le module de Feuil1 (Formulaire).
Pour transférer, cliquer sur le bouton "Transférer".

Le code:
VB:
Sub transférer()
Dim tOrdo As ListObject, nLigOrdo&, base As Range, tForm As ListObject, nLigForm&

   Set tForm = Sheets("formulaire").Range("a1").ListObject                 'on affecte à tForm le tableau structuré en A1 de la feuille "formulaire"
   nLigForm = tForm.ListRows.Count                                         'nombre de lignes de données du tableau structuré tForm
   If nLigForm < 1 Then MsgBox "Aucune ligne à transférer !": Exit Sub     'si le nombre de ligne de tForm est 0 alors on informe et on quitte la procédure
 
   Set tOrdo = Sheets("Ordonnancier").Range("a1").ListObject               'on affecte à tOrdo le tableau structuré en A1 de la feuille "Ordonnancier"
   nLigOrdo = tOrdo.ListRows.Count                                         'nombre de lignes de données du tableau structuré tOrdo
 
   If nLigOrdo = 0 Then
      Set base = tOrdo.HeaderRowRange(1, 1).Offset(1)       'pas de ligne de donnée dans tOrdo, on rajoutera les données à partir de la cellule
   Else                                                     'sous la première cellule des en-têtes de tOrdo
      Set base = tOrdo.DataBodyRange.Cells(tOrdo.DataBodyRange.Rows.Count + 1, 1)   'sinon on rajoutera les données sous la dernière cellule
   End If                                                                           'des données déjà présentes dans tOrdo
 
   tForm.DataBodyRange.Copy base                               'on copie les données de tForm dans tOrdo à partir de la cellule Base
   tForm.DataBodyRange.Delete                                  'on vide tForm de ses données
   Application.Goto tOrdo.HeaderRowRange(1, 1), True           'on sélectionne la première cellule des en-têtes de tOrdo
   MsgBox nLigForm & " ligne(s) transférée(s)."                'on affiche le nombre de lignes transférées
End Sub
 

Pièces jointes

  • moipmoi- Ordonnancier- v1.xlsm
    23.2 KB · Affichages: 6
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour,

Merci d'avoir regardé.
Le fichier n'a pas été monté "à la va vite", je l'ai simplement anonymisé et ne voulait pas perdre le nombre de lignes initiales du tableau, mais j'aurais probablement due le préciser.

Je vais regarder le tuto merci :)
Heu, anonymisé un poids (kg). Tu y vas fort et une base de données avec plus 1800 lignes identiques. Je me demande à quoi elles pourraient servir ces lignes en doublons.
Ton fichier sans doublons et bouton pour afficher formulaire natif d'excel.
 

Pièces jointes

  • Essai ordonnancier.xlsm
    134.4 KB · Affichages: 8

moipmoi

XLDnaute Nouveau
Bonjour à tous,

Pas certain d'avoir compris la question :rolleyes:

Avec une procédure VBA. La procédure est commentée.
Le code est dans le module de Feuil1 (Formulaire).
Pour transférer, cliquer sur le bouton "Transférer".

Le code:
VB:
Sub transférer()
Dim tOrdo As ListObject, nLigOrdo&, base As Range, tForm As ListObject, nLigForm&

   Set tForm = Sheets("formulaire").Range("a1").ListObject                 'on affecte à tForm le tableau structuré en A1 de la feuille "formulaire"
   nLigForm = tForm.ListRows.Count                                         'nombre de lignes de données du tableau structuré tForm
   If nLigForm < 1 Then MsgBox "Aucune ligne à transférer !": Exit Sub     'si le nombre de ligne de tForm est 0 alors on informe et on quitte la procédure
 
   Set tOrdo = Sheets("Ordonnancier").Range("a1").ListObject               'on affecte à tOrdo le tableau structuré en A1 de la feuille "Ordonnancier"
   nLigOrdo = tOrdo.ListRows.Count                                         'nombre de lignes de données du tableau structuré tOrdo
 
   If nLigOrdo = 0 Then
      Set base = tOrdo.HeaderRowRange(1, 1).Offset(1)       'pas de ligne de donnée dans tOrdo, on rajoutera les données à partir de la cellule
   Else                                                     'sous la première cellule des en-têtes de tOrdo
      Set base = tOrdo.DataBodyRange.Cells(tOrdo.DataBodyRange.Rows.Count + 1, 1)   'sinon on rajoutera les données sous la dernière cellule
   End If                                                                           'des données déjà présentes dans tOrdo
 
   tForm.DataBodyRange.Copy base                               'on copie les données de tForm dans tOrdo à partir de la cellule Base
   tForm.DataBodyRange.Delete                                  'on vide tForm de ses données
   Application.Goto tOrdo.HeaderRowRange(1, 1), True           'on sélectionne la première cellule des en-têtes de tOrdo
   MsgBox nLigForm & " ligne(s) transférée(s)."                'on affiche le nombre de lignes transférées
End Sub
Bonjour,

C'est exactement ce que j'avais en tête ! merci énormément !!
Je ne connaissais pas non plus les formulaires je continue à y jeter un œil, c'est une fonction intéressante !

Encore merci et bonne fin de dimanche :)
 

Discussions similaires

Réponses
15
Affichages
1 K
  • Question
Microsoft 365 Tableau
Réponses
24
Affichages
888

Statistiques des forums

Discussions
315 087
Messages
2 116 082
Membres
112 653
dernier inscrit
flapynot7x