Insertion de lignes dans un tableau en tenant compte des semaines

Bonjour Dan,

J'ai remplacé xlCenter par xlLeft dans le codage.

Bonjour

J'ai remplacé xlCenter par xlLeft dans le codage.

Ok mais ce que je voudrais comprendre aussi, c'est si cette option de mettre d'aligner à gauche concerne uniquement la couleur grise ou pas. A moins que j'ai mal compris il me semble que vous vouliez toujours l'information placée à gauche plutôt que centrée sur les cellules fusionnées

C'est dans tous les cas (fond coloré ou grisé)

Pensez-vous que ma demande de ce samedi soit possible ?
Après cela, je pense que nous touchons au but

Allez dans le module 2 :
1. remplacez la sub planning par celle ci-dessous:

Sub planning()
Dim i As Integer

Feuil1.Unprotect
If lig > 0 Then
    With Range(Cells(lig, 24), Cells(lig, 500))
        .UnMerge
        .ClearContents
        .Interior.Color = xlNone
    End With
    If WorksheetFunction.CountA(Range("Q" & lig & ":V" & lig)) = 6 Then

        Call maj(lig)

        For i = 1 To Range("T" & lig) / 0.5
            ActiveSheet.Unprotect
            Cells(lig, i + 23).Interior.Color = coul
        Next i

        Cells(lig, 24) = ref
        Range(Cells(lig, 24), Cells(lig, i + 22)).HorizontalAlignment = xlLeft

    End If
    lig = 0 
Else:
    Dim j As Integer

    For i = 5 To Cells(Rows.Count, 2).End(xlUp).Row
        With Range(Cells(i, 24), Cells(i, 500))
            .ClearContents
            .Interior.Color = xlNone
        End With

        If WorksheetFunction.CountA(Range("Q" & i & ":V" & i)) = 6 Then
            Call maj(i)
            For j = 1 To Range("T" & i) / 0.5
                Cells(i, j + 23).Interior.Color = coul
            Next j

            Cells(i, 24) = ref
            Range(Cells(i, 24), Cells(i, j + 22)).HorizontalAlignment = xlLeft
        End If
    Next i

End If
ref = vbNullString
coul = vbNullString
'Feuil1.Protect
End Sub

2. remplacez la sub maj par ceci

Sub maj(i As Integer)
Dim refdem As String, refpart As String, refdate As String

Range("C" & i) = Replace(Range("C" & i), "-", "_") 'changer tiret par souligne
refdem = Right(Range("C" & i).Value, Len(Range("C" & i).Value) - InStrRev(Range("C" & i).Value, "_")) 'ref essai
refpart = Range("F" & i).Value 'ref piece
refdate = Format(Range("V" & i), "dd/mm") 'refdate

If UCase(Range("R" & i)) = "T" Or UCase(Range("R" & i)) = "A" Then
    ref = refdem
    coul = RGB(217, 217, 217)
Else:
    ref = refdem & " - " & refpart & " - " & refdate
    coul = Range("B" & i).Interior.Color
End If
End Sub

NB : ne supprimez pas les déclarations de variables (dim,.....) en entête du module bien entendu

C'est magique tout de même le VBA

C'est magique tout de même le VBA

Oui si on ne va pas trop loin car on a aussi vite une "usine à gaz", si l'on complique trop. Ma remarque étant générale et pas dédiée à votre fichier

Cordialement

Une dernière petite chose avant de conclure le sujet

En colonne C, nous avions demandé de mettre systématiquement des tirés du bas "_" (exemple 2024_01_555)
Peut-on faire de même en colonne E mais cette fois-ci, que le tiré du 6 "-" (exemple 2023-458) ?

Si jamais, j'ai une future demande, dois-je ouvrir un nouveau sujet ou peut-on reposter sur le même ?

Merci Dan

Peut-on faire de même en colonne E mais cette fois-ci, que le tiré du 6 "-" (exemple 2023-458) ?

Oui, il vous suffit d'aller dans le code Sub maj(i as integer) et de rajoutez cette ligne juste en dessous de la ligne Range("C" & i)=....

Range("E" & i) = Replace(Range("E" & i), "-", "_") 'changer tiret par souligne

Si jamais, j'ai une future demande, dois-je ouvrir un nouveau sujet ou peut-on reposter sur le même ?

Si cela concerne le même sujet, autant rester sur ce fil. De cette sorte, je serai averti.

Crdlt

C'est ajouté, j'ai juste inversé le souligné par un tiré

Range("E" & i) = Replace(Range("E" & i), "_", "--") 'changer tiret par souligne

Etant en fin d'année, mes équipes ont anticipé pour la nouvelle année 2024 le temps de mettre en place ce nouveau tableau.
par contre, en rentrant toutes ces lignes j'ai remarqué une chose.

Il arrive parfois que nous ayons pas systématiquement les n° des DEM de la colonne E (exemple 2024_1_102) et donc en attendant nous avons ceci : 2024_xxx.
Le problème et qu'au moment ou nous recevons le n° définitif (dans mon exemple 1_102) et que les utilisateurs veulent effectuer la modification, il se retrouvent avec autant de 2024_xxx qu'il y en a de ligne rentré sans n° définitif.
Dans mon cas, ci-dessous, peu importe ce qu'il choisissent en 2024_xxx, ils peuvent uniquement modifier la ligne 11

capture

Afin de palier à ce problème, est-il possible de modifier la liste et de ne plus avoir les n° des DEM mais plutôt les n° des lignes ?
Merci

Afin de palier à ce problème, est-il possible de modifier la liste et de ne plus avoir les n° des DEM mais plutôt les n° des lignes ?

Pour faire simple, si je reprends votre exemple on peut faire en sorte que le code lit 2024-XXX --> la combobox vous donnera ceci --> 2024-XXX-ligne 8
Si vous n'avez plus de X, la combox reprend la valeur dans la cellule comme prévu initialement

Il faudrait que je puisse tester votre proposition

Il faudrait que je puisse tester votre proposition

Allez dans l"USF - code Private Sub CommandButton1_Click() 'ajout ou modification ligne
Après la ligne ESLE, remplacez

.Cells(lig, 3) = BoxDem.Text

par ceci

If BoxDem.Text Like "*X*" Then
    .Cells(lig, 3) = BoxDem.Text & "-L" & lig
Else: .Cells(lig, 3) = BoxDem.Text
End If

Cela va ajouter un L avec le numéro de ligne utilisée lors de l'ajout d'une nouvelle donnée si vous utilisez u n "X" dans la référence. exemple : pour 2024-XXX, le code vous mettra 2024-XXX-L8 (8 étant le numéro de ligne)

J'ai intégré votre code et ajouter une nouvelle ligne après qu'il y en est 30 autres déjà insérées.
Il m'a bien créé un numéro mais avec 31(2024_1_xxx_L31).
Il faudrait qu'il m'incrémente ce n° une fois le tri effectué.

Est-ce que l'on peut revoir en automatique l'ensemble des n° de DEM créé à chaque nouvelles lignes ?

Vu que j'ai déjà une trentaine de créée, peut-on faire le rétroactif ?

Il faudrait qu'il m'incrémente ce n° une fois le tri effectué.

waouh ! là cela devient compliqué !! Je n'avais pas pensé au tri. Donc ma solution ne convient pas car on risque d'avoir un doublons

Le mieux il me semble serait de ne pas utiliser le numéro de ligne mais plutôt le nombre de lignes que le tableau contient
Exemple : si vous avez 8 lignes, vous auriez une ref 2024-XXX-8
Si vous ajoutez trois références correctes 2024-1-555, etc... puis une nouvelle référence 2024-XXX, le code mettrait 2024-XXX-13

Cela pourrait fonctionner si vous ne supprimez jamais de lignes évidemment car le cas échéant on pourrait avoir un doublon

Vu que j'ai déjà une trentaine de créée, peut-on faire le rétroactif ?

Il faudrait que je vois la structure de ce que vous avez créé. Est-ce la photo montrée avant ?

Est-ce que l'on peut revoir en automatique l'ensemble des n° de DEM créé à chaque nouvelles lignes ?

Vous parlez des numéros comprenant de X ??

Bonjour,

Effectivement, cela se complique

Il faudrait que je vois la structure de ce que vous avez créé. Est-ce la photo montrée avant ?

Je vous attache une nouvelle vue.

capture

Le mieux il me semble serait de ne pas utiliser le numéro de ligne mais plutôt le nombre de lignes que le tableau contient

Exemple : si vous avez 8 lignes, vous auriez une ref 2024-XXX-8

Si vous ajoutez trois références correctes 2024-1-555, etc... puis une nouvelle référence 2024-XXX, le code mettrait 2024-XXX-13

Cela pourrait fonctionner si vous ne supprimez jamais de lignes évidemment car le cas échéant on pourrait avoir un doublon

Oui, faire simplement une incrémentation.

Dans ce tableau, nous n'avons pas à supprimer de ligne.
Pour info, une fois qu'une ligne est clôturée, nous indiquons un "T" en colonne R
Si une ligne est annulée, on insère un "A" dans cette même colonne.
Puis dans les 2 cas, nous masquons ces lignes afin d'avoir une meilleur visibilité.

Bonjour

Essayez en ajoutant ce code

Sub Renumerotation() 'renumeroter si mention de X dans numero de demande
Dim i As Byte, newnum As Byte, oldnum As Byte

With Feuil1
    For i = 5 To .Range("C" & Rows.Count).End(xlUp).Row
        .Range("C" & i) = Replace(.Range("C" & i), "-", "_") 'remplace les tirets par souligne

        If UCase(.Range("C" & i)) Like "*X*" Then 'test si X dans le numero
            oldnum = Right(Range("C" & i).Value, Len(Range("C" & i).Value) - InStrRev(Range("C" & i).Value, "_")) 'ancien numero
            newnum = newnum + 1 'nouveau numero
            If IsNumeric(oldnum) Then 'verifier si oldnum est numerique
                .Range("C" & i) = Replace(.Range("C" & i).Value, oldnum, newnum)
            Else: .Range("C" & i) = .Range("C" & i) & "-" & newnum
            End If
        End If
    Next i

End With
End Sub

Après vous l'exécutez seul pour voir si cela fonctionne.
Le code va renuméroter chaque fois qu'il trouve un X dans le numéro en colonne C.
Le code fonctionne si vous n'avez pas plus de 256 lignes. Si c'est le cas, dites moi

A quel niveau dois-je insérer ce code ?

J'aurai beaucoup plus de 256 lignes

A quel niveau dois-je insérer ce code ?

Pour l'instant, mettez-le dans un module existant ou un nouveau.
Pour le test, cliquez sur sub renumeroter puis appuyez sur la touche F5
Après il faudra savoir si vous voulez l'exécuter seul quand vous le désirez ou pas

J'aurai beaucoup plus de 256 lignes

Mettez les déclarations comme ceci

Dim i As integer
Dim newnum As Byte, oldnum As Byte

vous n'aurez probablement jamais de numéro allant jusque 256 dans le num 2024-XXX, je suppose

Là, vous m'avez perdu

capture

Je ne sais rien vous dire avec le message

Cliquez sur débogage pour comprendre la ligne à problème car de mon coté je n'ai aucun souci

presse papier02
Rechercher des sujets similaires à "insertion lignes tableau tenant compte semaines"