Décalage de données

Bonjour le forum,

j'ai un tableau de suivi avec : en colonne F le Mois en cours (certaines cellules contiennent des formules) et déterminé par la cellule J1

Colonnes A à D, les 5 mois précédents

Lors d'un changement de mois, je décale mes valeurs vers la gauche (en supprimant les données de la colonne A après les avoir archiver) et je modifie ma date en J1.

J'ai réaliser une macro pour effectuer ces opérations, dont voici le code :

Sub Décalage()

Application.ScreenUpdating = False
maDate = Range("J1").Value
ajout = 1

    If MsgBox("Avez-vous reporté la Plage_1?", vbYesNo + vbExclamation, "Confirmation de report") = vbYes Then

Range("Plage_1").ClearContents

Range("Plage_2").Copy
Range("Plage_2").Offset(0, -1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
Range("Plage_2").ClearContents

Range("Plage_3").Copy
Range("Plage_3").Offset(0, -1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
Range("Plage_3").ClearContents

Range("Plage_4").Copy
Range("Plage_4").Offset(0, -1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
Range("Plage_4").ClearContents

Range("Plage_5").Copy
Range("Plage_5").Offset(0, -1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
Range("Plage_5").ClearContents

Range("Plage_6").Copy
Range("Plage_6").Offset(0, -1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
Range("F4").ClearContents

Range("J1") = DateAdd("m", ajout, maDate)

    End If

End Sub

Première question : y a-t-il une façon de simplifier ce code?

Deuxième question : j'aimerais qu'au moment d'afficher la MsgBox, la plage_1 se mette en évidence (et qu'évidemment, à la fin de la macro, elle reprennent sa mise en forme initiale)

J'ai essayé d'insérer

Range ("Plage_1").Interior.Color =

en début de code mais cela me modifie la couleur après la validation de la MsgBox.

Ci-joint un fichier avec le code (les valeurs ne sont évidemment pas représentatives)

12decalage.xlsm (20.52 Ko)

Merci d'avance à ceux qui sauront m'aiguiller.

Cordialement,

Bonjour,

Sub decalage()
    [Plage_1].Select
    If MsgBox("Avez-vous reporté la Plage_1?", vbYesNo + vbExclamation, "Confirmation de report") = vbYes Then
        Range("B4:F17").Copy Range("A4:E17")
        Range("J1") = DateAdd("m", 1, Range("J1").Value)
        Range("F4,F10").ClearContents
    End If
End Sub

ça le fait non ?
eric

Edit : j'ai modifié la dernière ligne, je n'avais pas vu les formules en F
Mais pourquoi =SI(H5="";"";H5) ? Autant mettre =H5

Ou saisir directement en F...

Bonjour,

Idée pour la surbrillance de la colonne : un shape de couleur jaune avec de la transparence dont sa largeur = largeur de la colonne et sa hauteur = lz hauteur de la plage. Il suffit alors de le positionner au top et Left de la première cellule et de le rendre visible puis invisible à la fin de la procédure.

@ bientôt

LouReeD

Bonjour Eriiic,

Merci de vous être penché sur mon sujet.

Pour la sélection de la plage 1 ok, ça le fait.

Pour le reste, étant donnée que cela copie la mise en forme et les formules, cela ne convient malheureusement pas...

Il ne faut en fait décaler que les valeurs

Cordialement,

Bonsoir Eriiic, LouReed

Nos messages se sont croisés...

Eriiic : le tableau en exemple n'est qu'une partie du tableau final, et la formule est en fait tout autre (c'était juste pour intégrer le fait qu'il y avait une fonction au cas ou cela influerait sur la réponse)

LouReed : j'avoue que là, je suis un peu dépassé sur ce genre de procédure...

Bonsoir LouReed,

en cherchant un peu sur le forum, j'ai trouvé ceci :

j'ai insérer une rectangle, que j'ai formaté à ma convenance

puis en début de code j'ai mis

ActiveSheet.Shapes("Rectangle 2").Visible = True

et en fin de code

ActiveSheet.Shapes("Rectangle 2").Visible = False

Je vous remercie donc de m'avoir orienté vers cette voie.

Cordialement,

Je laisse encore le poste ouvert pour la première question (sinon je garderai mon code à rallonge)

Pas grand chose à changer pour corriger ce détail :

Sub decalage()
    [Plage_1].Select
    If MsgBox("Avez-vous reporté la Plage_1?", vbYesNo + vbExclamation, "Confirmation de report") = vbYes Then
        Range("A4:E17").Value = Range("B4:F17").Value
        Range("J1") = DateAdd("m", 1, Range("J1").Value)
        Range("F4, F10").ClearContents
    End If
End Sub

Je pense que ça devrait être bon là
eric

En effet, ça correspond tout à fait à ce que je cherchais!

Il ne reste plus qu'à l'adapter au bon fichier.

Merci pour votre contribution et bonne soirée.

Nico

Bonsoir,

content que mon idée vous plaise, et en plus si votre colonne a des MFC cela marche aussi et si elle a des couleurs en dur et bien pas de soucis non plus puisque qu'avec le cadre on y touche pas !

Merci pour vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "decalage donnees"