Insertion de lignes dans un tableau en tenant compte des semaines

Bonjour,

Dans le fichier attaché, je souhaiterai créer un bouton permettant à différents utilisateurs d'insérer des lignes automatiquement.
Je souhaiterai par ce clic, qu'un tableau puisse s'ouvrir pour remplir l'ensemble ou une partie des champs qui sont "A REMPLIR PAR LE DEMANDEUR"

Il faudrait également que la ligne puisse se placer chronologiquement suivant la semaine (regroupement des S)

De plus, les colonnes A, CA36 et CO38 ont quelques formules et formules conditionnelles que je souhaiterai protéger.

Est-il possible de faire cela ?

Pour info, j'ai des connaissance limité sur Excel et aucun en VBA

En vous remerciant

Laurent

16metro-projet.zip (235.20 Ko)

Bonjour,

Merci d'éviter de faire doublons de fil --> https://forum.excel-pratique.com/s/goto/1170034 sans quoi on ne s'y retrouve plus
78Chris vous a répondu et attend une réponse

Quel fil gardez-vous ?
Je verrouillerai celui que vous ne voulez pas utiliser

Crdlt

Bonjour,

Effectivement, désolé.
Pouvez-vous verrouiller l'autre sujet, svp ?
En vous remerciant

Bonjour,

Pouvez-vous verrouiller l'autre sujet, svp ?

Ok Fait

Pour votre fichier,

Je souhaiterai par ce clic, qu'un tableau puisse s'ouvrir pour remplir l'ensemble ou une partie des champs qui sont "A REMPLIR PAR LE DEMANDEUR"

Que voulez-vous dire par "un tableau puisse s'ouvrir" ?

Dans votre feuille :
- il y a deux tableaux. Pourquoi mettez-vous tout sur une seule feuille ?
- Vous fusionnez des colonnes et des lignes ...les fusions (on le répète souvent) sont à éviter surtout avec l'utilisation de VBA.

Crdlt

Bonjour,

J'ai diviser les 2 tableaux et retiré en majorité la fusion des cellules.
Je joins à nouveau le tableau modifié

Ce que je souhaiterai c'est d'avoir un bouton qui ouvre une fenêtre avec différents champs à remplir par les demandeurs.
Une fois ces champs rempli, un bouton "créer nouvelle ligne" afin d'incrémenter une nouvelle ligne qui se placerait chronologiquement par rapport au semaine "S..."

image

Merci

Cordialement

Bonjour

Ok pour votre fichier. Mais il ne contient pas la vue que vous montrez... Normal ?

Ce que je souhaiterai c'est d'avoir un bouton qui ouvre une fenêtre avec différents champs à remplir par les demandeurs.

Dans cette userform (à creer ?) on ne voit que deux rubriques. Normal ? ou d'autres champs sont à ajouter ?

Une fois ces champs rempli, un bouton "créer nouvelle ligne" afin d'incrémenter une nouvelle ligne qui se placerait chronologiquement par rapport au semaine "S..."

Le bouton peut ajouter la ligne à la fin de votre tableau. Ensuite, il suffit de trier suivant votre colonne B "sem"

Votre avis ?

Bonjour,

Je viens d'apprendre quelques chose "Userform" (formulaire de saisie)

Ne sachant pas comment cela s'appelait, j'avais été faire une impression d'écran d'un autre fichier

Je vais essayer d'en faire un et reviendrai pour vous le présenter et peut-être que les questions suivront.

Merci

Cordialement

Bonjour,

Je reviens sur le sujet après avoir intégré un Userform.
Par contre, j'ai intégrer une ligne en VBA et cela fait planter mon fichier

'Recherche de la 1ère ligne vide
l = 4
While Not IsEmpty(Cells(l, 2))
l = (1 + 1)
Wend

Pouvez-vous m'aider sur ce point, svp ?
Merci

Bonjour

Lorsque vous postez un code, pensez à utiliser l'icone </> disponible dans la barre de menu et collez le code dans la feneêtre. C'est plus lisible.
J'ai corrigé dans votre post


Par contre, j'ai intégrer une ligne en VBA et cela fait planter mon fichier

Oui normal.

D'après ce que je lis dans votre code, on peut considérer que la colonne B doit toujours contenir une information. Correct ?

Autre question : pourquoi masquez-vous l'usf une fois les infos entrées dans votre feuille ? Le mieux est de fermer l'USF ou alors de les infos et de la laisser visible à l'écran pour ajouter d'autres lignes

Dès votre réponse je vous poste les modifications

Crdlt

Bonjour,

Je masque l'usf car majoritairement les personnes ont une seule ligne à rentrer.
Je pourrai très bien le laisser et demander à cliquer sur fermer, mais il faut savoir que ce fichier sera en lecture partagé.
Dans le cas d'une utilisation simultanée, je ne sais pas si cela posera problème si une personne oublie de le fermer

Ce que je souhaitais obtenir et qu'en partant de la ligne 7, lorsqu'il a une information dans la colonne B, il doit voir s'il y a également une information sur la ligne suivante et ainsi de suite jusqu'à pouvoir intégrer les informations souhaitées.

Merci Dan,

Cordialement

Je pourrai très bien le laisser et demander à cliquer sur fermer, mais il faut savoir que ce fichier sera en lecture partagé.
Dans le cas d'une utilisation simultanée, je ne sais pas si cela posera problème si une personne oublie de le fermer

Cela ne sert pas de masquer une USF sauf si vous utilisez plusieurs USF. Ce qui n'est pas le cas. Le mieux est de la fermer. Le click sur votre bouton réouvrira l'USF.

La question est de savoir si un même utilisateur qui ouvre le fichier pour remplir peut remplir plusieurs lignes ou pas ?
Si oui, il faut laisser l'USF ouverte après le click sur le bouton Ajouter
Si non, on ferme l'USF après click sur le bouton Ajouter

Ce que je souhaitais obtenir et qu'en partant de la ligne 7, lorsqu'il a une information dans la colonne B, il doit voir s'il y a également une information sur la ligne suivante et ainsi de suite jusqu'à pouvoir intégrer les informations souhaitées.

Heu je n'ai pas compris le pourquoi de la ligne 7 ?
Vous écrivez qu'il doit y avoir une info sur la ligne suivante, mais dans quelle colonne ?


Edit : dans votre Userform, vous avez utilisé des accents pour nommer vos textbox. Evitez absolument les accents, les caractères spéciaux tels que N°, cela peut vous causer des soucis avec VBA.
Enlevez les accents et remplacez N° par Num par exemple

Houps, c'est pas la ligne 7 mais la 4 et toujours dans la colonne B

J'ai retiré la fermeture automatique de l'USF lorsque l'on insère des lignes

Merci

Ok mais vous ne répondez pas à mes questions et je n'ai toujours pas compris le pourquoi de la ligne suivante...

Bon remplacez tous les codes de votre USF par ceci

Option Explicit
Private Sub CommandButton1_Click()
Dim dlg As Integer

With Feuil1 'code name de onglet previsio
    'Recherche de la 1ère ligne vide
    dlg = .Range("B" & Rows.Count).End(xlUp).Row
    If dlg = 2 Then dlg = 3 'si derniere ligne =2 on met la variable a valeur 3

    'Saisir les informations
    .Cells(dlg + 1, 2) = BoxSemaine.Text
    .Cells(dlg + 1, 3) = BoxDem.Text
    .Cells(dlg + 1, 4) = BoxN°Moule.Text
    .Cells(dlg + 1, 5) = BoxN°Essai.Text
    .Cells(dlg + 1, 6) = BoxPièces.Text
    .Cells(dlg + 1, 7) = BoxTypeEssai.Text
    .Cells(dlg + 1, 8) = BoxProjet.Text
    .Cells(dlg + 1, 9) = BoxDemandeur.Text
    .Cells(dlg + 1, 10) = BoxNbreEmpreinte.Text
    .Cells(dlg + 1, 11) = BoxNbrePDC.Text
    .Cells(dlg + 1, 12) = BoxNbrePDDC.Text
    .Cells(dlg + 1, 13) = BoxNbreAspect.Text
    .Cells(dlg + 1, 14) = BoxDateArrivéePrévisionnel.Text
    .Cells(dlg + 1, 15) = BoxDélaiSouhaité.Text

    'Ajout formules en Colonne A et T
    '.Cells(dlg + 1, 1).AutoFill Destination:=Range("A4:A" & dlg + 1), Type:=xlFillDefault
    '.Cells(dlg + 1, 20).AutoFill Destination:=Range("T4:T" & dlg + 1), Type:=xlFillDefault

End With

'Remise à zéro de la Userform
Dim c As Control
For Each c In Me.Controls 'on boucle sur chacun des objets sur l'USF
    If c.Name Like "Box*" Then c.Value = vbNullString 'si nom de l'objet commence par "Box..." on vide l'objet (ici Box correspond a une textbox)
Next c

'Unload Me 'pour ferme l'USF automatiquement

End Sub

Private Sub CommandButton2_Click()'annuler
Unload Me
End Sub

A voir si intérêt pour vous éviter de mettre des formules en colonne A et T.
- supprimer toutes les lignes sauf la ligne 4 qui contient une formule en colonne A et T
- Activez les deux lignes en dessous de la mention --> 'Ajout formules en Colonne A et T. Ces deux instructions recopieront la formule en A4 et T4 sur la ligne ajoutée.
- L'USF reste ouverte après avoir cliqué sur le bouton Ajouter. Si vous ne voulez pas, faites ceci dans le code :
--> 1. Désactivez les 4 lignes en dessous de la mention 'Remise à zéro
--> 2. Activez la ligne Unload Me

Faites un test et dites-moi

J'ai suivi ce tutoriel très proche de mon besoin : https://www.youtube.com/watch?v=v58wcXg6dGI

Cela répondra peut-être à votre question (19 minutes).

En regardant ce tuto, je comprenais parfaitement pourquoi je devais faire cela, c'est très explicite.

Vous connaissez parfaitement votre sujet mais moi je suis novice en VBA, mise à part faire un copier/coller de votre code et le tester, je peux pas faire grand chose d'autre et malheureusement je ne sais pas le lire.

Il est vrai qu'avec le VBA, je me doute bien qu'il n'est pas nécessaire d'avoir plusieurs colonnes avec diverses formules.

Par contre, j'ai testé ce code et il me supprime absolument toutes les formules même celles de la ligne 4
J'ai au préalable retiré toutes les formules se trouvant sur toutes les autres lignes hormis la 4

    'Ajout formules en Colonne A et T
    .Cells(dlg + 1, 1).AutoFill Destination:=Range("A4:A" & dlg + 1), Type:=xlFillDefault
    .Cells(dlg + 1, 20).AutoFill Destination:=Range("T4:T" & dlg + 1), Type:=xlFillDefault

Merci

re

mise à part faire un copier/coller de votre code et le tester, je peux pas faire grand chose d'autre et malheureusement je ne sais pas le lire.

Ok. J'ai ajouté quelques commentaires dans le code pour que vous compreniez. Si soucis n'hésitez pas bien entendu

Par contre, j'ai testé ce code et il me supprime absolument toutes les formules même celles de la ligne 4
J'ai au préalable retiré toutes les formules se trouvant sur toutes les autres lignes hormis la 4

Ok. Désolé je n'avais pas vérifié...
Remplacez les 3 lignes de code par ceci

    'Ajout formules en Colonne A et T
    If dlg + 1 > 4 Then
        .Cells(4, 1).AutoFill Destination:=Feuil1.Range("A4:A" & dlg + 1), Type:=xlFillDefault 'recopier formule en colonne A sur ligne ajoutee
        .Cells(4, 20).AutoFill Destination:=Feuil1.Range("T4:T" & dlg + 1), Type:=xlFillDefault 'recopier formule en colonne T sur ligne ajoutee
    End If

Bonjour,

Afin d'améliorer ce tableau,

1) Est-il possible de conserver la mise en forme sur l'ensemble de la ligne sans les traits horizontales mais avec certaines verticales (comme la ligne 4)

2) Pouvons-nous mettre en place un tri automatique de la colonne B (exemple S47) à chaque insertion de ligne par ordre chronologique ?

capture

3) J'observe que pour chaque ligne créée, il est impossible d'annuler (ctrl Z), pouvons-nous avoir la possibilité d'obtenir cette fonction sans devoir supprimer les lignes créées ?

capture 1

Merci Dan

Bonjour

1) Est-il possible de conserver la mise en forme sur l'ensemble de la ligne sans les traits horizontales mais avec certaines verticales (comme la ligne 4)

Oui. Faites ceci :
1. Dans l'USF:
- allez dans le code Private Sub CommandButton1_Click()
- juste entre le dernier END WITH et la mention 'Remise à zéro....., rajoutez cette instruction

Call Mise_en_forme

2. Allez dans votre module 1et rajoutez ce code

Sub Mise_en_forme()
With Feuil1.Range("A4:V" & Feuil1.Range("A" & Rows.Count).End(xlUp).Row)
    'Police
    With .Font
        .Name = "Calibri"
        .Size = 9
    End With

    'centrer
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter

    'bordures
    .BorderAround LineStyle:=xlContinuous
    .BorderAround Weight:=xlThin
    With .Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
    With .Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlThin
    End With
End With
End Sub

Faites un test

2) Pouvons-nous mettre en place un tri automatique de la colonne B (exemple S47) à chaque insertion de ligne par ordre chronologique ?

Oui.
C'est bien sur la colonne B que vous voulez faire un tri ?
Si oui dans quel sens voulez-vous le résultat ? plus petit au plus grand ou l'inverse ?

Bonjour Dan,

Le code fonctionne. Par contre, il m'a insérer des bordures sur toutes les colonnes + la ligne 1.
Est-il possible de le faire comme ci-dessous et pas sur l'ensemble ?

capture

Pour ce qui est du tri, ce sera toujours la colonne Sem. et il sera toujours noté S12, ... S42, S43, ... et pour le sens du tri, dans le sens que je viens d'indiquer.

Merci et bon week-end

Bonjour

Par contre, il m'a insérer des bordures sur toutes les colonnes + la ligne 1.
Est-il possible de le faire comme ci-dessous et pas sur l'ensemble ?

Remplacez le code Mise en forme par celui ci-dessous

Sub Mise_en_forme()
Dim dlg As Integer

With Feuil1
    dlg = .Range("B" & Rows.Count).End(xlUp).Row
    With .Range("A4:V" & dlg)
        'Police
        With .Font
            .Name = "Calibri"
            .Size = 9
        End With

        'centrer
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter

        'Bordures autour
        .BorderAround LineStyle:=xlContinuous
        .BorderAround Weight:=xlThin
    End With

    'bordures verticales et horizaontales
    With Union(.Range("A4:A" & dlg), Range("P4:V" & dlg))
        With .Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With

        With .Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
    End With
End With
End Sub

Pour ce qui est du tri, ce sera toujours la colonne Sem. et il sera toujours noté S12, ... S42, S43, ... et pour le sens du tri,

Faites ceci :

1. Dans l'USF:
- allez dans le code Private Sub CommandButton1_Click()
- juste avant le Call Mise_en_forme, ajoutez cette instruction

Call trier

2. Dans le module 1 ajoutez ce code

Sub trier()
Dim dlg As Integer

With Feuil1
    dlg = .Range("B" & Rows.Count).End(xlUp).Row
    With .Sort
        .SortFields.Clear
        .SortFields.Add2 Key:=Feuil1.Range("B4:B" & dlg), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Feuil1.Range("A4:V" & dlg)
        .Header = xlGuess
        .Orientation = xlTopToBottom
        .Apply
    End With
End With
End Sub

Faites un test

Bonjour Dan,

J'espère que vous avez passé un bon week-end ?

J'ai mis à jour le tableau avec vos dernières informations

Concernant le tri automatique c'est impeccable

Par contre, j'ai effectuer une petite modification de votre code pour avoir un meilleur visuel au niveau des bordures

   'bordures verticales et horizontales
    With Union(.Range("A4:A" & dlg), Range("I4:V" & dlg))

J'ai juste une petite remarque : Si une personne n'indique pas la semaine (Colonne B), voilà ce que cela produit :

capture

Si nous réinsérons une nouvelle ligne, c'est cette ligne qui sera remplacée.

Est-il possible de faire apparaître un message du genre "Merci de remplir l'ensemble des champs" dans le cas ou au moment d'insérer une ligne une personne oubli un ou plusieurs champs ?

Merci

Rechercher des sujets similaires à "insertion lignes tableau tenant compte semaines"