Générer un tableau au fur et à mesure du remplissage d'un autre tableau

Bonjour à tous

Merci déjà pour tous les précieux conseils que j'ai pu trouver en lisant certains posts de ce site.

Dans le cadre d'un recrutement, je souhaiterais générer automatiquement un tableau sur une feuille (bilan scolaire),

image

au fur et à mesure que le tableau principal (recrutement) sera rempli.

image

Le tableau du bilan scolaire devrait récupérer au fur et à mesure certaines des informations du tableau principal, le reste des données sera rempli manuellement. J'ai donc indiqué dans mon document les cases que je souhaite récupérer.

image

Je ne maitrise pas énormément Excel et j'aimerais être guidée en "pas à pas" pour bien comprendre la marche à suivre. Ce fichier sera au final partagé sur un cloud.

Je vous remercie par avance des conseils que vous pourrez me donner.

A très bientôt

Alexandra

Bonjour,

Vous avez bien fait de préciser que le fichier sera "sur un cloud" car ça change tout. Pouvez-vous préciser davantage le mode d'utilisation de ce cloud :

  • le fichier est-il sur google drive, ouvert avec Google Sheets dans le navigateur ?
  • Ou bien sur un onedrive/sharepoint, ouvert dans le navigateur avec Excel Online ?
  • Ou bien téléchargé en local et ré-envoyé sur le serveur après modification ?
  • Autre (dropbox, etc.) ?

Ca va beaucoup influer sur la méthode de résolution, a priori un script, qui malheureusement dépend de la plateforme utilisée.

Il y aura aussi besoin que vous partagiez votre fichier.

Bonne journée

Bonjour

il sera hébergé sur le cloud de l'éducation nationale, je pense plutôt pour excel online. Si possible de me préciser où je peux trouver cette information spécifique car elle n'apparait pas dans les propriétés du fichier sur le cloud.

je joint le fichier également

Merci à vous

Hum,

Je lis ici que le service de l'éducation nationale "Nuage" utilise NextCloud. C'est un autre hébergeur, qui propose en effet l'édition des documents office "directement dans l'application" mais via des extensions "non officielles", parfois basées sur LibreOffice.

En d'autres termes, dans ces conditions, ni les scripts ni meme les formules "modernes" ne permettront de résoudre votre question. Il y a trop de variables qui peuvent poser des problèmes de compatibilité…

Par contre, si vous téléchargez et ré-uploadez votre fichier (donc édition sur votre application Excel en local), alors une solution VBA est envisageable je pense (et probablement le plus simple).

Merci pour ce complément d'information,

Pouvez-vous m'expliquer la solution possible ainsi je ferais la mise à jour d'un fichier directement sur mon ordinateur.

En vous remerciant par avance

Alexandra

EDIT : si vous installez sur votre Pc l'app de synchronisation NextCloud (cf. page 6 de cette présentation), alors vous aurez une synchronisation sur le Cloud de vos fichiers en local, comme sur OneDrive/GDrive ou autre. Donc à partir de là la solution VBA est acceptable (juste que si vous ouvrez le fichier depuis le navigateur ou votre smartphone vous ne pourrez pas ajouter des nouveaux tableaux, il faudra passer par votre PC).

Pour vous expliquer la solution possible donc, on va ajouter une macro (VBA) à votre fichier. Une macro c'est du code qui va effectuer une suite d'instructions, en l'occurence créer vos nouveaux tableaux. Pour lancer la macro je (ou les autres contributeurs) vais ajouter un bouton dans votre fichier, en cliquant dessus ça va lancer la macro qui va créer les tableaux en question.

Re,

Voici ci-joint votre fichier un peu MAJ. J'ai mis un tableau structuré dans la feuille de recrutement car c'est ce que vous devriez utiliser. J'ai MAJ les formules de la feuilles statistiques pour y correspondre. Je vous invite à lire le lien pour comprendre l'avantage.

Pour lancer la macro, sur la feuille "bilan scolaire" cliquer sur le bouton. La macro va importer tous les élèves qui sont dans la feuille recrutement mais non dans le bilan scolaire. La recherche de correspondance se fait via les "ID". Pensez à activer les macros.

Je mets ci-après le code VBA utilisé dans le fichier :

Option Explicit

Public Sub MAJBilan()
  ' listing eleves deja ajoutes : colonne A de la feuille bilan
  Dim existingVals As Variant
  With ShtBilan
    existingVals = WorksheetFunction.Transpose( _
      Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value2)
  End With
  ' extraction des IDs de la colonne A
  Dim existingIDs As Object
  Set existingIDs = CreateObject("Scripting.Dictionary")
  Dim i As Long
  For i = LBound(existingVals) To UBound(existingVals)
    If CStr(existingVals(i)) = "id" Then existingIDs.Add CStr(existingVals(i + 1)), Nothing
  Next i

  ' parcours des eleves du tableau de recrutement,
  ' et ajout dans le bilan si non présents
  Application.ScreenUpdating = False
  Dim tblRecru As Variant
  tblRecru = ShtRecru.ListObjects(1).DataBodyRange.Value2
  Dim addedStdts As New Collection      ' liste des eleves ajoutes pour recap
  For i = LBound(tblRecru, 1) To UBound(tblRecru, 1)
    ' id non present : a ajouter
    If Not existingIDs.Exists(tblRecru(i, 2)) Then
      ' recup des infos
      Dim infos(0 To 2) As String
      infos(0) = tblRecru(i, 2): infos(1) = tblRecru(i, 3): infos(2) = tblRecru(i, 8)
      ' ajout du bloc dans le bilan
      AjoutBloc ShtBilan.Cells(ShtBilan.Rows.Count, 1).End(xlUp).Offset(2), infos
      ' ajout de l'eleve dans la liste du recap
      addedStdts.Add "ID : " & tblRecru(i, 2) & ", nom : " & tblRecru(i, 3)
    End If
  Next i
  Application.ScreenUpdating = True

  ' message de synthese
  Dim msg As String
  msg = "Opération terminée : " & addedStdts.Count & " élève(s) ajoutés." & vbCrLf
  Dim elv As Variant
  For Each elv In addedStdts
    msg = msg & vbCrLf & "- " & elv
  Next elv

  MsgBox msg, vbInformation, "Ajout des élèves dans le bilan terminé"
End Sub

Private Sub AjoutBloc(TopLeftCell As Range, infos() As String)
  ShtVBA.Cells(1, 1).CurrentRegion.Copy
  TopLeftCell.PasteSpecial xlPasteAll
  Application.CutCopyMode = False
  TopLeftCell.Offset(1).Resize(1, 3).Value2 = infos
End Sub

Private Sub testAjout()
  Dim infos(0 To 2) As String
  infos(0) = "id": infos(1) = "nom prenom": infos(2) = "L.Weiss Acheres"
  AjoutBloc ThisWorkbook.Worksheets("bilan scolaire").Range("A20"), infos
End Sub

Merci pour ce travail, je vais récupérer le document et le tester et j'essayerais de percer le mystère autour des macros, quand je serais plus grande.

Rechercher des sujets similaires à "generer tableau fur mesure remplissage"