Assistance avec les macros Excel

1

Mon entreprise utilise Excel pour effectuer le suivi des inspections et de la maintenance des extincteurs portables. J'essaie d'y ajouter des fonctionnalités, mais je n'ai pas la moindre idée de la façon de le faire. Je ferai de mon mieux pour expliquer en quoi j'ai besoin d'aide:

Les trois feuilles auront les mêmes en-têtes de colonne dans la rangée 1. Sur les première et deuxième feuilles du cahier (intitulées «Mensuel» et «Annuel», respectivement), j’utilise la mise en forme conditionnelle pour colorer les cellules des colonnes Y et AC en fonction de ces informations. les valeurs déterminées par une formule (Jaune si le calcul renvoie une valeur inférieure à 90, Rouge si la valeur renvoyée est 0 ou un nombre négatif).

Ce que je voudrais qu'une macro fasse, c'est de copier toute la ligne de la colonne A à la colonne AD dans une troisième feuille (intitulée "Maint Due"). Il serait également utile que ce processus soit automatisé de manière à ce que, chaque fois que les valeurs des colonnes Y et AC soient modifiées dans les feuilles "Mensuelle" ou "Annuelle", les informations de la feuille "Maintien dû" soient automatiquement mises à jour (mais si je dois réexécutez la macro manuellement pour que cela se produise, ce n'est pas grave).

J'espère avoir expliqué ce que j'essaie de faire d'une manière qui a du sens pour quelqu'un et qui peut offrir de l'aide. J'ai très peu d'expérience en codage et cela fait 15 ans que je n'ai pas vraiment codé, alors je suis très rouillé. J'apprécie tout conseil ou assistance que les gens peuvent donner.!

MODIFIER:

Je n'ai jamais utilisé l'enregistreur de macros et je ne peux que comprendre comment créer une macro à copier-coller. Je n'y ai donc pas eu de chance. Après avoir fait quelques recherches supplémentaires et visionné des vidéos, je l'ai bricolé:

Sub Show_on_Maint()
x = 2
'Sets the starting row
Do While Cells(x, 2) <> ""
    'Continue to evaluate until a blank cell is reached
    If Cells(x, 25) <= 90 Then
        'Evaluates the cell in column Y to determine if the value is less than or equal to 90
        Sheets("Sheet1").Rows(x).Copy Sheets("Sheet6").Range("A2")
        'Copies the row to the Maint Due sheet
    Else
        If Cells(x, 29) <= 90 Then
            'Evaluates the cell in column AC to determine if the value is less than or equal to 90
            Sheets("Sheet1").Rows(x).Copy Sheets("Sheet6").Range("A2")
            'Copies the row to the Maint Due sheet
        End If
    End If
    x = x + 1
Loop
End Sub

Lorsque je lance / débogue, je reçois une boucle sans erreur Do. Je pense que ma logique est bonne mais je n'ai pas assez d'expérience pour comprendre pourquoi cette erreur se produit.

EDIT: Fin manquante si avant x = x + 1

Maintenant, je reçois une erreur d'exécution 9 "Indice en dehors de la plage" à: Sheets("Sheet1").Rows(x).Copy Sheets("Sheet6").Range("A2")

Screenshot
(Cliquez sur l'image pour l'agrandir)

Ogre Ogre
la source
1
C'est tout à fait possible, mais nous aurons besoin de votre aide. Montrez-nous où vous êtes bloqué. Essayez d'abord d'utiliser l'enregistreur de macros.
Raystafarian
Que va-t-il se passer dans sheet3? Si je modifie une valeur dans Sheet1, la ligne est copiée dans Sheet3. Si je modifie ensuite une autre valeur dans la feuille Sheet1, celle-ci est également copiée dans la feuille Sheet3. Est-ce que cela signifie qu'il y a 2 valeurs dans Sheet3 maintenant?
Dave
Vous avez déclaré Rouge si la valeur renvoyée est 0 ou un nombre négatif mais AC12 est 13 et il est coloré en rouge.
Jeeped

Réponses:

0

Vous avez mentionné que vous aimeriez que cela automatiquement copier l'information sur le Maintien dû , donc je vais travailler avec ça. UNE Worksheet changer de macro d’événement pourrait couvrir l’automatisation, mais vous en auriez besoin pour chacun des Mensuel et Annuel feuilles de travail. Je vais suggérer un Workbook_SheetChange qui analyse la feuille de calcul source à la recherche de Mensuelle ou Annuelle.

Robinet Alt + F11 et lorsque le VBE s'ouvre, regardez le Explorateur de projet à gauche pour ThisWorkbook . Si vous n'avez pas le Explorateur de projet ouvrir le robinet Ctrl + R pour le montrer. Clic-droit ThisWorkbook et choisir View Code. Dans le nouveau volet à droite intitulé quelque chose comme Book1 - ThisWorkbook (Code) coller ce qui suit.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If LCase(Sh.Name) = "monthly" Or LCase(Sh.Name) = "annual" Then
        If Not Intersect(Target, Sh.Range("Y:Y, AC:AC")) Is Nothing Then
            On Error GoTo Fìn
            Application.ScreenUpdating = False
            Application.EnableEvents = False
            Dim lc As Long, r As Range
            For Each r In Intersect(Target, Sh.Range("Y:Y, AC:AC"))
                If r.Value <= 90 Then
                    lc = Sh.Cells(1, Columns.Count).End(xlToLeft).Column
                    Sh.Cells(r.Row, 1).Resize(1, lc).Copy _
                      Destination:=Sheets("Maint Due").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
                End If
            Next r
        End If
    End If
Fìn:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

Robinet Alt + Q pour revenir à votre classeur. Toute nouvelle valeur saisie dans la colonne Y ou AC de la feuille de calcul annuelle ou mensuelle entraîne la copie de cette ligne dans la ligne vierge suivante de la feuille de calcul Gérer les échéances.

Le premier problème que je vois est que les macros d'événements déclenchés ne se déclenchent pas lorsque le résultat d'une formule est modifié. Il a été fait mention des colonnes Y et AC en cours de calcul, il se peut donc que le déclencheur se trouve sur la colonne créant la ou les valeurs dans les colonnes Y et AC, et non les colonnes Y et Ac elles-mêmes. Les colonnes V et X semblent être des candidats probables.

Jeeped
la source