Nouvel an

Bonjour tous, j'ai un petit soucis sur lequel je bute.

J'ai un tableau dans lequel je dois incrementé chaque semaine une colone dont les cellules peuvent avoir les valeurs suivante.

1,2,3,J ou rien

Chaque semaine, les cellules sont incrémentées.

1 -> 3

2 -> 1

3 -> 2

J reste inchangé quoi qu'il arrive.

Deux cellules reprenne le numero de la derniere semaine ou le fichier à été incrémenté ainsi que la semaine courante.

Le problème que je n'arrive pas à résoudre est le suivant:

Lorsque nous seront le premier janvier, la cellule reprennant la derniere mise à jour sera plus elevée que la semaine courante.

du coup ma boucle ne fonctionne plus.

Exemple, nous somme le 2 janvier. donc semaine 1

Le dernier incrément date de la deniere semaine de l'année précédente, donc semaine 52

Brrr problème...

voici mon code:

Sub auto_open()
    Sheets("Personnel").OnSheetActivate = "auto"
    Sheets("Personnel").Select
End Sub
Sub shift()
Dim lastup As Integer
lastup = Range("AB2").Value
Application.ScreenUpdating = False
For i = [Q100].End(xlUp).Row To 2 Step -1
    If Cells(i, 17) <> "J" Then Cells(i, 17).Value = Cells(i, 17).Value - 1
    If Cells(i, 17) = 0 Then Cells(i, 17).Value = "3"
    Range("AB2").Value = lastup + 1

Next i
End Sub

Sub auto()
Dim boucle As Long
boucle = Range("AB3").Value - Range("AB2").Value
If Range("AB2").Value = Range("AB3").Value Then
    If MsgBox("Nothing to update, files ok", vbOKOnly, "Shift auto-update") = vbOK Then Exit Sub
End If
If Range("AB2").Value > Range("AB3").Value Then
    If MsgBox("Update impossible", vbOKOnly, "Shift auto-update") = vbOK Then Exit Sub
End If
Do
Application.Run ("shift")
boucle = boucle - 1
If Range("AB2").Value = Range("AB3").Value Then MsgBox "Update OK", , "Shift autoupdate"

Loop Until boucle = 0
Application.ScreenUpdating = True
End Sub

Est ce que quelqu'un saurait me donner un petit conseil ?

D'avance merci

12exemple.zip (15.37 Ko)

Bonjour,

Juste une idée, si tu changeais la ligne comme ça :

Range("AB2").Value = (lastup Mod 52) + 1
Raja a écrit :

Bonjour,

Juste une idée, si tu changeais la ligne comme ça :

Range("AB2").Value = (lastup Mod 52) + 1

J'ai essayé, ca fonctionne, mais la boucle ne s'arrete pas :/

Re,

On peut simplifier mais j'ai besoin de savoir exactement ce que tu veux faire. Merci de préciser ton besoin avec des exemples.

Par exemple, à part la première semaine de l'année, quand est-ce que le numéro de la dernière MAJ sera supérieur au numéro de la semaine ? c'est ce test qui fait la sortie du programme

En gros pour simplifier

on va prendre 4 cellule B2; B3; B4 et B5 qui peuvent contenir 5 valeurs differentes à savoir 1;2;3;J ou vide

Celle ci doivent être incrementée de cette facon chaque semaine

1 devient 3

2 devient 1

3 devien 2

J et les cellules vide restent inchangées

Pour savoir si le fichier à été incrémenté pour une semaine donnée, je compare la semaine courante, avec la semaine du dernier incrément.

Le problème quand semaine du dernier incrément est plus grande que la semaine courante.

Exemple: j'ai ouvert mon fichier en novembre 2012, semaine 47 et je le re ouvre en fevrier semaine 6

En piece jointe mon fichier, celui ci fonctionne pour l'année en cours mais c'est tout....

11exemple.zip (14.66 Ko)

Si tu veux faire un essais sur mon fichier, tu peux changer manuellement la valeur correspondante au last update week

Re,

J'ai simplifié le code un peu et testé. Teste de ton côté ce code et dis-nous :

Sub auto_open()
    Sheets("Personnel").OnSheetActivate = "auto"
    Sheets("Personnel").Select
End Sub
Sub shift()
    Dim lastup As Integer
    lastup = Range("AB2").Value
    Application.ScreenUpdating = False
    For i = [Q100].End(xlUp).Row To 2 Step -1
        If (Cells(i, 17) <> "j" And Cells(i, 17) <> "") Then Cells(i, 17).Value = Cells(i, 17).Value - 1
        If Cells(i, 17) = 0 Then Cells(i, 17).Value = "3"
    Next i
    Range("AB2").Value = (lastup Mod 52) + 1
End Sub
Sub auto()
    If Range("AB2").Value = Range("AB3").Value Then
        If MsgBox("Nothing to update, files ok", vbOKOnly, "Shift auto-update") = vbOK Then Exit Sub
    End If
    Do
        Application.Run ("shift")
    Loop Until Range("AB2").Value = Range("AB3")
    MsgBox "Update OK", , "Shift autoupdate"
    Application.ScreenUpdating = True
End Sub

Great, super, merci beaucoup, ca fonctionne

Re,

Une autre version :

Sub auto_open()
    Sheets("Personnel").OnSheetActivate = "auto"
    Sheets("Personnel").Select
End Sub
Sub shift()
    Dim lastup As Integer
    On Error Resume Next
    lastup = Range("AB2")
    For Each cel In Range("Q2:Q" & Range("Q" & Application.Rows.Count).End(xlUp).Row)
        If (cel <> "j" And cel <> "") Then cel.Value = WorksheetFunction.Match(cel * 1, Array(2, 3, 1), 0)
    Next cel
    Range("AB2") = (lastup Mod 52) + 1
End Sub
Sub auto()
    Dim nbUpdate As Integer
    Application.ScreenUpdating = False
    If Range("AB2") = Range("AB3") Then
        MsgBox "Nothing to update, files ok", vbOKOnly, "Shift auto-update"
        Exit Sub
    End If
    Do
        Call shift
        nbUpdate = nbUpdate + 1
    Loop Until Range("AB2") = Range("AB3")
    MsgBox nbUpdate & " Update(s) OK", , "Shift autoupdate"
    Application.ScreenUpdating = True
End Sub

Merci beaucoup Raja

Ceci dit ton dernier code me met en erreur je sais pas pourquoi...

erreur

Bonjour,

J'ai testé avec le fichier exemple.xls. Cela m'a posé aucun problème. Envoi le fichier avec lequel tu as testé le 2ème code. Je jeterai un coup d'oeil.

A tout hasard, c'est peut-être un problème de format de nombre dans la colonne de recherche. J'ai modifié le code de mon dernier message en ajoutant une gestion d'erreur. Reprends-le entièrement et teste.Cela devrait marcher.

C'est le même

Rechercher des sujets similaires à "nouvel"