Petite modification de macro

Bonjour,

Mon entreprise m'a obligé à rajouter quelques colonnes sur mon fichier de gestion et du coup j'ai deux macro qui ne fonctionnent plus.

La première à l'ouverture de virtual basic (Sheet1) fonctionnait comme ça :

Dans l'onglet expédition si je colle un numéro d'ID de roll (ceux qui se trouvent maintenant des les colonnes CDE) dans la colonne C et que le statut de ce roll en colonne AE est sur PARC, alors la macro me remplace le statut PARC par la date du jour. Cette macro doit fouiller dans les 12 onglets, un pour chaque mois.

La deuxième macro (ThisWorkBook) fonctionnait comme ça :

Si 1 est saisi dans la colonne AD, alors la macro m'affiche la date du jour dans la colonne B

Est-ce qu'une âme charitable pourrait m'aider ? J'ai tenté de changer les lettres des colonnes dans le codage mais ça ne fonctionne pas.

Merci beaucoup.

Bonjour,

Que fait la macro dans un module de classe? elle doit-être dans le module de la feuille "Expédition".

Le code dans la feuille "Expédition":

Private Sub Worksheet_Change(ByVal Target As Range)
' ce code doit se trouver dans le module de la feuille expédition
' met une date de prise en charge sur base d'un code scanné en feuille expédition
    If Target.Column = 3 And Target.Rows.Count < 2000 Then
        dl = Cells(Rows.Count, 3).End(xlUp).Row
        Application.EnableEvents = False
        For i = 6 To dl
            rollid = Cells(i, 3)
            For shn = Worksheets.Count To 1 Step -1
                Set Sh = Sheets(shn)
                If Sh.Name <> "Expédition" Then
                    Set plage = Sh.Range("C4").Resize(1000, 3)
                    Set re = plage.Find(rollid, LookIn:=xlValues, lookat:=xlWhole)
                    If Not re Is Nothing Then
                        If UCase(Sh.Cells(re.Row, "AE").Value) = "PARC" Then
                            Sh.Cells(re.Row, "AE") = Date
                            Cells(i, 3).Resize(1, 2).Value = ""
                            Exit For
                        End If
                    Else
                        Cells(i, 4) = "non trouvé"
                    End If
                End If
            Next shn
        Next i
        Application.EnableEvents = True
    End If
End Sub

le code dans le module "ThisWorkbook"

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Column = 30 And Target.Row > 3 And [AD3] = "Qté" Then
        Application.EnableEvents = False
        If Cells(Target.Row, 1) = "-" Then Cells(Target.Row, 1) = Date
        Application.EnableEvents = True
    End If
End Sub

Cdlt

bonjour Arturo,

la macro expédition à l'air de refonctionner. Es-ce qu'elle marchera dans les onglets des 12 mois ?

par contre il y a une erreur avec l'autre car la date s'affiche dans la colonne A semaine alors qu'il faudrait qu'elle s'affiche dans la colonne B date. La condition est

si dans la cellule AD 4 il y a 1 alors mets moi la date dans la cellule B3. Cela valable pour les 599 lignes du tableau. Et aussi dans les 12 onglets (un pour chaque mois)

merci infiniment 🙂

la macro expédition à l'air de refonctionner. Es-ce qu'elle marchera dans les onglets des 12 mois ?
Le plus simple c'est de faire des essais.

par contre il y a une erreur avec l'autre car la date s'affiche dans la colonne A semaine alors qu'il faudrait qu'elle s'affiche dans la colonne B date. La condition est si dans la cellule AD 4 il y a 1 alors mets moi la date dans la cellule B3. Cela valable pour les 599 lignes du tableau. Et aussi dans les 12 onglets (un pour chaque mois)

Là, je n''étais parti que sur le changement d'une des valeurs d'une cellule de AD pensant que vous le faisiez occasionnellement et manuellement, si vous voulez que cela scrute toutes les lignes de toutes les feuilles il me faut procéder autrement, je regarderai ça un peu plus tard.

Voici, le code à mettre dans un module 1 standard et supprimer celui dans le module "ThisWorkbook"

il y a un bouton uniquement sur la feuille du mois de janvier et qui traite toutes les feuilles.

Sub Test_Qte()
    Dim f1 As Worksheet
    Dim DerLig As Long, i As Long, j As Long
    Application.ScreenUpdating = False
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "Expédition" And Sheets(i).Name <> "Chiffres" Then
            Set f1 = Sheets(Sheets(i).Name)
            DerLig = f1.Range("AD" & Rows.Count).End(xlUp).Row
            For j = 4 To DerLig
                If f1.Cells(j, "AD") = 1 Then f1.Cells(j, 2) = Date
            Next j
        End If
    Next i
    Set f1 = Nothing
End Sub

le fichier

Cdlt

jai copié collé vos codage dans mon fichier au boulot. La partie expédition fonctionne mais pas la date. Enfin si ça marche dans le fichier que vous avez envoyé mais uniquement à l'aide d'un gros bouton jaune au milieu du tableau.

comment fait pour éviter de devoir appuyer sur ce bouton et que ça se fasse automatiquement ?

ah et je viens de tester la Macro expédition dans l'onglet février ça marche pas 😐😐😐

autant pour moi la macro expédition fonctionne bien dans les autres onglets

C'est ce que j'avais fait dans la proposition précédente, l'outil détecte un changement de valeur dans une cellule de la colonne AD et ne traite que cette ligne de cette cellule, c'est ce qu'on appelle une macro évènementielle.

Ensuite, vous me demandez de l'appliquer à toutes les lignes de toutes les feuilles, dans ce cas il faut trouver un élément déclencheur de la macro, et on ne peut pas faire cela à chaque changement de valeur d'une cellule, sinon les feuilles seraient recalculées en permanence et vous n'arriveriez plus à travailler, d'où l'idée de passer par un bouton qui déclenche la macro au moment où vous le souhaitez.

comment fait pour éviter de devoir appuyer sur ce bouton et que ça se fasse automatiquement ? Donc je vous retourne la question, quel sera l'élément déclencheur pour que cela se fasse automatiquement? ou si vous préférez, quand voulez-vous que ce déclenche la macro, à la suite de quelle action de votre part?

l'evenement déclencheur est que SI je sais le chiffre 1 dans la colonne Qté alors affiche moi la date dans cette même ligne en colonne B.

cest juste la macro expédition qui fouille dans les onglets par la deuxième macro 🙂

Donc, pour les feuilles "Mois", la macro réagit dès que vous saisissez le chiffre 1 en colonne AD, elle ne reprend pas les lignes avec les 1 existants.

mais pour la feuille "Expédition", quel sera l'élément déclencheur, il faudra bien un bouton pour lancer la macro après y avoir coller les ID, non!, c'est qu'il y a ici:

non, la personne qui m'a créé la macro à la base n'a mis aucuns bouton.

pour la date, dès que 1 est saisi dans la colonne Qté alors la date du jour est mise automatiquement dans la colonne B de cette même ligne, elle ne va pas regarder toutes les autres lignes. Si je passais ça en formule en gros ça donnerait Si ad= 1; aujourd'hui ; "". Le problème en formule c'est que le lendemain les dates changeraient alors qu'il faut qu'elles soient figées dans le temps.

pour expédition c'est que je vais être amené à coller des numéros d'id de rolls dans le tableau des expéditions. Le rôle de la macro est de fouiller et chercher les numéros ID de rolls dans tous les onglets et la condition est que si dans la colonne Date de départ le statut est sur PARC alors remplace moi le statut Parc par la date du jour.

Tu comprends ?

Bonjour,

Oui, j'ai bien compris, mais moi j'ignore comment vous procédez lorsque vous dites: " je colle les numéros d'id de rolls dans le tableau des expéditions", d'où vient cette liste de N°, car moi, ne sachant pas comme c'est fait, je recopie des ID pris dans la feuille de janvier et les colle dans "Expédition" or, comme les ID de la feuille de janvier sont dans des cellules fusionnées, le collage se passe mal. Je ne peux que "copier-coller" uniquement le contenu de chaque cellule individuellement et non pas les cellules en elles-mêmes, et comme la macro est une macro évènementielle, elle réagit immédiatement, ce qui fait que je n'ai pas le temps de copier d'autres ID que le premier est déjà traité. D'où la pose d'un bouton pour lancer la macro au moment voulu.

Question: Pourquoi avoir fusionné les ID sur 3 colonnes?

Testez cette version:

Cdlt

salut Arturo 🙂

en fait quand ces rolls sont physiquement sur le parc, soit dehors, c'est qu'ils sont réparé et prêts à être expédié, le jour de l'expédition, chaque QR code présent sur les rolls sont flashés a l'aide d'un scanner et ensuite tous ces numéros ID sont extraits puis collés en masse dans le tableau expédition et effectivement traités immédiatement. Leur statut PARC est donc remplacé par la date du jour. Ensuite on y touche plus. Tu comprends ? 🙂 Pour les colonnes fusionnées oui c'est pénible, c'est pas moi qui a crée le fichier. Je dois laissé comme ça. Mais tu a raison, pour tester, ça nécessite un collage spécial (123).

Bon Ok, et est-ce que la dernière version marche?

Ca m'en a tout l'air

Mille mercis Arturo

Rechercher des sujets similaires à "petite modification macro"