Pré-remplir un tableau en fonction d'une liste

Bonjour,

J'ai besoin de vos lumière pour réaliser ceci:

Je souhaiterai remplir un tableau en fonction d'une liste.

Je m'explique : j'ai un tableau de liste où il y a deux types de mangas Shonen et Shojo on peut choisir un mangas dans une des deux types de mangas au fur et à mesure qu'on choisi des mangas l'utilisateur sera limité par le nombre de mangas choisi (cf tableau).

Les mangas choisis seront utilisé pour remplir un tableau si je choisis one piece et naruto cela va me générer trois colonnes qui auront comme intitulé Anime- Scan et Film d'animation, mais pour certain sa sera quatre colonnes(= comme pour DB ) selon le mangas choisi la quatrième colonne aura comme intitulé Bande dessiné.

merci de votre aide


Re_Bonjour,

alors j'ai réussi à créer une liste et et les donnée de la liste sont sur une autre feuille mais le remplissage automatiquement du tableaux est ma première difficulté.

aider moi please.

52me.zip (15.99 Ko)
55me.zip (15.78 Ko)

Re,

En faites je souhaite maintenant savoir comment récupérer un nom depuis une liste déroulante choisie

merci de me répondre

Bonjour

A quoi te servent les réponses si tu ne les utilises pas ?

Dans le code rien de ce que je t'avais proposé

Cà encourage à aider

bonjour Bnazai64,

ton aide m'a aidé mais c'est autre chose que je suis en train de faire.

je n'utilise plus de formulaire mais de plusieurs liste dans une plage donnée sur la feuille2.

je sais comment créer un tableau depuis une liste :

If Range("H7:J7").Text <> "0" Then

        'I. pour chaque nom choisi dans la liste déroulante
        'I.1 Fusion de 3 cellules pour le Nom du mangas
        'I.1.1 Sélection de la dernière cellule
        Selection.Copy Destination:=Range("J7")
        'I.1.2 Sélection des trois cellules
        Range("H7:J7").Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        'Fusion des cellules
        Selection.Merge
        'selection des trois cellules
        Range("H7:J7").Select
        'ajout les types de mangas
        ActiveCell.FormulaR1C1 = "=R[-3]C[-6]"
        Range("H8").Select
        'ecris Anime
        ActiveCell.FormulaR1C1 = "Anime"
        Range("I8").Select
        'ecris Scan
        ActiveCell.FormulaR1C1 = "Scan"
        Range("J8").Select
        'écris Film Anime
        ActiveCell.FormulaR1C1 = "Film Anime"
        Range("K7:M7").Select
    Else
        'suppresion vers la gauche
        Range("H7:J8").Select
    Selection.Delete Shift:=xlToLeft

    End If

mais le soucis ce n'est pas il y a toujours un truc qui manque dans mon code pour optimiser mon projet.

par exemple quand j'ai créé mes tableaux il faut que je mette à N+1 de la dernière ligne du tableau créé, les totaux pour connaitre le nombre de mangas ou de scan ou de film téléchargé c'est à dire somme=(colonne anime:colonne scan:colonne film anime).

mais avant je dois demander combien de sorte de seeder ou leecher il y a et je créer le nombre de ligne qu'il y a de seeder ou de leecher.

voilà désolé si je t'ai offenser en postant ce message gomen

je te remercie encore beaucoup

désolé encore banzai64

Bonjour Forumeuret EXCELEUR(SE),

je ne comprend pas cette erreur quelqu'un peu m'expliquer à travers mon code

    'variable
    Dim NbLigne As Integer
    Dim Colonne As Integer
    Dim Ligne As Long
    Dim cpt As Integer
    Dim NuDerniere_Ligne As Long
    'initialisation des variables
    Colonne = 2
    cpt = 0
        'récupération du nombre de ligne dans le tableau
        NbLigne = Cells(Rows.Count, Colonne).End(xlUp).Row - 1
        'récupération de la dernière ligne du tableau
        NuDerniere_Ligne = Cells(Rows.Count, Colonne).End(xlUp).Row + 1
'    MsgBox NuDerniere_Ligne & NbLigne
    'si le Nom du Mangas esy choisi alors copier la dernierère ligne et
    'la mettre à la ligne après ainsi de suite jusqu'à que le nombre de ligne soit dépassé
    If Range("B4").Text <> "" Then
        'pour le compteur vas jusqu'au nombre ligne les copies les une sous les autres
        For cpt = 1 To NbLigne
            Range(Cells(NuDerniere_Ligne - cpt, Colonne - 1), Cells(NuDerniere_Ligne - cpt, Colonne)).Select
            Selection.AutoFill Destination:=Range(Cells(NuDerniere_Ligne, Colonne - 1), Cells(NuDerniere_Ligne + cpt, Colonne)), Type:=xlFillDefault
            Range(Cells(NuDerniere_Ligne + cpt, Colonne - 1), Cells(NuDerniere_Ligne, Colonne)).Select
        Next
        'incrémentation cpt
        cpt = cpt + 1
    End If

je vous le fichiers aussi

cordialement


re,

excusez moi j'ai oublié de mettre l'erreur :

Erreur d'exécution '1004'

La méthode AutoFill de la classe Range a échoué.

le code se trouve juste sur le post précédent

merci de me répondre

je sèche vraiment


Re,

Je suis allé encore trop vite pour l'erreur il me sur ligne cette ligne:

Selection.AutoFill Destination:=Range(Cells(NuDerniere_Ligne, Colonne - 1), Cells(NuDerniere_Ligne + cpt, Colonne)), Type:=xlFillDefault
            
26me.zip (23.34 Ko)

Bonjour

Je sèche vraiment voilà trois jours j'essaie de faire juste un copier coller d'un tableau de liste et je n'arrive pas à le faire.

Car à chaque fois que l'utilisateur choisi quelques chose dans une liste sa incrémente une nouvelle ligne composé d'une liste et ainsi de suite jusqu'à l'utilisateur à fini mais je n'arrive pas à le faire quelqu'un aurait une idée je sèche VRAIMENT.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim NbLigne As Integer
    Dim Colonne As Integer
    Dim NuDerniere_Ligne As Long
    Dim cpt As Integer
    Dim rg As Range

    Colonne = 2

    NuDerniere_Ligne = Cells(Rows.Count, Colonne).End(xlUp).Row + 1
    NbLigne = Cells(Rows.Count, Colonne).End(xlUp).Row - 1
    If Range("B4") <> "" Then
        For cpt = 0 To NbLigne
                Range(Cells(NbLigne, Colonne - 1), Cells(NbLigne, Colonne)).Copy Range(Cells(NbLigne + 10, Colonne - 1), Cells(NuDerniere_Ligne + 10, Colonne))

        Next

    cpt = cpt + 1
    'Range("B4") = ""
    End If
End Sub

Bonjour ;

j'ai trouvé : D super content mais je suis pas au bout de ma peine.

Comment dire si une cellule de la colonne B "juste pour les listes" est différents ""

je veux dire un truc comme

If Range("colonne que les liste <>"" then

pour la solution de précédent problème c'est :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'variable
    Dim NbLigne As Integer
    Dim Colonne As Integer
    Dim NuDerniere_Ligne As Long
'    initialisation des variables
    Colonne = 2
    cpt = 0
'        récupération du nombre de ligne dans le tableau
        NbLigne = Cells(Rows.Count, Colonne).End(xlUp).Row - 1
'        récupération de la dernière ligne du tableau
        NuDerniere_Ligne = Cells(Rows.Count, Colonne).End(xlUp).Row + 1
    If Range("") <> "" And cpt < 2 Then
            Range(Cells(NbLigne, Colonne - 1), Cells(NuDerniere_Ligne, Colonne)).Copy Range(Cells(NbLigne + 1, Colonne - 1), Cells(NuDerniere_Ligne + 1, Colonne))
    End If
    Range("B4") = ""

End Sub

voilà.

J'espère j'aurai une réponse

Bonjour

Je vais peut-être dire des bêtises

Pourquoi tu t'agaces à vouloir insérer des lignes (c'est la galère à faire - J'ai essayé mais il y à plein de contraintes - et je pense que la suppression doit être envisagée)

Fais un tableau avec le nombre de ligne maxi pour SHONEN et le nombre maxi pour SHÔJO et comme cela ce problème est réglé

Bonjour,

Je sais (et j'aurai du fermer ma gueule quand je l'ai proposé), si tu veux cette liste comprend 7 familles et dans chaque famille tu as droit de choisir 6 noms pas plus.

Je suis en train de le faire. je dois juste trouver le nombre de ligne que contient mon tableau(qui change à chaque fois j'ajoute un nom mais il y a une limite) la dernière ligne sa je l'ai trouvé par ce petit bout de code:

IDerLigne = Cells(Rows.Count, Colonne).End(xlUp).Row

Et oui, il y a bien une suppression. sa c'est plus dur car je sais combien il y a de cases vides c'est à dire trois pour cette exemple ( et je sais où elle se trouve donc je fais un select case pour sa; ce qui n'est pas évident) car je galère à faire les ajout. mais si je n'arrive pas avant mardi je laisse tomber et je fais ce que tu as dis c'est dix fois plus simple même si c'est moche niveau design.

En, tous cas merci d'avoir jeter un oeil sur mon cas.

Sa fait toujours plaisir qu'il y a quelques personnes qui jettent un œil et donnent leurs opinions

Bonjour

C'est compliqué

Je ne crois pas que j'irais plus loin

A tester

Bonsoir banzai64,

merci de ta contribution.Mais je vais trouver sa c'est sur. J'ai déjà la suppression grâce à la boucle" un pour chaque"

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''SI SUPPRESSION D'UNE LIGNE DANS UNE LISTE ALORS JE DECREMENTE''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'On affecte la plage de cellules à la colonne E

    'à la variable Cel
    For Cpt1 = 6 To IDerLigne
'    MsgBox IDerLigne
        Set cel3 = Cells(Cpt1, Colonne + 1)

    'Pour chaque cellule de la plage de cellule

        For Each Cel4 In cel3

            If Cel4 = "" Then

                If Cells(Cpt1, Colonne) = "" Then

'                    Cells(Cpt1, Colonne + 2) = "effacer"
                   Range(Cells(Cpt1 + 1, Colonne), Cells(IDerLigne, Colonne + 1)).Copy Range(Cells(Cpt1, Colonne), Cells(IDerLigne - 1, Colonne + 1))
'                    Range(Cells(IDerLigne, Colonne), Cells(IDerLigne, Colonne + 1)) = ""
    '                Range(Cells(IDerLigne + 1, Colonne), Cells(IDerLigne + 1, Colonne + 1)).Select
    '                selection.Delete Shift:=xlUp
                End If
'                Range(Cells(IDerLigne, Colonne), Cells(IDerLigne, Colonne + 1)).Select
'                selection.Delete Shift:=xlUp
    '            MsgBox "dois je effacer" & Cpt
            End If

        Next
    Next
    Cpt1 = Cpt1 + 1

Et me reste l'ajout mais le tiens est super bien fais.

C'est excellent ce que tu as fait.Il me reste encore pas mal de chose à faire merci

Merci beaucoup.

Purer en une journée tu as fais sa ouah impressionné.

tu veux bien être mon Seinsei

Je Valide ce post.Mais il me reste plein de choses à faire encore donc si tu es là pour me donner des conseils sa sera cool.

merci Beaucoup

Bonjour

Tu peux continuer suivant ton idée

Je ne suis pas "the best" loin s'en faut

Tu trouveras sur ce site tous les conseils dont tu as besoin

bonjour à tous ,

Pour sa intéresse l'ajout et la suppression d'un tableau suivant ce qu'on choisit très simple et optimiser comme code, je pense je peux encore l'optimiser encore plus.

voici le code:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''CONSTRUCTION DES TABLEAU AUTOMATIQUEMENT SELON LE CHOIX DES LISTES'''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
     'variable
    Dim IPreLigne As Integer
    Dim IDerLigne As Long
    Dim NbLigne As Integer
    Dim Colonne As Integer
    Dim Cpt As Integer
    Dim Cpt1 As Integer
    Dim NbLigAjT As Integer
    Dim NbCellVide As Integer
    Dim cel1 As Range, Cel2 As Range
    Dim cel3 As Range, Cel4 As Range
    Dim chaine As String
'    initialisation des variables
    IPreLigne = 7
    Colonne = 4
    NbLigAjT = 1
    NbCellVide = 0
    Cpt = 7
    Set cel1 = Cells(Cpt, Colonne + 1)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''RECUPERATIONS DES VALEUR ET AJOUT UNE LIGNE AUX LISTES ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
       '        récupération du nombre de ligne dans le tableau à partir de la cinquième ligne
        NbLigne = Cells(Rows.Count, Colonne).End(xlUp).Row - 5
'        récupération de la dernière ligne du tableau
        IDerLigne = Cells(Rows.Count, Colonne).End(xlUp).Row
'       MsgBox NbLigne & IDerLigne
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''remplissage du tableau''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'On affecte la plage de cellules à la colonne E

    'à la variable Cel
    For Cpt = 7 To IDerLigne
'    MsgBox IDerLigne
        Set cel1 = Cells(Cpt, Colonne + 1)

            If Cells(Cpt, Colonne + 1) <> "" Then

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''une autre condition sinon remplissage automatique qu'une culture; si cellule = 0 pas de remplissage sinon remplissage''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                If Cells(Cpt, Colonne) = 0 Then
                    Else
                    'je sauvegarde le texte car elle sera effacé au premier tour
                    chaine = Cells(Cpt, Colonne + 1).Text
                    'je copie la première colone et je colle sur elle même à n+1
                    Range(Cells(Cpt, Colonne), Cells(IDerLigne, Colonne)).Copy Range(Cells(Cpt + 1, Colonne), Cells(IDerLigne + 1, Colonne))
                    'j'efface la sélection
                    Cells(Cpt, Colonne + 1) = ""
                    'je copie la deuxième colonne et je la colonne sur elle même à n+1
                    Range(Cells(Cpt, Colonne + 1), Cells(IDerLigne, Colonne + 1)).Copy Range(Cells(Cpt + 1, Colonne + 1), Cells(IDerLigne + 1, Colonne + 1))
                    'j'affecte le texte à n+1
                    Cells(Cpt + 1, Colonne + 1) = chaine
                    'j'efface la sélection
                    Cells(Cpt, Colonne + 1) = ""
                    'j'efface la sélection
                    Cells(Cpt + 1, Colonne) = ""
                    Exit Sub

               End If
             End If
    Next

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''SI SUPPRESSION D'UNE LIGNE DANS UNE LISTE ALORS JE DECREMENTE''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'On affecte la plage de cellules à la colonne E
'
    'à la variable Cel
    Cpt1 = 0
    For Cpt1 = 6 To IDerLigne - 1
'    MsgBox IDerLigne
        Set cel3 = Cells(Cpt1, Colonne + 1)

    'Pour chaque cellule de la plage de cellule

        For Each Cel4 In cel3

                If Cells(Cpt1, Colonne) = "" And Cells(Cpt1, Colonne + 1) = 0 Then
'                Cells(Cpt1, Colonne + 2) = "effacer"
'                   je copie la première colone et je colle sur elle même à n-1
                    Range(Cells(Cpt1 + 1, Colonne), Cells(IDerLigne + 1, Colonne)).Copy Range(Cells(Cpt1, Colonne), Cells(IDerLigne, Colonne))
'                   je copie la deuxième colonne et je la colonne sur elle même à n-1
                    Range(Cells(Cpt1 + 1, Colonne + 1), Cells(IDerLigne + 1, Colonne + 1)).Copy Range(Cells(Cpt1, Colonne + 1), Cells(IDerLigne, Colonne + 1))

                End If
        Next
    Next
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 End Sub

je vous joins aussi le fichier mais bon sa peut d'importance les variables que vous devez changer sont la colonne et cpt( =l'index de la première ligne de la liste).

voilà merci pour l'aide que vous m'avez apporté

Banzai64 ta solution ne me convenait pas, car tu faisais en fonction des liste de validation, car je compte laisser autant de liste que de type de mangas c'est à dire 7 liste et à chaque ajout ça ne doit pas ajouter une liste mais juste le nom du choix. Et à chaque fois qu'une ligne est ajoutée je fusionne la ligne avec son types de mangas.Je suis en train de le faire mais sa devrait pas trop me demander de temps, en fin j'espère

merci de votre passage

PS:si vous pouvez l'optimiser sa serait bien de le me monttrer

Rechercher des sujets similaires à "pre remplir tableau fonction liste"