Insertion ligne

Bonjour le forum,

Alors j’ai une macro qui fait son boulot, mais je cherche à être plus précis que ça:

Private Sub VALIDER_Click()

With Worksheets("feuil1")

derlign = .Range("A3000").End(xlUp).Row + 1

.Cells(derlign, 1).Value = TextBox1

.Cells(derlign, 2).Value = TextBox2

.Cells(derlign, 3).Value = TextBox3

.Cells(derlign, 4).Value = TextBox4

End With

Unload Me

End sub()

Je souhaiterais que cette ligne vienne se placer, en-dessous de la dernière ligne du tableau contenant le mot en TextBox1, dans le colonne A.

J’espère être clair, et que vous pourrez m’aider.

Merci d’avance

Bonjour,

le principe : trouver la dernière ligne comportant la valeur de TextBox1 en col A , insérer une ligne et y copier les différentes valeurs:

Une solution peu élégante:

Private Sub VALIDER_Click()

With Worksheets("feuil1")
derlign = .Range("A3000").End(xlUp).Row + 1
For i = derlign To 1 Step -1
    If .Cells(i, 1) = TextBox1 Then
        .Rows(i + 1).Insert Shift:=xlDown
        .Cells(i + 1, 1).Value = TextBox1
        .Cells(i + 1, 2).Value = TextBox2
        .Cells(i + 1, 3).Value = TextBox3
        .Cells(i + 1, 4).Value = TextBox4
        Exit For
    End If
Next
End With

Unload Me

End sub()

A+

C’est peut être peu élégant mais très efficace.

Merci beaucoup.

Alors désolé j'ai un nouveau petit soucis.

Je suis bien arrivé a mon but avec cette macro

[Private Sub AJOUTER_Click()

With Worksheets("TDF SERVICE")
derlign = .Range("A3000").End(xlUp).Row + 1
For i = derlign To 1 Step -1
    If .Cells(i, 1) = TextBoxGRADE Then
            .Rows(i + 1).Insert shift:=xlDown

            .Cells(i + 1, 1).Value = TextBoxGRADE
            .Cells(i + 1, 2).Value = TextBoxPERSONNEL
            .Cells(i + 1, 3).Value = TextBoxPRENOM
            .Cells(i + 1, 4).Value = TextBoxMATRICULE
            Exit For
        End If
Next

End With

End sub

Qui me permet de créer un nouveau personnel, a l'aide d'un bouton

Cependant je souhaiterais créer un bouton MODIFIER, qui crerai une ligne avec les info rentré mais qui suprimerai l'autre.

Problème avec cette macro, elle supprime toute les ligne ou apparaissent le nom.

J'ai essayé ca:

Private Sub MODIFIER_Click()

Dim rng As Range
Dim tx As String

    If TextBoxPERSONNEL = "" Then Exit Sub
    tx = TextBoxPERSONNEL.Value

    Do
        Set rng = Sheets("TDF SERVICE").Range("B:B").Find(tx)

        If rng Is Nothing Then
            Exit Do
        Else
        Sheets("TDF SERVICE").Rows(rng.Row).Delete

        End If
    Loop

Unload Me

With Worksheets("TDF SERVICE")
derlign = .Range("A3000").End(xlUp).Row + 1
For i = derlign To 1 Step -1
    If .Cells(i, 1) = TextBoxGRADE Then
            .Rows(i + 1).Insert shift:=xlDown
            .Cells(i + 1, 1).Value = TextBoxGRADE
            .Cells(i + 1, 2).Value = TextBoxPERSONNEL
            .Cells(i + 1, 3).Value = TextBoxPRENOM
            .Cells(i + 1, 4).Value = TextBoxMATRICULE
            Exit For
        End If
Next

End With

CHANGEMENTTDF.Hide

End Sub

Mais ca supprime les 2 lignes...

Re,

Problème avec cette macro, elle supprime toute les ligne ou apparaissent le nom.

Normal, puisque, dans la boucle Do .... Loop, on lui demande de supprimer toutes les lignes où apparait le nom !!!!

Cependant je souhaiterais créer un bouton MODIFIER, qui crerai une ligne avec les info rentré mais qui suprimerai l'autre.

Plutôt que de supprimer la ligne ( la dernière ??) puis d'en rajouter une avec les nouvelles info, une proposition qui consiste à modifier la dernière ligne trouvée:

Private Sub MODIFIER_Click()

Dim i as Integer

 If TextBoxPERSONNEL = "" Then Exit Sub

With Worksheets("TDF SERVICE")
derlign = .Range("A3000").End(xlUp).Row
For i = derlign To 1 Step -1
    If .Cells(i, 1) = TextBoxGRADE Then
            .Cells(i , 2).Value = TextBoxPERSONNEL
            .Cells(i , 3).Value = TextBoxPRENOM
            .Cells(i , 4).Value = TextBoxMATRICULE
            Exit For
        End If
Next

End With

CHANGEMENTTDF.Hide

End Sub

A+

Alors ca fonctionne pour modifier, et placer la nouvelle ligne au bon endroit, mais cela ne supprime pas l'ancienne ligne

Ci joint mon fichier pour comprendre

9test.xlsx (17.19 Ko)

une fois ça supprime trop, une fois ça supprime pas assez ....!

Alors ca fonctionne pour modifier, et placer la nouvelle ligne au bon endroit, mais cela ne supprime pas l'ancienne ligne

le dernier code ne supprime effectivement rien, il met seulement à jour la dernière ligne de données.

Curieuse idée de choisir le grade plutôt que le nom pour faire des modifications.

Et pourquoi supprimer puisqu'a priori il n'y a qu'une ligne pour chaque personne.

Actuellement , c'est sur qu'au premier grade reconnu, les modifs vont s'appliquer même si la ligne ne concerne pas la bonne personne.

Dommage que le classeur soit sans le code !

Est ce que le Nom est choisi dans une combobox , alimentée comment ? . suivant le cas on peut peut-être récupérer le n° de ligne de la personne pour les mises à jour. Ou alors utiliser le principe de la boucle , mais en cherchant le nom, pas le grade.

A+

Ça me pose pas de problème que se soit en cherchant le nom, mais je veux toujours rester classer par grade, du coup il faut qu’après modification, la ligne se place en dessous du dernier du même grade

???

La ligne modifiée ne change pas de place ! seuls les éléments de la ligne de ce nom seront modifiés.

Sauf si c'est le grade qui change. A ce moment on peut envisager un tri du tableau sur une liste personnalisée

Tu peux peut-être voir avec VDMICHEL qui est en train de créer un outils de gestion "pompier"

A+

oui il n'y a quelle grade qui change pour ce bouton.

J'en ai un autre ("CHGT TDF") qui me permet de changer le reste

Un idée du coup???

Ben...

j'attends le classeur avec les macros incluses.

oops, je comprend pas pourquoi les macro n'était pas incluse...

parce que le classeur est enregistré en xlsx donc sans macro!

desolé

7test.xlsm (17.38 Ko)

toujours pas de code dans le classeur .

C'est tout pour aujourd'hui .

Voici mon fichier, si quelqu'un pouvait m'aider, merci d'avance...

L'idée serait que je rentre le nom du personnel que tout s'affiche comme ca l'est déjà.

Si je change son grade et que je clique sur le bouton "CHGT GRADE", toute la ligne de ce personnel vienne se glisser en dessous des personnels du même grade.

J'espère être a peu prêt clair...

7test.xlsm (29.00 Ko)

un essai de mise à jour grade:

Private Sub MODIFIERGRADE_Click()

Dim i As Integer, Lig As Range, Derlign As Integer

If TextBoxPERSONNEL = "" Then Exit Sub
With Worksheets("TDF SERVICE")
Derlign = .Range("A3000").End(xlUp).Row
Set Lig = .Range("D4:D" & Derlign).Find(TextBoxMATRICULE.Value)
If Not Lig Is Nothing Then ' si mat existe
        .Cells(Lig.Row, 1) = TextBoxGRADE
        .Range("A4:L" & Derlign).Sort Key1:=Range("A4"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=6, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
Else
    'si le matricule n'existe pas appel procédure pour le créer
End If
End With
Set Lig = Nothing
CHANGEMENTTDF.Hide

End Sub

Après avoir mis le grade à jour, tri de la plage sur la colonne Grade.

Pour que le tri s'effectue selon les grades et non selon l'ordre alphabétique, il est nécessaire de créer une liste personnalisée des grades (dans Outils, Options dans ma vieille version XL)

et d'adapter dans OrderCustom:=6 , le N° de cette nouvelle liste.

Par ailleurs pour éviter des saisies de grade fantaisistes, il serait mieux de proposer la liste des grades dans une combobox : il n'y aurait plus qu'à cliquer.

MERCI beaucoup cela fonctionne, cependant je ne vois pas ce que vient faire le matricule ici???

Si on peut trouver plusieurs fois le même nom dans une liste de personnel, le matricule, lui, est en principe unique.

D'où la recherche sur le matricule plutôt que sur le nom ou le grade, pour la mise à jour de la bonne ligne.

Rechercher des sujets similaires à "insertion ligne"