IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Saisie et incrémentation


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Association
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Association

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Par défaut Saisie et incrémentation
    Bonjour au forum,
    J'ai une feuille de calcul qui est un journal compta (fichier joint) sur laquelle je saisis dates, libellé et numéro de pièce comptable en colonne C du fichier joint. Les valeur de cette colonne commence soit par un "R" pour "recette" suivi d'un numéro d'ordre à 3 chiffres , soit par un "D" pour dépense suivi d'un numéro d'ordre à 3 chiffres. Les numéros d'ordre sont propres à chaque catégorie. Je souhaiterais automatiser la saisie des cellules de cette colonne afin d'avoir le résultat suivant :
    - lorsque je tape un R je voudrais avoir le numéro d'ordre séquentiel de tous les R qui ont été saisis cest à dire que si je suis au R015 il faudrait que en tapant R j'ai automatiquement R016 ; idem pour les D, si je suis au D029 comme sur le fichier joint je voudrais que dès la saisie du D j'ai automatiquement "030"qui s'incrémente. il y a bien la solution du "glisser" de la cellule vers le bas qui incrémenteles valeur mais je voudrais que ce soit automatisé par du code , macro ou fonction. Merci de votre retour,
    renaud49
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour

    tu peux déjà utiliser une formule pour calculer le prochain numéro, par exemple avec 365 :

    Nom : _Sans titre.png
Affichages : 89
Taille : 21,1 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =H1&TEXTE(MAX(FILTRE(DROITE($C$1:$C$22;3);GAUCHE($C$1:$C$22;1)=H1)+0)+1;"000")
    Après il va falloir un peu de VBA pour mettre ça au bon endroit au bon moment.

    Comment vois-tu les choses (d'un point de vue ergonomie) ? À quel moment la cellule est-elle renseignée ? Comment sait-on si c'est un D ou un R ?

  3. #3
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Re,

    exemple de code avec saisie R ou D + Double-clic

    SaisiePiece.xlsm

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Association
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Association

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Par défaut
    Bonjour,
    merci du retour,
    Pour déterminer le numéro suivant de R ou D j'ai trouvé une solution via NB.SI. Ce que je souhaite au niveau ergonomie c'est que :
    lorque je saisie dans une cellule de la colonne "Pièce" le 1er caractère "D" ou "R" il s'affiche ensuite le numéro d'ordre complet ,soit le rang à la suite du "R" ou du "D" soit lea valeur de la cellule qui a été préalablement déterminée dans ton onglet"Paramètres". Le code sur double-click ne fonctionne pas . Est-il possible de mettre ce code sur un évènement "touche relachée" avec un controle du code ASCII correspondant au "D" ou "R".
    Merci
    Renaud49

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, teste ceci. J'utilise l'évènement Change de la feuille. Dès que tu quittes une cellule de la colonne C après avoir encodé D ou R, le numéro est incrémenté de 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
        Dim cell As Range
        Dim maxNum As Integer
        Dim num As Integer
     
        Set KeyCells = Range("C1:C" & Cells(Rows.Count, "C").End(xlUp).Row)
     
        If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
     
            If Left(Target.Value, 1) = "R" Or Left(Target.Value, 1) = "D" Then
                maxNum = 0
                Application.EnableEvents = False
                For Each cell In KeyCells
                    If cell.Value Like Left(Target.Value, 1) & "*" Then
                        If IsNumeric(Mid(cell.Value, 2, 3)) Then
                            num = CInt(Mid(cell.Value, 2, 3))
                            If num > maxNum Then maxNum = num
                        End If
                    End If
                Next cell
                Target.Value = Left(Target.Value, 1) & Format(maxNum + 1, "000")
                Application.EnableEvents = True
            End If
     
        End If
    End Sub

  6. #6
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    j'ai trouvé une solution via NB.SI.
    Attention avec une NB.Si s'il y a à un moment donné des trous dans la numérotation, tu auras un problème. Si tu as par exemple D002 et D003 (D001 supprimé ou disparu...) le prochain numéro sera D003.

    Le code sur double-click ne fonctionne pas
    Il se passe quoi ? Les formules dans paramètres fonctionnent ? Tu as quelle version d'Excel ?

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Association
    Inscrit en
    Février 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Association

    Informations forums :
    Inscription : Février 2023
    Messages : 3
    Par défaut
    Bonjour et merci Franc,
    Ton code fonctionne parfaitement sur Excel 2016.
    je clos la discussion.
    A bientot sur le forum.
    Renaud49



    Citation Envoyé par Franc Voir le message
    Bonjour, teste ceci. J'utilise l'évènement Change de la feuille. Dès que tu quittes une cellule de la colonne C après avoir encodé D ou R, le numéro est incrémenté de 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
        Dim cell As Range
        Dim maxNum As Integer
        Dim num As Integer
     
        Set KeyCells = Range("C1:C" & Cells(Rows.Count, "C").End(xlUp).Row)
     
        If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
     
            If Left(Target.Value, 1) = "R" Or Left(Target.Value, 1) = "D" Then
                maxNum = 0
                Application.EnableEvents = False
                For Each cell In KeyCells
                    If cell.Value Like Left(Target.Value, 1) & "*" Then
                        If IsNumeric(Mid(cell.Value, 2, 3)) Then
                            num = CInt(Mid(cell.Value, 2, 3))
                            If num > maxNum Then maxNum = num
                        End If
                    End If
                Next cell
                Target.Value = Left(Target.Value, 1) & Format(maxNum + 1, "000")
                Application.EnableEvents = True
            End If
     
        End If
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/05/2003, 22h50
  2. Réponses: 3
    Dernier message: 19/03/2003, 15h19
  3. [debutant]Limiter le temps de saisi
    Par Nasky dans le forum C
    Réponses: 5
    Dernier message: 17/03/2003, 15h47
  4. [Kylix] saisie d'@ IP kylix2 OE
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 10/11/2002, 01h54
  5. [Kylix] crypter la saisie sous kylix
    Par nahmsath dans le forum EDI
    Réponses: 2
    Dernier message: 15/10/2002, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo