Partager via

Numérotation

Anonyme
2023-02-09T19:09:51+00:00

Bonjour,

Ceci est un fichier avec des catégories numérotées dans la colonne A. Dans chaque catégorie, on peut insérer des sous-catégories.

Exemple :

Pour ajouter une catégorie en A :

Double-clic dans la colonne B = une ligne s'insère en dessous et se numérote dans la colonne A.

Pour ajouter une sous-catégorie à la catégorie 1 :

Double-clic dans la colonne D = une ligne s'insère en dessous et se numérote dans la colonne C, fusion des lignes du bloc 1 en B et A.

En A et C, ça fonctionne.

J'aimerais maintenant pouvoir ajouter des sous-catégories aux colonnes E et G

Double-clic dans la colonne F= une ligne s'insère en dessous et se numérote dans la **** E, fusion des lignes du bloc en D, C, B, A

Double-clic dans la colonne H= une ligne s'insère en dessous et se numérote dans la colonne G, fusion des lignes du bloc en F, E D, C, B, A.

Pour que ce soit plus facile à visualiser, voici le lien du fichier : https://www.cjoint.com/c/MBjsVeAa26I 

Merci !

Sylvie Catherine

Microsoft 365 et Office | Excel | Autres | Autres

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2024-02-09T14:49:02+00:00

Le problème vient de la mise à jours de calculs (je n'ai pas regardé quels sont ces calculs)

Ajoutes sous "On Error GoTo erreur"

Application.Calculation = xlManual

et au dessus de Exit Sub dans le "Fin :"

Application.Calculation = xlCalculationAutomatic

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-03-14T15:21:27+00:00

Bonjour Sylvie,

Je pense que le bug vient de l'interface chaise>clavier (vielle blague d'informaticien 😁)

Tu as activé la protection manuellement en oubliant de cocher la case pour autoriser les filtres.

Donc les filtres ne fonctionnes pas.

Si tu écrits dans le tableau (en validant la saisie) , le code Worksheet_Change lui va bien autoriser le filtre. Donc après cette saisie les filtres fonctionnent.

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-03-07T19:25:52+00:00

En faisant ainsi tu empêches le clic droit mais il n'y a pas de méthodes parfaites.

Petite remarque : tu ne contrôles pas correctement la valeur de Target selon moi.

  • Partout sur le feuille ta procédure empêche le clic droit et fait apparaitre le message
  • L'utilisateur peut supprimer les lignes 1 à 3 et donc tout le tableau.

Je te propose pour le clic droit :

Lignes 1 à 4 => Inactif

Lignes du tableau de 5 à la fin du tableau => Suppression de la ligne ou du groupe de lignes (si cellules groupées)

Lignes sous le tableau => Inactif

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 

    Dim msg As String, title As String, Response As String 

    Dim style As Integer 

    Cancel = True 

    If (Target.Row > 4) And (Target.Row <= Range("H3").End(xlDown).Row) Then 

        Application.ScreenUpdating = False 

        msg = "Désirez-vous supprimer cette ligne?" 

        style = vbYesNo + vbCritical + vbDefaultButton2 

        title = "Sequence de Suppression" 

        Response = MsgBox(msg, style, title) 

        If Response = vbYes Then 

            ActiveSheet.Unprotect "abc" 

            Target.EntireRow.Delete 

            'ActiveSheet.Protect "abc" 

        End If 

    End If 

End Sub

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-03-07T18:36:48+00:00

Il y a un problème avec ta procédure de suppression (Worksheet_BeforeRightClick) qui empêche la renumérotation des lignes

Ne désactive pas les évènements (Application.EnableEvents = False / True) sauf s'il y a une raison spécifique que je n'aurais pas vu (à ce moment là il faudra faire d'autres modifications).

Dans le fichier ci-joint je n'ai pas fait la modification.

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-03-07T18:18:50+00:00

Bonsoir Sylvie,

Dans ctrlNumerotation()

        ...

        Do While intCptLigne &lt;= Range("A10000").End(xlUp).Offset(1, 0).Row - 1 

            If intCptCol = 1 Then 

                intCptValeur = intCptValeur + 1 

                Cells(intCptLigne, 1).MergeArea.Cells(1) = intCptValeur 

                intCptLigne = intCptLigne + Cells(intCptLigne, 1).MergeArea.Cells.Count  

            ' Nouvelles lignes 

            ElseIf intCptCol = 8 Then 

                If Cells(intCptLigne, intCptColPrefix).Value &lt;&gt; 0 Then 

                    Cells(intCptLigne, intCptCol) = 1 

                Else 

                    Cells(intCptLigne, intCptCol) = Cells(intCptLigne - 1, intCptCol) + 1 

                End If 

                intCptLigne = intCptLigne + 1 

            ' Fin nouvelles lignes                  

          Else

           ....

https://cjoint.com/c/MChsrywUsDA

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-02-24T08:06:38+00:00

Bonjour Sylvie,

Joint le fichier ,débutant les numérotations à 1, supportant la suppression des lignes (même la 1ere !=> régénérée automatiquement)

On peut aussi insérer des lignes au dessus de la 1ere ! =>double clic sur la ligne d'étiquette (ligne 3) dans les "bonnes colonnes"

J'ai complètement changé la méthodologie (simplification) du code d'où sa réduction de volume

La bordure ne se fait bas jusqu'au bout car des étiquettes de colonnes sont vides (colonne masquées)=> un espace serait suffisant

https://www.cjoint.com/c/MByh3cuoSZA

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-02-22T20:10:41+00:00

Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range) 

    Target.EntireRow.AutoFit 

End Sub

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-02-17T15:08:06+00:00

Bonjour Sylvie,

Ajoute la ligne rouge (non testé) :

Target.Offset(1, 0).EntireRow.Insert

Target.Offset(1, 0).Value = Target.Value

Target.Offset(1, 1).Value = Target.Offset(0, 1).Value

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-02-16T19:04:59+00:00

Bonsoir

Je crois qu'un admin est passé par là et a fusionné un peu trop vite les messages (quel âne celui là 😁) mais bon, vu le montant de leur grasse rémunération pour le job on va passer !

Je te propose

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Column = 1 And Target <> "" Then

ActiveSheet.Unprotect "scl" 

Application.EnableEvents = False 

Cancel = True 

~~'Rows(Target.Offset(1).Row).Insert~~ 

**Target.Offset(1, 0).EntireRow.Insert** 

**Target.Offset(1, 0).Value = Target.Value** 

**Target.Offset(1, 3).Formula2R1C1 = "=RC[-2]+RC[-1]"** 

**Target.Offset(1, 5).Formula2R1C1 = "=RC[-2]-RC[-1]"** 

'Set Target = Target.Resize(Target.Cells.Count + 1) 

Application.EnableEvents = True 

'Cells(Target.Row, 12).Copy Cells(Target.Row, 12).Offset(Target.Cells.Count - 1) 

End If

End Sub

J'ai mis des lignes en commentaire ne sachant pas trop à quoi elles servent

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-02-15T20:49:11+00:00

Je commençais à me "perdre" dans les indices et n° de colonne dans le code (numérotation des colonnes commence à 1, celle des variables tableau à 0 !) donc j'ai fait pas mal de changements pour simplifier.

Avec Option Base 1 en début de code **** (l'indice des variables tableau commence à 1 et plus à 0), **** cela a permis d'éviter plein de décalages d'indice (des +/- 1).

J'ai aussi changé le calcul des préfixes (boucles inutiles).

Qui dit changements, dit nouveaux bugs =>Teste bien ce code !

https://cjoint.com/c/MBpuGRW811A

Bonne soirée

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-02-13T23:30:45+00:00

Apres de l'insertion de la ligne vide me semble pas mal

' Insertion d'une ligne en dessous 

**Rows(intLigneT + 1).Insert** 

Cells(intLigneT + 1, 15).FormulaLocal = "=SI($M" & intLigneT + 1 & "="""";"""";" & \_ 

    "SI($N" & intLigneT + 1 & "="""";"""";SI($M" & intLigneT + 1 & "&gt;$O$1;""Non débuté"";" & \_ 

    "SI($N" & intLigneT + 1 & "&lt;$O$1;""En retard"";""En cours""))))"

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

Hecatonchire 53,780 Points de réputation Modérateur bénévole
2023-02-13T14:57:46+00:00

Bonjour Sylvie,

Pour "les boucles" dans mon code, c'est le fait que j'ai privilégié l'automatisation de celui-ci afin d'éviter des répétitions. C'est le même code qui se réexécute, peu importe le nombre de colonnes de catégorie (seule la 1ère génère des cas particuliers)

Ainsi il devrait être fonctionnel pour plusieurs dizaines de colonnes de sous-catégories (testé à 6 en changeant la constante intNbColCateg en début de code)

Mais la logique du traitement est peut-être plus difficile à suivre.

J'ai mis pas des commentaires pour aider.

https://cjoint.com/c/MBno0yw38TA

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

DanielCo 107.7K Points de réputation
2023-02-10T15:18:21+00:00

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

DanielCo 107.7K Points de réputation
2023-02-10T13:26:19+00:00

Peut-être (j'ai les yeux qui se croisent, à force) :

https://www.cjoint.com/c/MBknzhnVOA6

Daniel

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

58 réponses supplémentaires

  1. Hecatonchire 53,780 Points de réputation Modérateur bénévole
    2023-02-09T19:44:54+00:00

    Bonjour,

    Le double-clic en colonne B si la cellule est fusionnée n'insère pas de ligne en A mais en C ! Normal ?

    Le tableau, comme ça, me fait penser que l'on va écrire en colonne B/D/F. Certains utilisateurs ont l'habitude de double-cliquer pour passer en mode saisie, ce qui va déclencher l'insertion de ligne !

    J'aurais plus choisi les colonnes "numérotées" pour le double clic (A/C/E...)

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire