Projet d'organisation de tâche

Bonjour à tous,

Je me permet de vous demander votre aide concernant un petit projet VBA qui va concerner principalement la manipulation de donnée sur Excel selon certaine condition.

Je tente d'organiser les données d'un fichier Excel en un format plus approprié pour l'exploitation des résultats.

Malheureusement pour moi, même si je manie bien les formules Excel de manière général, le langage VBA est un peu compliqué à appréhender, surtout concernant la syntaxe.

Je pense que dans le code de la macro, il est possible de créer une suite d'opérations et de la répéter pour les lignes suivantes (en utilisant la boucle FOR et d'initialiser le numéro de ligne dans le variable i ).

L'idée ici est de créer automatiquement (par une macro) les colonnes B, C et F(Fichier joint à ce post), j'ai résumé mon cheminement en plusieurs étapes :

Pour la ligne 2 :

  1. selon le début de la colonne H (exigence), la colonne B devra commencer par un certain mot
    1. si la cellule H2 commence par le mot "Vérifier" alors le cellule B2 devra commencer par "Opération de contrôle : " (les codes utilisés sont écrits en gris dans la colonne L qui normalement n'apparait pas dans le fichier)
    2. si la cellule H2 commence par le mot "Graissage" alors le cellule B2 devra commencer par "Opération de maintenance"
      possible avec la condition Elself pour ajouter plusieurs conditions
  2. A la suite de cette première étape s'en suit le contenu de la cellule H2
  3. Un peu plus dure ; vient la colonne C qui doit être construite selon le numéro de la tâche (colonne G) : si le numéro de la tâche est "5988" (G2) alors il faut regarder quel est la cellule a gauche de ce numéro dans la feuille "Extraction" et copier son contenu dans la cellule C2. Si la cellule copiée contient une tolérance (±) alors reporter cette tolérance dans la cellule F2.

J'avoue que je ne connais pas la formule permettant de réaliser un tel exploit

Ce qui nous donne a peut prêt :

---------------------------------------------------------------------------------------------------------------------------------

Sub Projet
Sheets("Tache").Activate

For i = 2 To 3000

Range(i).Select

If [H2 commence par "Vérifier"] then Cells(L2C2) = Formule = CONCATENER ("Opération de contrôle : " & "Cells (L2C8))

Elself [H2 commence par "Graissage"] then Cells(L2C2) = Formule = CONCATENER ("Opération de maintenance : " & "Cells (L2C8)")

' et je continue les "Elself" pour convenir à toutes les débuts de cellule de la colonne H


Sur la feuille "Extraction" copier la cellule a gauche de celle qui correspond à la cellule G2 sur la feuille "Tache"

' il peut effectivement avoir plusieurs occurrences de ligne identique sur la feuille "Extraction" mais "1 jour" correspondra toujours à "5988"

Si la cellule contient "±" alors copier cette tolérance dans F2 (Condition IF)

Next

End Sub

---------------------------------------------------------------------------------------------------------------------------------

Je ne sais pas si cette dernière étape est réalisable avec la formule "RECHERCHEH" d'Excel, sinon est-il possible de la réaliser avec une ligne de code ? ( je ne sais vraiment pas ce qui est disponible dans les macro excel).

Je possède Excel 2016.

Je vous remercie grandement pour l'aide proposé.

17projet.xlsx (10.62 Ko)

Bonjour,

Je vous propose une solution par formules et une solution VBA, avec des fonctions personnalisées plutôt que des procédures.

J'utilise un mac donc il est possible que les caractères accentués dans le code soient corrompus. Au cas où, voici le code pour le copier/coller directement...

Function TYPE_OPERATION(Operation As String) As String

Dim liste(), corresp(), i%

'!!! les items 1 à 5 (enfin 0 à 4 car tableaux dynamiques en base 0) de chaque tableau sont liés (Examen -> Test, ...)
liste = Array("Examen", "Contrôle", "Graissage", "Nettoyage", "Vérifier")
corresp = Array("Test", "Observation", "Opération de maintenance", "Nettoyage", "Opération de contrôle")
'RQ : ici, les opérations sont saisies en dur (pas terrible) _
Il y a cependant possibilité de les passer en paramètres (pas mal) _
ou bien de les obtenir par référence à une plage (cette solution me semblerait la meilleure dans le cas présent)

For i = 0 To UBound(liste) 'pour chaque item
    If Operation Like liste(i) & "*" Then 'si l'argument Operation commence par l'item i du tableau liste
        TYPE_OPERATION = corresp(i) & " : " & Operation 'fonction renvoie item i du tableau corresp & " : " & argument Operation
        Exit Function 'sortie fonction
    End If
Next i

TYPE_OPERATION = "Opération à définir - " & Operation 'si defaut de correspondance, renvoie à définir

End Function

Function PERIODICITE(CodeChaine As Long, ColonneRecherche As Range, ColonneRenvoi As Range) As String

With Application
    If .CountIf(ColonneRecherche, CodeChaine) > 0 Then 'si argument CodeChaine existe dans argument ColonneRecherche
        PERIODICITE = .Index(ColonneRenvoi, .Match(CodeChaine, ColonneRecherche, 0)) 'renvoie valeur en ColonneRenvoi liée à la position de correspondance en ColonneRecherche
        If PERIODICITE Like "*±*" Then 'ensuite, si cette valeur renvoyée contient "±"
            PERIODICITE = Left(PERIODICITE, InStr(PERIODICITE, " ±") - 1) 'renvoie la partie gauche avant " ±"
        End If
    End If
End With

End Function

Function TOLERANCE(CodeChaine As Long, ColonneRecherche As Range, ColonneRenvoi As Range) As String

With Application
    If .CountIf(ColonneRecherche, CodeChaine) > 0 Then 'idem
        TOLERANCE = .Index(ColonneRenvoi, .Match(CodeChaine, ColonneRecherche, 0)) 'idem
        If TOLERANCE Like "*±*" Then 'idem
            TOLERANCE = Right(TOLERANCE, Len(TOLERANCE) - InStr(TOLERANCE, " ±")) 'idem mais partie droite
        Else
            TOLERANCE = "" 'sinon, renvoie vide
        End If
    End If
End With

End Function

Pour poster du code, n'hésitez pas à utiliser les balises </> pour une meilleure lisibilité...

Cdlt,

27projet.xlsm (24.57 Ko)

Woaah, tellement de solutions et de bonne volonté.

Merci beaucoup pour ton aide et ton temps, j'ai mis une petite semaine a comprendre, mais ta réponse va au delà de mes espérances.

Cordialement,

Merci pour ce retour, ça me fait plaisir !

Je suis content que ça vous aille.

Cordialement,

Rechercher des sujets similaires à "projet organisation tache"