Microsoft 365 programme VBA pour "importer" les valeurs de certaines cellules d'une autre feuille appartenant à une ligne que j'identifie par un n°

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 !

arnomorize

XLDnaute Nouveau
Je sais, c'est un titre un peu long mais je n'arrive pas à synthétiser davantage...

Dans une feuille (formulaire nouvel objet), j'ai créé un formulaire qui va alimenter automatiquement un tableau d'une autre feuille (saison), en insérant une ligne, la remplissant des valeurs du formulaire, et la faisant débuter par un n° de ligne qui s'incrémente à chaque nouvelle ligne créée.
Ainsi, chaque nouvelle entrée est précédée par un n°

J'ai créé un autre formulaire dans une autre feuille (formulaire nouvelle dpae) pour traiter certaines informations du tableau

Pouvez vous m'aider à atteindre cet objectif :
Je voudrais saisir un n° dans une cellule "d'appel" de ce nouveau formulaire, afin de faire remonter certaines des valeurs de la ligne correspondante dans le nouveau formulaire.

Sachant qu'à chaque nouvelle entrée, les lignes se déplacent vers le bas, elles perdent donc leur position physique dans le tableau.

Je vous remercie de votre aide 🙂
 

Pièces jointes

Solution
il faut renommer la table de la feuille DPAE
en t_DPAE (puisque c'est le nom utilisé dans le code

un peu de lecture ici pour comprendre
Hello

pas sur d'avoir compris
en attendant, je me suis permis de revoir ta macro qui créé un nouvel objet
l'exploitation des Tables Strucuturées que tu as placées sur tes feuilles permet d'insérer une nouvelle ligne dans saisie en FIN de table.. ce qui te dispense d'insérer une ligne en haut en recopiant la mise en forme (le principe des tables c'est que justement la mise en forme est automatiquement reproduite sur toute la table)

le code est donc bien plus court et concis.
après, si tu tiens à ajouter la ligne en haut de table. pas de problème
il suffit de remplacer cette ligne
VB:
ind = .ListRows.Add.Index 'ajout d'une ligne en fin de table

par
Code:
ind = .ListRows.Add(1).Index 'ajout d'une ligne en début de table
dans ce cas, il faudra aussi modifier la ligne juste en dessous, celle qui met un nouveau numéro
 

Pièces jointes

Hello Vgendron,
Merci bcp pour ton aide.
J'ai remplacé ton code par le tien et simplifié mon tableau Saison qui est maintenant plus lisible grâce notamment à la mise en forme contrôlée 🙂
Pourtant le debugger me rapporte une erreur quand j'utilise ta macro sur mon projet que je n'arrive pas à comprendre : il me rapporte une 'erreur 9'
'l'indice n'appartient pas à la selection'
et cette ligne est surlignée : With Sheets("Saison").ListObjects("t_Saison")
Qu'est ce que "t_Saison" ?
Merci pour ton aide
 

Pièces jointes

Hello
t_Saison, c'est le nom que j'ai donné à la table structurée sur ta feuille Saison

un peu de lecture pour te guider
 
Une remarque
il faut je pense revoir la copie de l'onglet "nouvel objet' et ne pas l'autoriser si le nom existe déjà
pour l'instant, ton code ne l'empeche pas grace (à cause) du On error resume next
mais ca provoque la création d'un nouvel onglet (2) et quand meme une nouvelle ligne dans saison..

peut etre qu'il faudrait également supprimer le bouton sur les nouvelles feuilles pour éviter de lancer la macro
 
Dernière édition:
pour vider le formulaire (et remettre les cases à cocher à false)

VB:
Sub CreationNouveauFormulaireEtInsereLesInfosDansSaisons2()
Dim NomFeuille As String
Dim WsSource As Worksheet
Dim ind As Integer

'copier le formulaire dans une nouvelle feuille et la nommer par le nom de l'objet
    NomFeuille = ActiveSheet.Range("C5").Value
    If FeuilleExiste(NomFeuille) Then
        MsgBox "Cette Feuille existe déjà"
        Exit Sub
    End If
    Sheets("FormulaireNouvelObjet").Copy After:=Sheets(Sheets.Count)
    With ActiveSheet
        .Name = NomFeuille
        .Shapes("Bouton 1").Delete
    End With
    

    Set WsSource = ActiveSheet
    foyer = ActiveSheet.CheckBox1.Value
    amphi = ActiveSheet.CheckBox2.Value
    stex = ActiveSheet.CheckBox3.Value

    With Sheets("Saison").ListObjects("t_Saison")
        ind = .ListRows.Add.Index 'ajout d'une ligne en fin de table
        .DataBodyRange(ind, 1) = Application.WorksheetFunction.Max(.ListColumns("N°").DataBodyRange) + 1

        .ListColumns("Objet").DataBodyRange(ind) = NomFeuille 'copier nom d'objet dans saison
        
        Sheets("Saison").Hyperlinks.Add Anchor:=.ListColumns("Objet").DataBodyRange(ind), Address:="", SubAddress:="'" & NomFeuille & "'!A1", TextToDisplay:=NomFeuille
        .ListColumns("Date Début").DataBodyRange(ind) = WsSource.Range("E5") 'copier date debut dans saison
        .ListColumns("Date fin").DataBodyRange(ind) = WsSource.Range("G5") 'copier date fin dans saison
        .ListColumns("Type").DataBodyRange(ind) = WsSource.Range("C8") 'copier type d'objet
        .ListColumns("foyer").DataBodyRange(ind) = IIf(foyer, "x", "") 'copier foyer
        .ListColumns("amphi").DataBodyRange(ind) = IIf(amphi, "x", "") 'copier amphi
        .ListColumns("st.ex").DataBodyRange(ind) = IIf(stex, "x", "") 'copier st.ex
    End With
    
    With Sheets("FormulaireNouvelObjet")
        .Range("C5:G5").ClearContents
        .Range("C8").ClearContents
        .Range("D12:I14").ClearContents
        .Range("C17:I28").ClearContents
        .Range("C31:I59").ClearContents
        .CheckBox1.Value = False
        .CheckBox2.Value = False
        .CheckBox3.Value = False
    End With
End Sub
 
Merci bcp 🙂
J'abuse si je reviens sur ma demande initiale ?
Peut être qu'en ayant vu mes tableaux, ce sera plus clair :
dans la feuille "FormulaireNouvelleDpae", j'ai placé la cellule "n°"
Je voudrais y saisir un n° pour "appeler" un des n° de la première colonne de la feuille "Saison" afin de copier certaines cellules de cette ligne dans ce formulaire.
le nom de l'objet, sa date de début et les surnoms dans les postes auxquels ils travaillent (RG=régie générale, RL=régie lumière...)
Suis je clair ?
 
re
voici la version 2

dans la feuille dpae, il y a des infos en colonne B qui sont utilisées dans les formules
je l'ai simplement masquée pour rendre plus lisible le doc

dans le code de la macro "SaveDPAE", il faut que tu ailles modifier le chemin du répertoire dans lequel tu veux enregistrer les fichiers
 

Pièces jointes

Salut 🙂
Je viens de jouer avec ton travail, c'est vraiment top, je te remercie encore infiniment 🙂
Serais tu ok pour quelques améliorations ?
- j'ai utilisé une image de maison pour faire un lieu vers la feuille "saison" depuis chaque nouvel objet créé. Est ce possible d'automatiser cette tâche ?
- je vous voudrais ajouter la date de l'objet au début du nom de la nouvelle dpae enregistrée (pour la dpae marchands d'etoiles, je voudrais le nom "08-01-25_marchands_d_etoiles_DPAE")
- à l'étape de la sauvegarde du formulaire nouvelle dpae, je voudrais copier les montants de chaque poste dans une nouvelle feuille que j'intitule "budget année". je t'ai fait une simulation pour être plus clair.
 
- 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