Autres Entrer un nombre

francescofrancesco

XLDnaute Junior
Bonjour,
Je dois entrer les nombres non séquentiels manquants dans la colonne C.
Comme vous pouvez le voir dans le fichier joint, il manque 7-8-9
les dates de référence dans la colonne B sont du 08/01/2021 au 15/01/2021.
Le 15-16-17 les dates de référence sont du 16/01/2021 au 27/01/2021.
Merci.
 

Pièces jointes

  • entrer.xls
    326 KB · Affichages: 23

francescofrancesco

XLDnaute Junior
Bonjour, en fait il ne s'agit pas d'une numérotation, mais plutôt de l'insertion d'une ligne qui prend en compte la date saisie dans textbox1 et le numéro dans textbox2.
Voir les colonnes de situation initiale ABC.
Résultat colonnes FGH avec insertion d'une ligne, colonnes LMN avec insertion de deux lignes.
 

fanch55

XLDnaute Barbatruc
Re-bonjour,
Je n'arrive toujours pas à comprendre au vu de la feuille .
Voulez-vous dire que si vous entrez ( dans l'userform ) une date accompagnée d'un numéro (Causale) qui serait en fait un numéro de ligne, par exemple 7 : on insère une nouvelle ligne avant la ligne 7 et on y met la date entrée ?
 

fanch55

XLDnaute Barbatruc
Bonsoir,
si j'ai bien compris le bouton 1 et 2
le code à mettre dans l'userform :
VB:
Private Sub CommandButton1_Click()
    Insert_Rows 1
End Sub
Private Sub CommandButton2_Click()
    Insert_Rows 2
End Sub
Sub Insert_Rows(Nlignes As Integer)

    Dim DerLigne As Long, Target As Range, N As Integer
    Application.ScreenUpdating = False
    Worksheets("primanota").Activate
   
    DerLigne = Range("A" & Rows.Count).End(xlUp).Row
   
    Set Target = Range("A2:C" & DerLigne).Find(CDate(TextBox1))
    If Not Target Is Nothing Then
        For N = 1 To Nlignes
            Target.EntireRow.Insert xlDown
        Next
        Set Target = Target.Offset(-1)
        Target = CDate(TextBox1)
        Target.Offset(, 1) = Val(TextBox2)
        With Columns("A").Rows("2:" & DerLigne + Nlignes)
            .NumberFormat = "General"
            .FormulaR1C1 = "=ROW()-1"
            .Value = .Value
        End With
    Else
        MsgBox CDate(TextBox1) & " non trovato"
    End If

End Sub

Le bouton 3 reste un mystère ...
 

francescofrancesco

XLDnaute Junior
Bonjour et merci pour votre réponse.
Prenons la date 01/04/2021
votre code évalue uniquement la valeur saisie dans Text1 (DATA).
Au lieu de cela, il devrait comparer en plus de la valeur de Text1 (DATA) également la valeur insérée dans Text2 (CAUSAL) avec les données de la colonne C à la même date du 01/04/2021 pour obtenir le résultat de la colonne D qui vous intéresse, merci.
 

Pièces jointes

  • entrer_2.xls
    707 KB · Affichages: 9
Dernière édition:

fanch55

XLDnaute Barbatruc
Re,
J'ai fait le code à partir du classeur que vous aviez fourni, faute de cahier de charge précis.
On va tenter de faire celui du bouton 1 dans un premier temps :

Dans un Userform ,
une date (data) et un n° (causale) est saisi​
les deux textbox ne peuvent être vides ? oui / non ?​

Bouton Insert
on recherche​
la data correspondante en colonne B​
et le causale correspondant en colonne C​
si on le trouve,​
on fait ......................................................​
sinon .......................................................​
la cellule en colonne D prendra la valeur de : .......​
la cellule en colonne A : ......................................................​

Si vous pouviez remplir les lignes vides ...
 

francescofrancesco

XLDnaute Junior
Prémisse :
1) les valeurs à saisir sont des nombres manquants et ne sont pas en séquence et ne peuvent être saisies qu'une seule fois ;
2) par insertion on entend insérer une ligne dessus/dessous à la même date en fonction de la valeur du Textx2 par rapport aux cellules de la colonne C.
----------------
Texte1 = Date
Texte2 = Raison
Vérifiez d'abord la date dans la colonne B.
Si la date correspond, nous vérifions la deuxième condition.
Chiffres/valeurs présents dans la colonne C.
3
5
si j'insère un chiffre manquant par exemple le 2 j'ai cette séquence
2
3
5
si j'entre le 6 j'ai
cette séquence
2
3
5
6
Cette séquence pourrait être obtenue en utilisant votre code avec un tri sur la colonne C mais j'aurais des problèmes sur le fichier d'origine donc je vous demande un peu de patience si vous pouvez m'aider, merci.
 

fanch55

XLDnaute Barbatruc
Refonte de tout le module Userform :
VB:
Dim Target      As Range
Dim DerLigne    As Long
Private Sub CommandButton1_Click()
    Insert_Rows
End Sub
Sub Insert_Rows()
Dim N As Integer

    Application.ScreenUpdating = False
    
    Target.AutoFilter Field:=2, Criteria1:=TextBox1
    Target.AutoFilter Field:=3, Criteria1:=TextBox2
    
    If Target.SpecialCells(xlCellTypeVisible).Cells.Count > 3 Then
        ' 3 cellules d'entetes ==> pas de lignes filtrées
        Me.Caption = TextBox1 & " - " & TextBox2 & " déja existant"
        Beep
    Else
        Target.AutoFilter
        Rows(2).Insert xlDown, xlFormatFromRightOrBelow
        Cells(2, "B") = CDate(TextBox1)
        Cells(2, "C") = TextBox2
        DerLigne = DerLigne + 1
        Me.Caption = TextBox1 & " - " & TextBox2 & " Inséré"
              
        ' on trie par date et par n° de facture
        Set Target = Range("A1:C" & DerLigne)
        With ActiveSheet.Sort
            .SortFields.Clear
            .SortFields.Add Key:=Target.Columns("B"), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SortFields.Add Key:=Target.Columns("C"), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
            .SetRange Target
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        
        ' on renumérote la colonne A
        With Columns("A").Rows("2:" & DerLigne)
            .NumberFormat = "General"
            .FormulaR1C1 = "=ROW()-1"
            .Value = .Value
        End With
        
        Target.AutoFilter Field:=2, Criteria1:=TextBox1
        Target.AutoFilter Field:=3, Criteria1:=TextBox2
        
    End If
    N = Target.SpecialCells(xlCellTypeVisible).Areas(2).Row
    Target.AutoFilter Field:=3
    Target.Rows(N).Select
    
    Application.ScreenUpdating = True
    
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1 <> "" Then
        TextBox1 = Format(TextBox1, "dd/mm/yyyy")
        Target.AutoFilter Field:=2, Criteria1:=TextBox1
        Target.AutoFilter Field:=3
    End If
    CommandButton1.Visible = TextBox1 <> ""
End Sub

Private Sub UserForm_Initialize()
    CommandButton1.Visible = TextBox1 <> ""
    Worksheets("primanota").Activate
    DerLigne = Range("A" & Rows.Count).End(xlUp).Row
    Set Target = Range("A1:C" & DerLigne)
    If Not ActiveSheet.AutoFilter Is Nothing Then ActiveSheet.AutoFilter

End Sub

Private Sub UserForm_Terminate()
    If Not ActiveSheet.AutoFilter Is Nothing Then Target.AutoFilter
End Sub
 

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG