Microsoft 365 Incrémentation numérique automatique conditionnelle à partir d'un texte

Lubé

XLDnaute Nouveau
Bonjour à vous,

Je souhaite utiliser de meilleures compétences que les miennes pour créer des valeurs numérique permettant de générer des références de documents pour de la gestion documentaire. Je pense que le VBA est la solution, mais je ne maitrise absolument pas. Voilà ou j'en suis dans l'écriture (le brouillon d'avant le brouillon !) du code. Voilà où j'en suis dans le fichier "GED" joint.

Les colonne f, h, k et l sont les éléments que je veux comparer entre eux de façon à générer un nouveau numéro à partir de 1 si non existant. Si existant, incrémentation de 1 de l'élément suivant.

Dans le cas ou le domaine est la production (colonne E)
f = valeur? intitulé projet ; >1 ; dans colonne F à partir de F5 jusqu'à inconnu en format texte
h = valeur? code projet ; >1 ; dans colonne H à partir de H5 jusqu'à inconnu en format \b "000"
k = valeur? code doc ; >1 ; dans colonne K à partir de K5 jusqu'à inconnu en format \b "000"
l = valeur? Version ; >1 ; dans colonne L à partir de jusqu'à inconnu L5 en format \b "00"

Si f = vide alors h, k, l = vide
Si f <> f+1 alors h = 1
Si f = f+1 alors h = h + 1
Si h <> h + 1 alors k = 1
Si h = h + 1 alors k = k + 1
Si k <> k + 1 alors l = 1
Si k = k+ 1 alors l = l + 1

Dans le cas ou le domaine est autre que production
k = valeur? code doc ; >1 ; dans colonne K à partir de K5 jusqu'à inconnu en format \b "000"
l = valeur? Version ; >1 ; dans colonne L à partir de jusqu'à inconnu L5 en format \b "00"

Si k = vide alors l = vide
Si k <> k + 1 alors l = 1
Si k = k+ 1 alors l = l + 1

En espérant avoir été compréhensible, à défaut d'être très clair !

Merci pour votre temps.
 

Pièces jointes

  • GED v2.xlsx
    722.9 KB · Affichages: 35

Lubé

XLDnaute Nouveau
:/

J'ai mis des valeurs dans les colonnes pour rendre visible ce que je souhaite obtenir comme résultat

Si le projet est nouveau dans la liste, cad si le nom n'est pas déjà utilisé en colonne F, je veux que le code projet (colonne H) soit différent (h=h+1). Si le nom est déjà utilisé, h=h.
Pour ce code projet, il y aura plusieurs documents de créés. Pour chaque documents, le code doc colonne K, doit s'incrémenter de 1 dans le cas ou le nom du document est différent, colonne C

Et je me rends compte que j'avais occulté cette partie là. :/

Ensuite si intitulé projet (eq code projet), nom doc identique (eq code doc), la version du doc doit s'incrémenter de 1.

En espérant être plus clair !
 

Pièces jointes

  • GED v3.xlsx
    723.5 KB · Affichages: 4

danielco

XLDnaute Accro
Format de la colonne H : c'est la première fois qu'on me la fait, celle-la :

Capture d’écran 2020-09-11 151752.png
 

danielco

XLDnaute Accro
J'ai ajouté la macro :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Ligne As Variant, Res As Variant, C As Range, Proj As String
  If Target.Count > 1 Then Exit Sub
  Application.EnableEvents = False
  If Target.Column = 6 Then
    Ligne = Application.Match(Target, [F:F], 0)
    If Ligne < Target.Row Then
      Target.Offset(, 2) = Cells(Ligne, 8)
    Else
      Target.Offset(, 2) = Application.Max(Range("H5", Cells(Target.Row - 1, 8))) + 1
    End If
  ElseIf Target.Column = 10 Then
    Ligne = Application.Match(Cells(Target.Row, 6), [F:F], 0)
    Proj = Cells(Ligne, 6)
    If Ligne < Target.Row Then
      Ligne = Application.Match(Target, [J:J], 0)
      Res = 0
      For Each C In Range("K5", Cells(Target.Row - 1, 11))
        Debug.Print C.Offset(, -5) & " " & C
        If C.Offset(, -5) = Proj And C.Offset(, -1) = Target Then Res = C
      Next C
        Cells(Target.Row, 11) = Res + 1
      Else
        Cells(Target.Row, 11) = 1
      End If
  End If
  Application.EnableEvents = True
End Sub

Teste.

Daniel
 

Pièces jointes

  • GED v3.xlsm
    730.9 KB · Affichages: 2

Lubé

XLDnaute Nouveau
Merci Danielco !

Je viens de prendre connaissance de ta réponse avec grand plaisir. Cela correspond à ce que je souhaitais. Merci, merci, merci. Je ne comprends malheureusement pas toutes les lignes, je serais sans doute de retour ici pour la maintenance !
 

Lubé

XLDnaute Nouveau
Oups, j'ai parlé trop vite.

La version, en [L:L], ne se génère pas (PJ).

Est il possible d'ajouter des commentaires pour expliquer ce que fait chaque boucle afin de m'aider à comprendre.

Peut-on éviter d'avoir à valider par entrer les cellules pour que la macro fonctionne ? En utilisant uniquement le menu déroulant, sans la case entrée, il n'y a pas d'affichage .

Merci.
 

Pièces jointes

  • GED_V3_17_09_2020.xlsm
    730.7 KB · Affichages: 7

Lubé

XLDnaute Nouveau
Je reprends, plus clairement.

Pour ce qui ne fonctionne pas :
Lorsque le couple intitulé du document (colonne C) + intitulé projet (colonne F) n'existe pas sur une même ligne, la version doit être : "00". Dans le cas où ce couple est existant, la version (colonne L) doit s'incrémenter.

Pour la remarque sur le menu déroulant :
Je souhaitais savoir si on pouvais éviter de de passer par la validation des choix en tapant entrée pour faire fonctionner la macro. Cela ne remet pas en cause le fonctionnement. C'est pour du "plus" concernant le confort des utilisateurs. Sans ça, c'est déjà très très bien !

Encore merci pour l'aide apportée !
 

danielco

XLDnaute Accro
J'espère que j'ai bien compris... Teste :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim Ligne As Variant, Res As Variant, C As Range, Proj As String
  If Target.Count > 1 Then Exit Sub
  'désactive l'activation des macros sur les évènements
  Application.EnableEvents = False
  'si la colonne modifiée est la colonne F
  If Target.Column = 6 Then
    '"Ligne" est la lgne de la première occureence de l'intitulé de projet
    Ligne = Application.Match(Target, [F:F], 0)
    'si "ligne" ets inférieure à la ligne de la cellule modifiée
    If Ligne < Target.Row Then
      'le code projet est égal au code projet de "ligne"
      Target.Offset(, 2) = Cells(Ligne, 8)
    'sinon
    Else
      'le code projet est égal au maximum de la colonne H + 1
      Target.Offset(, 2) = Application.Max(Range("H5", Cells(Target.Row - 1, 8))) + 1
    End If
  'si la colonne modifiée est la colonne J
  ElseIf Target.Column = 10 Then
    'recherche de la première ligne ayant le même intitulé de projet
    Ligne = Application.Match(Cells(Target.Row, 6), [F:F], 0)
    '"Proj" est 'lintitulé de projet
    Proj = Cells(Ligne, 6)
    'si "ligne" est inférieure à la ligne de la cellule modifiée
    If Ligne < Target.Row Then
      'on initialise la variable Res
      Res = 0
      'Boucle sur chaque cellule de la colonne K
      For Each C In Range("K5", Cells(Target.Row - 1, 11))
        'si l'intitulé de projet de la ligne = Proj" et que le type de documeent
        'est égal à celui qui vient d'être saisi, on met le n° de versiondans "Res"
        If C.Offset(, -5) = Proj And C.Offset(, -1) = Target Then Res = C.Offset(, 1)
      Next C
      'le numéro de version est égal à "res" +1
      Cells(Target.Row, 12) = Res + 1
      'Sinon
      Else
        'le numéro de version est égal à 0
        Cells(Target.Row, 12) = 0
      End If
  End If
  'résactive l'activation des macros sur les évènements
  Application.EnableEvents = True
End Sub

Sinon, la touche "Entrée" ne permet pas de déclencher la macro. On peut par contre détecte un double clic. Il resterait à savoir quoi faire dans ce cas.

Daniel
 

Lubé

XLDnaute Nouveau
Retour sur le test :

1 Lorsque je double clic sur une case projet, col F, le code projet s'incrémente, col H, même si je ne modifie pas la col F. Il est nécessaire que la référence reste fixe lorsque tout les critères de la ligne sont rentrer.

2 Dans le tableau joint, tu peux voir que le code doc , col k, ne s'inscrit pas. Est ce parce que j'ai utilisé ctrl+B pour les valeurs du reste de la ligne ?

3 La version n'évolue pas au fil des renseignements

Je me demande si des formules ne permettrait pas de faire ce que je veux finalement ! Merci infiniment pour ton temps.
 

Pièces jointes

  • GED_V4_18_09_2020.xlsm
    731.7 KB · Affichages: 5

danielco

XLDnaute Accro
1. le double clic ne fonctionne paas, je n'ai rien fait de ce côté. J'avais bien écrit " Il resterait à savoir quoi faire dans ce cas. ".
2. J'ai modifié le code pour incrémenter la colonne L puisque tu as écrit :
Dans le cas où ce couple est existant, la version (colonne L) doit s'incrémenter.
3. Quelle version ? Celle de la colonne L ?

Si tu t'en sors avec ds formules, tant mieux.

Daniel
 

Lubé

XLDnaute Nouveau
3. oui, la version, dans la col L ne s'incrémente pas.

1. Lors du test, le double clic a fait s'incrémenter la col F, or il ne faut pas. Voilà pourquoi je parle de double-clic. Ca ne faisait pas référence à ta remarque pour faire évoluer le code. En utilisant les termes "déclencher" la macro, je pense à "l'affichage à l'écran". En utilisant le ctrl+B pour les valeur à renseigner de la ligne, l'affichage en col H, K et L reste vide. Comment faire pour avoir un affichage en temps réel ? Est ce que je n'ai pas copier le code au bon endroit ?
 

Discussions similaires

Statistiques des forums

Discussions
315 097
Messages
2 116 186
Membres
112 679
dernier inscrit
Yupanki