XL 2013 Ajouter une variable dans un code

luke3300

XLDnaute Impliqué
Bonjour à tous,

Le code ci-dessous me sert à effectuer une synthèse sur des tâches effectuées.
Actuellement, il indique automatiquement un "1" en regard des noms si toutes les tâches anciennes reprises (par colonne) dans les cellules F10 à DA25 sont effectuées.
J'aimerais pouvoir l'améliorer en le faisant ajouter un "2" à partir du moment où 1 seule des tâches par colonne est effectuée.
Par exemple, dans le fichier joint, si Jojo 1 en onglet "New" fait (d'après l'onglet "D") les tâches x03 et x45 qui composent la nouvelle tâche X03, le code n'indiquera rien en cellule H26 parce que Jojo1 ne connaît pas la tâche x32 qui fait partie aussi de la nouvelle X03. J'aimerais qu'il indique alors un "2" pour me permettre de voir qu'une partie du nouveau X03 est faite.


Private Sub CommandButton2_Click()

Dim nom As Integer, tachesNouvelles As Integer, tacheAncienne As Range
Dim colTache As Range, ligneNom As Range, estCapable As Integer
For nom = 26 To 125 'Les nombres sont à modifier suivant la 1ère et la dernière cellule contenant un nom'
For tachesNouvelles = 6 To 106
estCapable = 1
Set tacheAncienne = ThisWorkbook.Sheets("New").Cells(10, tachesNouvelles)
With ThisWorkbook.Sheets("D")
While tacheAncienne.Row < 17
If tacheAncienne.Value <> vbNullString Then
Set colTache = .Rows(9).Find(what:=tacheAncienne.Value, LookIn:=xlValues, lookat:=xlWhole)
Set ligneNom = .Columns(4).Find(what:=ThisWorkbook.Sheets("New").Range("D" & nom).Value, LookIn:=xlValues, lookat:=xlWhole) 'La colonne "4" est la colonne contenant les noms'
If ligneNom Is Nothing Then
estCapable = 0
Else
If Not colTache Is Nothing Then
estCapable = estCapable * IIf(.Cells(ligneNom.Row, colTache.Column).Value = 1, 1, 0)
End If
End If
End If
Set tacheAncienne = tacheAncienne.Offset(1, 0)
Wend
End With
If ThisWorkbook.Sheets("New").Cells(10, tachesNouvelles).Value = vbNullString Then estCapable = 0
ThisWorkbook.Sheets("New").Cells(nom, tachesNouvelles).Value = IIf(estCapable = 1, 1, "")
Next tachesNouvelles
Next nom
End Sub


Je joint le fichier pour plus de détails et excellente journée à tous et toutes.
 

Pièces jointes

  • TestFlex_1.xlsm
    155.5 KB · Affichages: 53
  • TestFlex_1.xlsm
    155.5 KB · Affichages: 54

ROGER2327

XLDnaute Barbatruc
Re : Ajouter une variable dans un code

Bonjour luke3300.


Un essai :
Code:
Private Sub CommandButton2_Click()

Dim nom As Integer, tachesNouvelles As Integer, tacheAncienne As Range
Dim colTache As Range, ligneNom As Range, estCapable As Integer, estPartiellementCapable As Integer
For nom = 26 To 125  'Les nombres sont à modifier suivant la 1ère et la dernière cellule contenant un nom'
    For tachesNouvelles = 6 To 106  'Les chiffres et nombres sont à modifier suivant la 1ère et la dernière colonne contenant les tâches'
        estCapable = 1
        estPartiellementCapable = 0
        Set tacheAncienne = ThisWorkbook.Sheets("New").Cells(10, tachesNouvelles)  'le chiffre/nombre après ".Cells(" est à modifier suivant la 1ère ligne contenant les anciennes tâches comprises dans les nouvelles tâches'
        With ThisWorkbook.Sheets("D")
            While tacheAncienne.Row < 17
                If tacheAncienne.Value <> vbNullString Then
                    Set colTache = .Rows(9).Find(what:=tacheAncienne.Value, LookIn:=xlValues, lookat:=xlWhole)  'le "9" est le numéro de la ligne contenant les tâches'
                    Set ligneNom = .Columns(4).Find(what:=ThisWorkbook.Sheets("New").Range("D" & nom).Value, LookIn:=xlValues, lookat:=xlWhole)  'La colonne "4" est la colonne contenant les noms'
                    If ligneNom Is Nothing Then
                    estCapable = 0
                    Else
                    If Not colTache Is Nothing Then
                    estCapable = estCapable * IIf(.Cells(ligneNom.Row, colTache.Column).Value = 1, 1, 0)
                    estPartiellementCapable = estPartiellementCapable + IIf(.Cells(ligneNom.Row, colTache.Column).Value = 1, 1, 0)
                    End If
                    End If
                End If
                Set tacheAncienne = tacheAncienne.Offset(1, 0)
            Wend
        End With
        If ThisWorkbook.Sheets("New").Cells(10, tachesNouvelles).Value = vbNullString Then estCapable = 0  'le chiffre/nombre après ".Cells(" est à modifier suivant la 1ère ligne contenant les anciennes tâches comprises dans les nouveaux services'
        ThisWorkbook.Sheets("New").Cells(nom, tachesNouvelles).Value = IIf(estCapable = 1, 1, IIf(estPartiellementCapable > 0, 2, "")) ' IIf(estCapable = 1, 1, "")
    Next tachesNouvelles
Next nom
End Sub


Bonne journée.


ℝOGER2327
#8218


Samedi 7 Pédale 143 (Saint Gavroche, forain - fête Suprême Quarte)
11 Ventôse An CCXXIV, 3,8077h - narcisse
2016-W09-2T09:08:19Z
 

luke3300

XLDnaute Impliqué
Re : Ajouter une variable dans un code

Bonjour Roger2327, lone-wolf,

Merci pour vos réponses.

Je viens de tester ta solution Roger2327 et cela me donne comme résultat que la macro affiche des "2" partout, même là où il n'y a pas de nom ou d'anciennes tâches de renseigné.

Je teste ce que tu proposes lone-wolf et vous dis quoi aussitôt :)
Encore merci pour votre intérêt.
Bonne journée.
 

luke3300

XLDnaute Impliqué
Re : Ajouter une variable dans un code

Roger2327, lone-wolf,

Un énorme merci!

Je viens de corriger une grossière erreur que j'avais fait en recopiant le code et c'est ce qui générait des 2 partout où il n'y avait pas de 1 à placer.

Le résultat est sublime.

J'aurais juste encore une question ... serait-il possible de voir le résultat du travail s'afficher au fur et à mesure de l'avancement?
Parce que là c'est assez déstabilisant ... on crois que c'est fini et en fait, la macro travaille en fond et donc j'ai tendance à recliquer trop vite dans Excel.

Merci et bon appétit
 

Lone-wolf

XLDnaute Barbatruc
Re : Ajouter une variable dans un code

Re luke,

fait un test avec ceci dans un nouveau classeur, voir si c'est celà que tu recherche.

Code:
Sub test()
Dim lig, col, k, x As Integer
With Feuil1
lig = .Range("f65536").End(xlUp).Row + 1
col = 5
For x = 5 To 9
col = col + 1
For k = 6 To lig
If lig < 6 Then Exit Sub
.Cells(lig, col) = .Cells(lig, col) + 1
Next
Next
End With
End Sub


A+ :cool:
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Ajouter une variable dans un code

Re,

après les next de la macro proposée ou à la fin des boucles de la macro de Roger, met:

Application.Wait (Now + TimeValue("00:00:01"))
MsgBox "Mise à jour terminée", , "LUKE": Exit Sub



A+ :cool:
 

luke3300

XLDnaute Impliqué
Re : Ajouter une variable dans un code

Bonjour à tous,

je reviens vers vous pour ce code ... afin de l'améliorer et d'améliorer son temps de travail, serait-il possible que la macro ne prenne en compte que les cellules qui sont situées dans un champs délimité verticalement par la dernière colonne dont la ligne 9 contient des données d'en-tête et horizontalement, la dernière ligne pour laquelle figure un nom?

Dans le fichier d'exemple joint, les cellules devant être prises en compte seraient de F10 à CI78 puisque j'ai un nom jusqu'en ligne 78 et une en-tête jusqu'à la colonne CI.

J'ai essayé manuellement en masquant les colonnes et les lignes non utilisées et la différence est remarquable mais j'aimerais automatisé ce processus dans le code existant en tenant en compte qu'il soit dynamique.

Merci d'avance et bonne journée à tous.
 

Pièces jointes

  • TestFlex_1.xlsm
    147.1 KB · Affichages: 38
  • TestFlex_1.xlsm
    147.1 KB · Affichages: 42
Dernière édition:

luke3300

XLDnaute Impliqué
Re : Ajouter une variable dans un code

Re,

petite précision ... le fait qu'il soit dynamique veut dire qu'il tient compte de la dernière colonne et de la dernière ligne contenant des données pour fixer le champs d'application du code.

Je sais pas si je suis clair ... enfin faites-moi signe si jamais :)

Bonne journée.
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 325
Membres
103 179
dernier inscrit
BERSEB50