Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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

  • essai arno.xlsm
    106.3 KB · Affichages: 8

vgendron

XLDnaute Barbatruc
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

  • essai arno.xlsm
    120.9 KB · Affichages: 2

arnomorize

XLDnaute Nouveau
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

  • essai arno.xlsm
    89.9 KB · Affichages: 1

vgendron

XLDnaute Barbatruc
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
 

vgendron

XLDnaute Barbatruc
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:

vgendron

XLDnaute Barbatruc
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
 

arnomorize

XLDnaute Nouveau
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 ?
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…