Créer un tableau pour remplir un autre tableau

Bonjour, je cherche à savoir si avec les formules Excel, il est possible qu'à partir d'un tableau je puisse remplir un autre tableau.

Mon tableau n°1 me servirait à entrée de nouvelles données qui viendrais se mettre à jour dans mon tableau n°2. Ce que je souhaite c'est qu'à l'aide des listes déroulantes dans ma cellule A3 et B3, cela sélectionne les cellules qui correspondent à mon autre tableau.

Exemple : dans A3 j'ai sélectionné G (qui fait référence à la cellule E8), dans B3 sélectionné S44(qui correspond à ma colonne S44). Et en faisant cela dans la cellule C3 en entrant la valeur 35, je souhaite quelle se mette automatiquement dans la cellule F8, car en ayant demander à mon premier tableau les deux critères il retrouve la cellule en question ou je souhaite y intégré cette valeur.

J'espère avoir été claire, merci de vos retour :D

capture d ecran 2025 10 30 200224

Bonjour, fournis un fichier de test svp. A priori pas possible par formule. Simple avec une macro Vba. ok pour vous ?

Bonsoir S.Emeline, tomato, le forum,

Je n'ai peut-être pas compris la demande, mais avec une simple formule :

=SI(ET($E2=$A$3;F$1=$B$3);$C$3;"")

et en la tirant à droite puis vers le bas, la valeur de C3 est reportée dans le tableau.

Un classeur essai :

Si cela correspond à votre souhait, clôturez le sujet (check vert à droite du post, merci)

Cordialement.

AL 22

Édit : @tomato, possible, j'attends ses précisions...

Hello AL 22, a priori elle souhaite se servir de A2:C3 comme d'un micro formulaire afin de compléter le tableau de droite ;)

Bonjour à tous,

Bien vu par tomato, pour remplir le tableau de manière durable depuis la plage A3:C3 il faut passer par macros. Ci-joint une proposition en passant par un tableau structuré.

12book1.xlsm (19.30 Ko)
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("C3")) Is Nothing Then Exit Sub      ' on ne lance la macro que quand c3 est modifiee
  If Target.CountLarge > 1 Then Exit Sub
  If Not WorksheetFunction.IsNumber(Target.Value) Then Exit Sub   ' quitte si c3 non numerique

  Dim tbl As ListObject: Set tbl = Me.ListObjects(1)

  On Error Resume Next  ' valeur non trouvee
  ' index de la lettre dans la colonne
  Dim rowI As Long
  rowI = WorksheetFunction.Match(Range("A3").Value, tbl.ListColumns(1).DataBodyRange.Value, 0)

  ' index de la semaine dans les en-tetes
  Dim colI As Long
  colI = WorksheetFunction.Match(Range("B3").Value, tbl.HeaderRowRange.Value, 0)

  If Err.Number Then
    Err.Clear
    Exit Sub
  End If
  On Error GoTo 0

  ' ajout de la valeur dans le tableau
  Application.EnableEvents = False
  tbl.DataBodyRange.Cells(rowI, colI).Value = Target.Value
  Application.EnableEvents = True
End Sub

bonjour, Salut Saboh12617, une petite amélioration sans ces"on error goto ..."

Private Sub Worksheet_Change(ByVal Target As Range)
     Dim rowI As Long, colI As Long

     If Intersect(Target, Range("C3")) Is Nothing Then Exit Sub     ' on ne lance la macro que quand c3 est modifiee
     If Target.CountLarge > 1 Then Exit Sub
     If Not WorksheetFunction.IsNumber(Target.Value) Then Exit Sub     ' quitte si c3 non numerique

     With Me.ListObjects(1)
          ' index de la lettre dans la colonne
          rowI = Application.IfError(WorksheetFunction.Match(Range("A3").Value, .ListColumns(1).DataBodyRange.Value, 0), 0)

          ' index de la semaine dans les en-tetes
          'méthode1
          colI = Application.IfError(WorksheetFunction.Match(Range("B3").Value, .HeaderRowRange.Value, 0), 0)

          'méthode2
          On Error Resume Next
          colI = 0: colI = .ListColumns(CStr(Range("B3").Value)).Index
          On Error GoTo 0

          If rowI > 0 And colI > 0 Then
               ' ajout de la valeur dans le tableau
               Application.EnableEvents = False
               .DataBodyRange.Cells(rowI, colI).Value = Target.Value
               Application.EnableEvents = True
          End If
     End With
End Sub

Salut Bart,

Je crois que WorksheetFunction.XXX lève une erreur VBA si la fonction renvoie une erreur. Donc ça planterait comme tu l'as écrit. Il faudrait passer par Application.XXX pour tous les appels de fonction.

A moins que je ne me trompe... ?

Bonsoir à tous,

saboh12617 tout juste

Ca se trouve l'utilisateur ne veut pas seulement créer une valeur dans le tableau à double entrée, mais aussi additionner avec une valeur potentiellement pré-existante l'avenir nous le dira

re, oui, c'était "application" au lieu de "worksheetfunction" ...

Bonjour, merci de vos retours, j'ai essayé avec cette formule =SI(ET($E2=$A$3;F$1=$B$3);$C$3;"") cela fonctionne mais quand je change le nom dans A2:C3 cela décale ma valeur à celle sélectionner dans E1:J16. C'est à dire que la valeur entrée dans C3 ne se fige pas dans la cellule demandée dans E1:J16, elle se déplace en fonction du nom demandé en A3

Bonjour Tomato, je souhaite oui créer cette valeur dans le petit tableau afin qu'elle s'enregistre dans le seconde avec les indicateurs demandés.

A l'aide de A3 et B3 qui me servent de ''repère'' dans le premier tableau afin que dans la cellule C3 je me serve de celle si pour entrée la valeur dans le second tableau.

Le tableau E1:J16 est une toute petite partie du véritable tableau que j'utilise et j'ai beaucoup de nom. Je voulais trouver un moyen de me simplifier le remplissage de sa tableau à l'aide d'un autre pour que je prenne moins de temps à chercher les noms un à un

Bonjour à tous !

Peut être ainsi (approche formule unique dynamique M365) ? :

image

Bonjour S.Emeline,

Vous cherchez à remplir votre "grand" tableau avec un formulaire de saisie (dans votre cas il s'agit de votre "petit" tableau).

Ca ne sera possible qu'en utilisant une macro. Pour cela faites :

1/ fichier > enregistrer sous > type "classeur excel prenant en charge les macro (*.xlsm)".

2/ ensuite utilisez la combinaison de touche "Alt" + "F11"

3/ dans l'arborescence à gauche vous retrouverez le nom de la feuille sur laquelle vous souhaitez appliquer la macro (celle du "grand" tableau) : double cliquez dessus : une page blanche s'ouvre à droite

4/ collez la macro que vous a proposé BsAlv et que vous pouvez remercier :

Private Sub Worksheet_Change(ByVal Target As Range)
     Dim rowI As Long, colI As Long

     If Intersect(Target, Range("C3")) Is Nothing Then Exit Sub     ' on ne lance la macro que quand c3 est modifiee
     If Target.CountLarge > 1 Then Exit Sub
     If Not Application.IsNumber(Target.Value) Then Exit Sub     ' quitte si c3 non numerique

     With Me.ListObjects(1)
          ' index de la lettre dans la colonne
          rowI = Application.IfError(Application.Match(Range("A3").Value, .ListColumns(1).DataBodyRange.Value, 0), 0)

          ' index de la semaine dans les en-tetes
          'méthode1
          colI = Application.IfError(Application.Match(Range("B3").Value, .HeaderRowRange.Value, 0), 0)

          'méthode2
          On Error Resume Next
          colI = 0: colI = .ListColumns(CStr(Range("B3").Value)).Index
          On Error GoTo 0

          If rowI > 0 And colI > 0 Then
               ' ajout de la valeur dans le tableau
               Application.EnableEvents = False
               .DataBodyRange.Cells(rowI, colI).Value = Target.Value
               Application.EnableEvents = True
          End If
     End With
End Sub

Si tout est ok, merci de cloturer le sujet en le taguant comme résolu.
Bon weekend

Bonjour à tous !

@tomato : Pour éclairer ma lanterne, pourriez-vous avoir la délicatesse de motiver votre appréciation critique de ma proposition ?

re, salut JFL, tomato, saboh12617, S.Emeline,

on peut supprimer une des 2 méthodes, par exemple méthode 2 (alors on évite ces "on error ...")

Bonjour à tous,

JFL, bien sûr : l'objectif n'est pas de créer 2 tableaux des mêmes données mais de "faciliter" la complétude d'une bdd préexistante. L'aidée a proposé un petit tableau 2x3 par méconnaissance d'autres techniques (userform par exemple).

Rechercher des sujets similaires à "creer tableau remplir"