Incrémenter code alpha numérique automatique
Bonjour à tous. Je suis débutant en VBA.
Je vous envoie un fragment de fichier de planification pour lequel je voudrais mettre le code des tâches (colonne A) sous les lignes de façon automatique car le fichier réel renferme un nombre important de lignes similaires.
Les tâches sont identifiées par les lignes dont la colonne C est vide
J'ai imaginé l'algorithme suivant:
Si la cellule CX est non vide copy la cellule AX de la même ligne et colle dans AX+1 et concaténer avec ".1"
Incrémente ensuite .2; .3; ... tant que la cellule "C" de la même ligne est vide, jusqu'à rencontrer une cellule non vide de la colonne A
Si tu rencontres une cellule non vide dans la colonne A, Copie la cellule; décale d'une ligne vers le bas, Colle et concaténer avec ".1"
Incrémente ensuite .2; .3 .... tant que la cellule "C" de la même ligne est vide, jusqu'à rencontrer une cellule non vide de la colonne A
Arrête lorsque tu rencontres la cellule qui contient "Total" .
J'ai joint le fichier initial (fichier planning) et le résultat que je souhaite avoir( fichier résultat)
J'ai commencé ceci mais la phase pour incrémenter m'est difficile car je ne sais pas indiquer comment s'arrêter si la cellule n'est pas vide et reprendre.
Sub incrémentercode()
Sheets (feuil1).Select
Dim i As Integer
Do While Not IsEmpty(Cells(i, 3))
Cells(i, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
Cells(i + 1, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells(i + 1, 1) = Cells(i + 1, 1) & ".1"
Loop
Do While IsEmpty (Cells(i, 3))
Cells(i, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Si quelqu'un peut m'aider je suis preneur. Merci d'avance.
Bonjour,
à tester,
Sub incrémentercode()
deb = Cells(2, 1)
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row - 1
n = n + 1
If Cells(i, 1) = "" Then
Cells(i, 1) = deb & "." & n
Else
deb = Cells(i, 1)
n = 0
End If
Next i
End SubBonsoir i20100
C'est génial la macro que tu as proposée. Elle a bien marché et je te remercie pour la promptitude avec laquelle ta réaction est intervenue. C'est un véritable coup de pouce!
Seulement je souhaite que le code prenne en compte une condition supplémentaire/complémentaire avec ta gratitude et celle des autres membres.
Au fait, le code comporte l'arborescence suivante déclinées en niveau
Objectif1
Résultat1
Action 1
Activité
Tâche
Tâche
Action 2
Activité
Tâche
Tâche
....
Résultat2
Action
Activités
Tâche
Tâche
Objectif2
Les objectifs, résultats et actions ne sont pas nombreux et leurs codes sont écrits manuellement sans problèmes (prédéfinis).
_Chaque autre niveau (activité, tâche) porte un code alphanumérique (identifiant) que je souhaite réaliser automatiquement.
_Les codes sont mis dans la colonne A
_les niveaux sont dans la colonne B
_les lignes des tâches ne comportent pas de valeur dans la colonne C (on peut exploiter cette propriété pour générer leur code par une condition dans la macro)
_Les activités ont de valeur non nulle dans la colonne C, leur code est à générer dans la colonne A. Donc la ligne des activités est initialement vide en A (ce qui n'est pas le cas dans le fichier Planning que j'avais envoyé) mais pas en C
_ Les lignes des actions sont remplies pour les colonnes A et C initialement
_Pour passer d'un niveau à un autre, il faut concaténer le code du niveau supérieur avec ".1" et incrémenter vers le bas ".2" ".3" etc selon le nombre d'éléments du même niveau avant de trouver un niveau supérieur.
_Si on rencontre un niveau supérieur, on arrête l'incrémentation et on fait +1 à la partie numérique du code précédent de ce même
Au total, je voudrais de l'aide pour générer automatiquement les codes des activités et des tâches. Je suis preneur pour deux macros séparées (une pour les activités et une pour les tâches) si c'est la solution puisque la macro pour les tâches fonctionne parfaitement si on écrit les codes activités au préalable (encore merci). J'ai joint deux fichiers similaires aux précédents à ma requête.
D'avance merci à tous. Vous êtes super.
re,
à tester,
Sub incrémentercode()
Dim deb1 As String, deb2 As String, niveau As String
Dim i As Long, a As Integer, t As Integer
deb1 = Cells(5, 1)
For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row - 1
If Cells(i, 1) = "" Then
niveau = Cells(i, "D")
Select Case niveau
Case "Activité": a = a + 1
Cells(i, 1) = deb1 & "." & a
deb2 = Cells(i, 1)
t = 0
Case "Tâche": t = t + 1
Cells(i, 1) = deb2 & "." & t
End Select
Else
deb1 = Cells(i, 1)
a = 0
End If
Next i
End SubBonjour i20100
Encore une fois merci. ça marche mais la colonne D ne fait pas partie normalement du fichier. Je l'ai remplie juste pour expliquer l'arborescence. Je constate que tout la macro a été bâtie sur cette colonne. Est ce qu'on peut réaliser le code sans prendre appui sur cette colonne?
Encore merci pour l'appui.
re,
j'ai fais le test avec le montant de la colonne C (<> 0)
Sub incrémentercode()
Dim deb1 As String, deb2 As String, niveau As String
Dim i As Long, a As Integer, t As Integer
deb1 = Cells(5, 1)
For i = 6 To Cells(Rows.Count, 1).End(xlUp).Row - 1
If Cells(i, 1) = "" Then
If Cells(i, 3) <> 0 Then niveau = "Activité" Else niveau = "Tâche"
Select Case niveau
Case "Activité": a = a + 1
Cells(i, 1) = deb1 & "." & a
deb2 = Cells(i, 1)
t = 0
Case "Tâche": t = t + 1
Cells(i, 1) = deb2 & "." & t
End Select
Else
deb1 = Cells(i, 1)
a = 0
End If
Next i
End SubCher i20100
Euréka, tu as trouvé!!! ça marche à 200%.
Infininiment merci.
Dis moi comment apprendre et exceller avec le langage VBA?
re,
Merci pour ce retour, j 'suis bien contente que tout fonctionne,
Dis moi comment apprendre et exceller avec le langage VBA?c'est la pratique!
je pense qu'en exécutant de petite macro en mode pas à pas on voie mieux ce qui se passe,
on peut déplacer le curseur sur les variables pour voir leur valeur et ça améliore la compréhension.
Merci beaucoup IP20100 (@Isabelle?).
J'en ferai bon usage.