VBA pour incrémenter un numéro sur des congés planning...

Christian0258

XLDnaute Accro
Bonjour à tout le forum,

Je souhaiterais, à nouveau, votre aide afin d'écrire un code pour incrémenter des CA posés sur un planning annuel en colonne...

voir fichier ...

Je vous remercie, par avance, pour le temps que vous voudrez bien vouloir m'accorder.

Bien à vous,
Christian
 

Pièces jointes

  • PlanningColonneAnnéeNumérotageCongés.zip
    40.8 KB · Affichages: 36

Paritec

XLDnaute Barbatruc
Re : VBA pour incrémenter un numéro sur des congés planning...

Bonjour Christian le forum
je vais manger et après je te fais cela, tu veux que quand tu entres CA dans la colonne C cela se numérote pas de soucis
a+
Papou:eek:
 

job75

XLDnaute Barbatruc
Re : VBA pour incrémenter un numéro sur des congés planning...

Bonjour Christian, hello Papou,

Fichier joint avec ce code :

Code:
Option Compare Text 'la casse est ignorée

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, t, ca, i&, n
Set r = [C4].Resize(Application.Match("zzz", [C:C]) - 2) 'au moins 2 éléments
If Intersect(Target, r) Is Nothing Then Exit Sub
t = r 'matrice, plus rapide
ca = [DroitCA]
For i = 1 To UBound(t)
  If Left(t(i, 1), 2) = "CA" Then n = n + 1: t(i, 1) = IIf(n > ca, "", "CA" & n)
Next
With Application: .EnableEvents = False: r = t: .EnableEvents = True: End With
End Sub
A+
 

Pièces jointes

  • PlanningColonneAnnéeNumérotageCongés(1).xls
    121.5 KB · Affichages: 48

Christian0258

XLDnaute Accro
Re : VBA pour incrémenter un numéro sur des congés planning...

Bonsoir à tout le forum, Paritec, job75,

Merci à vous pour votre aide, si précieuse.

Job75 merci beaucoup pour le boulot, c'est tout à fait ça, c'est impec.


Bien à vous,
Christian
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : VBA pour incrémenter un numéro sur des congés planning...

Bonjour Christian,

Je pensais que tu le ferais tout seul...

Code:
Option Compare Text 'la casse est ignorée

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, t, ca, rtt, i&, n1, n2
Set r = [C4].Resize(Application.Match("zzz", [C:C]) - 2) 'au moins 2 éléments
If Intersect(Target, r) Is Nothing Then Exit Sub
t = r 'matrice, plus rapide
ca = [DroitCA]: rtt = [DroitRTT]
For i = 1 To UBound(t)
  If t(i, 1) Like "CA*" Then n1 = n1 + 1: t(i, 1) = IIf(n1 > ca, "", "CA" & n1)
  If t(i, 1) Like "RTT*" Then n2 = n2 + 1: t(i, 1) = IIf(n2 > rtt, "", "RTT" & n2)
Next
Application.EnableEvents = False: r = t: Application.EnableEvents = True
End Sub
A+
 

Pièces jointes

  • PlanningColonneAnnéeNumérotageCongés(2).xls
    122.5 KB · Affichages: 34

Paritec

XLDnaute Barbatruc
Re : VBA pour incrémenter un numéro sur des congés planning...

Bonjour Christian, Job le forum
c'est la deuxième fois depuis hier, je termine de faire le code et Job répond avant!!!!
Job tu restes toujours devant ton PC ou bien ????
bref Christian a son code c'est tout ce qu'il faut
a+
Papou:eek:
 

job75

XLDnaute Barbatruc
Re : VBA pour incrémenter un numéro sur des congés planning...

Re,

Désolé Papou de t'avoir coupé l'herbe sous le pied, mais rien ne t'empêche de déposer ta solution.

Juste une remarque encore : si le tableau est filtré, il faut traiter les cellules une par une :

Code:
Option Compare Text 'la casse est ignorée

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, ca, rtt, n1, n2
Set r = [C4].Resize(Application.Match("zzz", [C:C]) - 3)
If Intersect(Target, r) Is Nothing Then Exit Sub
ca = [DroitCA]: rtt = [DroitRTT]
Application.ScreenUpdating = False
Application.EnableEvents = False
For Each r In r
  If r Like "CA*" Then n1 = n1 + 1: r = IIf(n1 > ca, "", "CA" & n1)
  If r Like "RTT*" Then n2 = n2 + 1: r = IIf(n2 > rtt, "", "RTT" & n2)
Next
Application.EnableEvents = True
End Sub
Ce n'est pas du tout un problème avec 365 ou 366 jours...

Fichier (3).

A+
 

Pièces jointes

  • PlanningColonneAnnéeNumérotageCongés(3).xls
    123.5 KB · Affichages: 42
Dernière édition:

Paritec

XLDnaute Barbatruc
Re : VBA pour incrémenter un numéro sur des congés planning...

re Christian Job:eek: le forum
non tu sais pas de problème Job, on fait des macros parce qu'on aime cela et pour rendre service.
L'essentiel et de dépanner le demandeur qui est dans la misère !!
Bon week-end à tous
Papou:eek:
 

Christian0258

XLDnaute Accro
Re : VBA pour incrémenter un numéro sur des congés planning...

Re, le forum, Papou, job75,

Merci Papou pour ton aide et pour avoir suivi le fil comme tu me l'avais promis...

Merci job75 pour la version3, effectivement sur une année je trie... (grâce à ton travail sur un autre post)

Bien à vous,
Christian
 

Christian0258

XLDnaute Accro
Re : VBA pour incrémenter un numéro sur des congés planning...

Bonjour à tout le forum,

Je reviens sur ce fil, afin de demander une adaptation...Sur ma demande initiale le numérotage des CA et RTT s'effectue sur un planning en colonne et pour une personne.
Ma demande, dans le fichier joint, porte sur un planning linéaire (20 lignes) soit 20 personnes.

Je vous remercie, par avance, pour le temps que vous voudrez bien vouloir m'accorder.

Bien amicalement,
Christian
 

Pièces jointes

  • ComptageCongésPlanningAnneeLignes20Agents.xlsm
    107.1 KB · Affichages: 25

job75

XLDnaute Barbatruc
Re : VBA pour incrémenter un numéro sur des congés planning...

Bonjour Christian,

Bravo, tu as de la suite dans les idées :)

La macro dans le fichier joint :

Code:
Option Compare Text 'la casse est ignorée

Private Sub Worksheet_Change(ByVal Target As Range)
Dim F As Worksheet, r As Range, agent$, ca%, rtt%
Dim c As Range, P As Range, t, n1%, n2%, i%
Set F = Feuil15 'à adapter, CodeName de la feuille Agents
Set r = Intersect(Target, Rows("12:" & Rows.Count), Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False
For Each r In r 'en cas d'entrées multiples
  agent = Replace(Cells(r.Row, 3), "en", "")
  ca = 0: rtt = 0
  Set c = F.Cells.Find(agent & "CA", , xlValues)
  If Not c Is Nothing Then ca = c(, 3)
  Set c = F.Cells.Find(agent & "RTT")
  If Not c Is Nothing Then rtt = c(, 3)
  Set P = Intersect(r.EntireRow, Me.UsedRange)
  t = P 'matrice, plus rapide
  n1 = 0: n2 = 0
  For i = 1 To UBound(t, 2)
    If t(1, i) Like "CA*" Then
      n1 = n1 + 1
      t(1, i) = IIf(n1 > ca, "", "CA" & n1)
    ElseIf t(1, i) Like "RTT*" Then
      n2 = n2 + 1
      t(1, i) = IIf(n2 > rtt, "", "RTT" & n2)
    End If
  Next
  Application.EnableEvents = False: P = t: Application.EnableEvents = True
Next
End Sub
A+
 

Pièces jointes

  • ComptageCongésPlanningAnneeLignes20Agents(1).xlsm
    117.1 KB · Affichages: 31
Dernière édition:

Christian0258

XLDnaute Accro
Re : VBA pour incrémenter un numéro sur des congés planning...

Re, le forum, job75,

Merci, job75, pour le boulot.
Dis-moi, sauf erreur de ma part, ça ne semble fonctionner QUE jusqu'à la ligne de l'Agent5 ?

C'est pas faut, pour "Bravo, tu as de la suite dans les idées"...lol

Bien amicalement,
Christian
 

Discussions similaires

Réponses
0
Affichages
365

Membres actuellement en ligne

Statistiques des forums

Discussions
312 164
Messages
2 085 877
Membres
103 007
dernier inscrit
salma_hayek