Autres Insérer une ligne

francescofrancesco

XLDnaute Junior
Sauver,

Je dois insérer une ligne vide en fonction de la date présentée dans la cellule G1 et du numéro de facture présenté dans la cellule I1.

Chaque nouvelle ligne insérée concerne un numéro de facture non présent dans la liste de la colonne E mais toujours avec une date déjà présente dans la colonne Cette qu'il manque plus d'une facture.

Insérez la ligne vide et insérez quelques données: dans la première cellule, il y aura une cellule progressive, la deuxième cellule la date, la troisième cellule de facture avec le préfixe FT. ou ft. , cinquième cellule uniquement le numéro de facture.

Exemple: saisie de la facture 4 non présente dans la liste:

la nouvelle ligne vide doit être insérée sous le numéro de facture 3 seule variation des données: jour 07/01/2020 ou jour 08/01/2020 selon cellule G1.

Il est à noter qu'à chaque changement de données, il y a une ligne vide.

La date est le 07/01/2020 la ligne vide insérera sous le numéro de facture 3 mais avant la ligne vide, les données de la facture du 07/01/2020.

La date est le 08/01/2020 la ligne vide insérera après le numéro de facture 3 my après la ligne vide, les données de la facture du 08/01/2020.

Si, en revanche, les données de la cellule G1 ne sont pas présentes dans la colonne C et le numéro de facture de la cellule I1 n'est pas présent dans la colonne E

les données doivent être entrées dans une liste finale.



En espérant être utile, j'ai été clair que j'espérais de l'aide car cela ne me concerne pas.
 

Pièces jointes

  • forum.xls
    71 KB · Affichages: 43

Dudu2

XLDnaute Barbatruc
Bonjour francescofrancesco,
Tu as été clair en termes de syntaxe (ce qui est déjà pas mal !), mais après t'avoir lu, je ne sais plus très bien quel jour on est.
Si tu pouvais simplifier ta demande à un point particulier tu aurais sans doute plus de réponses.
D.
 

job75

XLDnaute Barbatruc
Bonsoir francescofrancesco, Dudu2,

Ce n'était pas facile à régler, voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim data As Range, num As Range, col As Range, lig As Variant
Set data = [G1]: Set num = [I1]: Set col = [E:E]
If Intersect(Target, Union(data, num)) Is Nothing Then Exit Sub
Target.Select
'---tests sur num---
If CStr(num) = "" Then Exit Sub
If Not IsNumeric(num) Then num = "": Exit Sub
If Application.CountIf(col, num) Or num <> Int(num) Then num = "": Exit Sub
lig = Application.Match(num, col)
If IsError(lig) Then num = "": Exit Sub
'---tests sur data---
If CStr(data) = "" Then Exit Sub
If Not IsDate(data) Then data = "": Exit Sub
If data <> Cells(lig, "B") And data <> Cells(lig, "B") + 1 Then data = "": Exit Sub
'---insertions de lignes et remplissages des cellules---
If Cells(lig + 1, "B") <> "" Then Rows(lig + 1).Insert: _
    Cells(lig, "A").Copy Cells(lig + 1, "A"): Cells(lig, "C").Copy Cells(lig + 1, "C")
Cells(lig + 1, "B") = data
Cells(lig + 1, col.Column) = num
If Cells(lig + 2, "B") > Cells(lig + 1, "B") Then Rows(lig + 2).Insert: _
    Cells(lig + 1, "A").Copy Cells(lig + 2, "A"): Cells(lig + 1, "C").Copy Cells(lig + 2, "C")
If Cells(lig, "B") < Cells(lig + 1, "B") Then Rows(lig + 1).Insert: _
    Cells(lig, "A").Copy Cells(lig + 1, "A"): Cells(lig, "C").Copy Cells(lig + 1, "C")
End Sub
Entrez par exemple 4 en I1 et 08/01/2020 en G1.

A+
 

Pièces jointes

  • forum(1).xls
    100.5 KB · Affichages: 8
Dernière édition:

Dudu2

XLDnaute Barbatruc
Alors là job75, je te tire mon chapeau
1598727397864.gif
 

job75

XLDnaute Barbatruc
Dans le fichier du post #1 il n'y a pas de formulaire, il faut juste remplir G1 et I1.

Mais si vous voulez lier à un bouton, rien de plus facile, changez le nom de la macro et supprimez les 4ème et 5ème lignes de code.
 

job75

XLDnaute Barbatruc
Voyez ce fichier (2) et le code de l'UserForm :
VB:
Private Sub CommandButton1_Click()
Dim num As Object, data As Object, col As Range, lig As Variant
Set num = TextBox1: Set data = TextBox2: Set col = [E:E]
'---tests sur num---
If Not IsNumeric(num) Then num = "": num.SetFocus: Exit Sub
If Application.CountIf(col, num) Or Val(num) <> Int(num) Then num = "": num.SetFocus: Exit Sub
lig = Application.Match(Val(num), col)
If IsError(lig) Then num = "": num.SetFocus: Exit Sub
'---tests sur data---
If Not IsDate(data) Then data = "": data.SetFocus: Exit Sub
If CDate(data) <> Cells(lig, "B") And CDate(data) <> Cells(lig, "B") + 1 Then data = "": data.SetFocus: Exit Sub
'---insertions de lignes et remplissages des cellules---
If Cells(lig + 1, "B") <> "" Then Rows(lig + 1).Insert: _
    Cells(lig, "A").Copy Cells(lig + 1, "A"): Cells(lig, "C").Copy Cells(lig + 1, "C")
Cells(lig + 1, "B") = CDate(data)
Cells(lig + 1, col.Column) = Val(num)
If Cells(lig + 2, "B") > Cells(lig + 1, "B") Then Rows(lig + 2).Insert: _
    Cells(lig + 1, "A").Copy Cells(lig + 2, "A"): Cells(lig + 1, "C").Copy Cells(lig + 2, "C")
If Cells(lig, "B") < Cells(lig + 1, "B") Then Rows(lig + 1).Insert: _
    Cells(lig, "A").Copy Cells(lig + 1, "A"): Cells(lig, "C").Copy Cells(lig + 1, "C")
'---RAZ---
num = "": data = "": num.SetFocus
End Sub
 

Pièces jointes

  • forum(2).xls
    112.5 KB · Affichages: 8

francescofrancesco

XLDnaute Junior
Bonjour, malheureusement j'ai dû remettre cette ligne de code
VB:
If CDate(data) <> Cells(lig, "B") And CDate(data) <> Cells(lig, "B") + 1 Then data = "": data.SetFocus: Exit Sub
sinon je n'ai pas eu la vérification de la date. Cela signifie que seules les factures avec un numéro plus grand et avec la même date peuvent être saisies à la fin de la liste mais pas les factures avec un numéro plus grand mais pas avec une date supérieure à la dernière ligne. Par exemple: si j'insère 26 avec la date 25/01/2020 ok, mais si j'insère 26 avec la date 31/01/2020 rien. Vous pouvez jeter un oeil. Merci
 

job75

XLDnaute Barbatruc
Bonjour francescofrancesco, le forum,

La dernière date du tableau doit servir de limite, toutes les dates entrées doivent lui être antérieures.

Il suffit qu'elle soit assez éloignée, par exemple 31/12/2100, voyez ce fichier (3).

A+
 

Pièces jointes

  • forum(3).xls
    101 KB · Affichages: 3

Discussions similaires

Réponses
6
Affichages
358

Statistiques des forums

Discussions
312 195
Messages
2 086 078
Membres
103 112
dernier inscrit
cuq-laet