Problème d'incrémentation automatique

Bonjour le forum,

Je n’arrive pas à comprendre ce qui ne va pas dans mon code d’incrémentation de mon UserForm1 ci-dessous :

Private Sub NUMERO_Click()
' incrementation de cellule

Dim i As Integer

For i = 1 To 999

    If Range("A" & i).Value = "" Then
     Range("A" & i) = Range("A" & i - 1) + 1
     TextBoxNUM = Range("A" & i)

    Exit For

    End If

Next i

End Sub

Tant que j’étais sous Excel 2010 il n’y avait pas de problème mais maintenant sous Excel 2016 ça fonctionnement bizarrement. Je m’explique. Lorsque j’ouvre mon fichier (en PJ) le formulaire de saisie apparaît et en cliquant sur « obtenir un numéro » j’ai le numéro situé dans la colonne A de la Feuil1 qui s’incrémente de plus 1. Jusque-là pas de problème mais lorsque je regarde ma feuil1 où se trouve les numéros ces derniers n’apparaissent pas tout le temps. Pour les voir il faut que je ferme mon fichier et que je l’ouvre de nouveau ou il faudrait que je sélectionne la feuil1 avant de cliquer sur « obtenir un numéro » de l'UserForm.

Quelqu’un pourrait me dire ce qui ne va pas dans le code quitte à m’en proposer un autre plus efficace. Ce que je souhaiterais c’est que dès que je clique sur « obtenir un numéro » de l’UserForm le nouveau numéro s’inscrit directement dans la feuil1 à la suite du dernier et que cette dernière devient active au 1er plan pour que je puisse y travailler dedans.

J’espère que je n’ai pas été trop brouillon dans mes explications.

Cordialement.

Bonjour,

De cette façon peut être ? Tu as une valeur parasite en bas du tableau (8) !

Private Sub NUMERO_Click()

    With Worksheets("Feuil1")

        TextBoxNUM.Text = Application.Max(.Range("A:A")) + 1
        .Range("A" & .Cells(1, 1).End(xlDown).Row + 1).Value = TextBoxNUM.Text

    End With

End Sub

Salut Theze

Merci pour ta réponse. Ton code marche bien donc je prends. Cependant comment je peux faire pour qu’une fois que le nouveau numéro est saisi je me retrouve directement sur la feuille à la ligne qui viens de s’incrémenter pour faire les saisies (date, libellé..) sans devoir cliquer sur la feuil1 ?

Cordialement.

Testes ceci pour voir si ça te convient :

Private Sub NUMERO_Click()

    With Worksheets("Feuil1")

        TextBoxNUM.Text = Application.Max(.Range("A:A")) + 1
        .Range("A" & .Cells(1, 1).End(xlDown).Row + 1).Value = TextBoxNUM.Text
        .Range("A" & .Cells(1, 1).End(xlDown).Row).Select

    End With

    Unload Me

End Sub

Message « Erreur de compilation. Projet ou bibliothèque introuvable » à la ligne de code « ReadOnlyRecommended = »

'Fermeture de l'appli et de excel

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If CloseMode = 0 Then
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs
    [u][b]ReadOnlyRecommended = False[/b][/u]
    CreateBackup = False

     With ActiveWorkbook
    .RunAutoMacros xlAutoClose
    .Close
    End With

End If

End Sub

Re,

Testes avec ce code, "ReadOnlyRecommended" est un paramètre nommé de même que "CreateBackup" et donc mal positionnés dans le code et mal orthographié par rapport à ce qu'attend le compilateur :

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    If CloseMode = 0 Then

        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs , , , , False, False

         With ActiveWorkbook

            .RunAutoMacros xlAutoClose
            .Close

        End With

        Application.DisplayAlerts = True

    End If

End Sub

Bonsoir,

Ton nouveau code ferme bien l'Userform pour me donner la main sur la Feuil1 mais comment je fais pour le réactiver pour saisir un nouveau numéro ?

Le but recherché c'est que je puisse disposer du l'Userform pour incrémenter des nouveaux numéros à la demande et une fois fait me basculer sur la ligne du nouveau numéro pour y entrer les autres éléments. Tout ça ce fait avec tes deux codes que tu as modifiés mais le problème c'est que l'Userform étant fermé je dois saisir le numéro suivant manuellement ce qui n'est pas le but recherché.

Alors je me pose la question si ça ne serai pas mieux d'utiliser un bouton dans la feuille (en la fractionnant pour qu'il soit toujours visible) ou dans la barre des menus et non pas un Userform. Ce bouton ferrai le même travail que le bouton « obtenir un numéro » de l'Userform mais il serait toujours visible. Qu'est-ce que tu en penses ?

Cordialement.

Bonjour,

affiche ton UF en non modal :

UserForm1.Show vbModeless

eric

Salut eriic,

Je n'arrive pas à savoir où je mets ce code. Tu peux me préciser à quel endroit ? Merci.

A+

Je n'ai pas téléchargé ton fichier.

Tu le mets là où tu affiches ton userform, il s'agit juste d'ajouter le paramètre vbModeless.

NB : Ctrl+F fonctionne dans VBE

eric

Dans le "ThisWorbook" j'ai les lignes de code :

Private Sub Workbook_open()
' lancement de l'appli au lancement d'excel et taille feuil calcul minime
Application.WindowState = xlMinimized
Load DAF
DAF.Show vbModeless

End Sub

qui je pense devrait correspondre à ton code

UserForm1.Show vbModeless

Cela dit avec ou sans ce code le problème de fermeture de l'UF que je rencontre en cliquant pour obtenir un numéro est toujours là ce qui est gênant pour obtenir un nouveau numéro automatiquement.

Cordialement.

Purée, ça c'est de la boite de dialogue....

Il n'y avait pas plus petit en magasin ?

Ben faut pas la fermer aussi. Enlève le Unload Me

Fermeture par la croix lorsque tu n'en as plus besoin.

eric

OK c'est tout bon.

Merci à toi et à Theze pour le temps passé.

Cordialement.

Pourquoi toute cette mécanique ?

Avec ça dans le module de la feuille :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not (Target.Column > 1 Or Target.Row < 2 Or Target.Value <> "") Then
        Cancel = True
        Target = Application.Max(Columns(1)) + 1
    End If
End Sub

un double clic en A te met le n° suivant si la cellule est vide.

Tu peux ajouter un test si tu veux empêcher de sauter une ligne.

eric

Pas mal ton code . L'idée du test est bonne car des erreurs peuvent se glisser mais je le glisse où le test ? Sinon je pense prends ton code à la place de l'UF mais ce qui serait pas mal c'est qu'à l'ouverture du fichier je me positionne directement sur la nouvelle cellule à remplir ce qui m'éviterait de faire défiler tous les enregistrements quand j'aurai une centaine de numéro.

Cordialement.

positionné sur la dernière ligne remplie, que tu aies autre chose qu'un néant total sous les yeux.

eric

PS : tu doit être impérativement au format 97/2003 *.xls ?

Au format *.xlsx tu pourras déclarer ta plage en Tableau et ne plus être obligé de préparer des lignes d'avance.

Un ajout te mettrait automatiquement formats et formules sur la nouvelle ligne.

eric

Merci pour ton code. Je le testerai plus tard car je dois prendre la route.

Cordialement

Salut eriiic

Je viens de tester ton fichier. Je suis bien en format 97/2003 pour le test et ta macro fonctionne que pour la 1ère partie à savoir se positionner sur la dernière cellule vide de la colonne A. Ensuite lorsque je double clic sur la cellule rien se passe. Ce que je ne comprends pas car le code m'a l'air correcte. Mystère.

Si je veux déclarer une plage tableau pour le format *.xlsx comment je procède ? Faire un tableau pas de problème mais le déclarer dans ta macro je ne vois pas comment je dois faire.

Cordialement.

mea culpa.

J'ai enregistré après le copié-collé pour ajouter le dernier test (pas de ligne vide), mais oublié de le faire après édition.

Il manque le .Offset(-1). La ligne est donc :

If Not (Target.Column > 1 Or Target.Row < 2 Or Target.Value <> "" Or Target.Offset(-1).Value = "") Then

eric

Rechercher des sujets similaires à "probleme incrementation automatique"