Macro pour décaler date en fonction valeur

Bonjour,

J'ai tenté de faire ceci avec des formules mais elles alourdissent considérablement mon fichier.

J'aimerais que la macro décale les quantités d'un ou plusieurs mois en fonction de la valeur mise dans l'onglet "DELAIS_LIV_CLIENTS'".

Pourriez-vous m'aider ?

11recalage.xlsx (17.03 Ko)

Bonjour,

à tester,

Sub test()
Set wk1 = Sheets("MOIS_RETRAITÉ")
Set wk2 = Sheets("DELAIS_LIV_CLIENTS")
For i = 2 To wk2.Cells(Rows.Count, 2).End(xlUp).Row
    If wk2.Cells(i, 5) <> 0 Then
    code = wk2.Cells(i, 2) & wk2.Cells(i, 3)
      t = "=MATCH(""" & code & """,MOIS_RETRAITÉ!A:A&MOIS_RETRAITÉ!D:D,0)"
      rw = Evaluate(t)
      col = wk1.Cells(rw, "AT").End(xlToLeft).Column
      If col = 45 Then Exit Sub
      wk1.Range(Cells(rw, 10).Address, Cells(rw, col).Address).Cut wk1.Cells(rw, 10 + wk2.Cells(i, 5).Value)
    End If
Next i
End Sub

Bonjour Isabelle,

La code fonctionne très bien, un grand merci. Si je comprends bien, il décale du nombre de mois entre les colonnes 10 à 45.

Serait-il compliqué de rajouter une boite de dialogue au lancement de la macro pour choisir à partir de quel mois le décalage doit commencer ?

Merci pour votre aide

re,

Serait-il compliqué de rajouter une boite de dialogue au lancement de la macro pour choisir à partir de quel mois le décalage doit commencer ?

à tester,

Bonjour isabelle,

Réponse tardive de ma part suite aux fêtes. Le nouveau code ne semble pas fonctionné, il décale les valeurs à gauche.

Cdlt

re,

Réponse tardive de ma part suite aux fêtes. Le nouveau code ne semble pas fonctionné, il décale les valeurs à gauche.

pas à gauche, mais il y avait tout de même un erreur

voici la modification,

Fonctionne parfaitement. Un grand merci à vous Isabelle

Bonjour Isabelle,

Je n'arrive pas à faire fonctionner ce code dans mon second fichier. Je ne comprends pas d'où viens le problème, il y a simplement + de lignes.

D'avance merci pour votre aide

Geoffrey

3exemple.xlsm (260.93 Ko)

re,

Vérifie les données de la colonne D sur la feuille "MOIS_RETRAITÉ"

il y a plein d'espace après le dernier caractère.

J'avais déjà essayé en passant un SUPPRESPACE, mais ça ne fonctionnait toujours pas.

ci-joint le même fichier sans les espaces

2exemple-v1.xlsm (258.91 Ko)

re,

j'ai ajouté une gestion d'erreur pour les items non présent sur les 2 feuilles,

Private Sub test()
Set wk1 = Sheets("MOIS_RETRAITÉ")
Set wk2 = Sheets("DELAIS_LIV_CLIENTS")
Application.ScreenUpdating = False
If colonne = 0 Then Exit Sub

For i = 2 To wk2.Cells(Rows.Count, 2).End(xlUp).Row
    If wk2.Cells(i, 5) <> 0 Then
      code = wk2.Cells(i, 2) & wk2.Cells(i, 3)
      t = "=MATCH(""" & code & """,MOIS_RETRAITÉ!A:A&MOIS_RETRAITÉ!D:D,0)"
      rw = Evaluate(t)
      If Not IsError(rw) Then
        col = wk1.Cells(rw, "AT").End(xlToLeft).Column
        If col = 45 Then Exit Sub
        wk1.Range(Cells(rw, colonne).Address, Cells(rw, col).Address).Cut wk1.Cells(rw, 10 + wk2.Cells(i, 5).Value + colonne - 10)
      End If
    End If
Next i
Application.ScreenUpdating = True
End Sub

note/ ce code est très gourmand tu risque de manquer de mémoire s'il y a trop de lignes

re Isabelle,

En effet, le traitement dure 13 minutes mais il fonctionne très bien ! Peut-être y a t-il des options à activer quelque part pour accélérer le calcul ?

Merci encore pour votre aide

Bonjour Geoffrey,

Peut-être y a t-il des options à activer quelque part pour accélérer le calcul ?

tu pourrais ajouter en début de macro

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

et en fin de macro

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

J'ai gagné 18 secondes sur les 12 minutes, c'est mieux que rien

Merci Isabelle.

re,

J'ai gagné 18 secondes sur les 12 minutes, c'est mieux que rien

je vais regarder pour une autre solution avec tbl()

@+

re,

voici un autre proposition avec variable tableau,

à tester sur ce fichier et ton fichier,

Bonjour Isabelle,

re,

voici un autre proposition avec variable tableau,

à tester sur ce fichier et ton fichier,

J'ai une erreur quand j'essai ton second code, je préfère rester sur le premier que j'ai réussi à comprendre dans un premier temps

Il y a encore un point que je ne parviens pas à résoudre, il est illustré dans le fichier ci-joint à la ligne 38.

Si il n'y a pas de valeur après le mois sélectionné dans le userform alors la macro décale les valeurs dans le passé

Aurais-tu une idée ?

Geoffrey

Bonjour Geoffrey,

j'ai modifié la condition suivante

If col = 45 Or col < colonne Then GoTo suivant

Fonctionne parfaitement, merci beaucoup

Rechercher des sujets similaires à "macro decaler date fonction valeur"