Autres Insérer une ligne

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
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

Dernière édition:
Alors là job75, je te tire mon chapeau
1598727397864.gif
 
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.
 
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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
128
Réponses
4
Affichages
164
Réponses
3
Affichages
152
Réponses
6
Affichages
170
Réponses
18
Affichages
698
Retour