Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2011, 22h58   #1
Nouveau Membre du Club
 
Femme
Étudiant
Inscription : juin 2011
Messages : 98
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : juin 2011
Messages : 98
Points : 25
Points : 25
Par défaut Décaler des cellules sur jours ouvrés

Bonsoir à tous,

S'il vous plaît, j'ai une colle.
J'ai des dates en colonne A et, en colonne B des données qui y sont associées.
Mais certaines d'entre elles tombent sur des samedis ou des dimanches.

Je voudrais balayer la colonne B, et verifier pour chaque cellule non vide si elle tombe sur un samedi ou un dimanche. (dates en colonne A)

S'il elle tombe un samedi, je voudrais que la cellule soit couper et coller sur le vendredi. (J-1)
S'il elle tombe un dimanche, je voudrais que la cellule soit couper et coller sur le vendredi. (J-2)

Est ce possible, ou suis-je en plein égarement ?

Trés cordialement.
hortencia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 23h07   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Et s'il y a une donnée dans la cellule du vendredi (j-1)?
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/12/2011, 23h16   #3
Nouveau Membre du Club
 
Femme
Étudiant
Inscription : juin 2011
Messages : 98
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : juin 2011
Messages : 98
Points : 25
Points : 25
Merci Mercadog.
Vous pensez vraiment à tout.

Et bien comme ce sont des chiffres, faire une somme e ce qu'il y avait avec ce que l'on y met.

Merci de ta minutie.

Trés cordialement.
hortencia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 23h25   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Ci-joint proposition utilisant une variable tableau (pour la rapidité)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Test()
Dim LastLig As Long, i As Long
Dim n As Byte
Dim Tb
 
Application.ScreenUpdating = False
With Worksheets("Feuil2")
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    Tb = .Range("A2:B" & LastLig)
    For i = 1 To UBound(Tb, 1)
        If Tb(i, 2) <> "" Then
            If IsDate(Tb(i, 1)) Then
                n = Weekday(Tb(i, 1), vbMonday)
                If n >= 6 Then
                    Tb(i + 5 - n, 2) = Val(Tb(i + 5 - n, 2)) + Val(Tb(i, 2))
                    Tb(i, 2) = Empty
                End If
            End If
        End If
    Next i
    .Range("A2:B" & LastLig) = Tb
End With
End Sub
J'ai mis Val au cas ou l'une des cellules ne contient pas un nombre
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/12/2011, 23h34   #5
Nouveau Membre du Club
 
Femme
Étudiant
Inscription : juin 2011
Messages : 98
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : juin 2011
Messages : 98
Points : 25
Points : 25
Merci infiniment Mercadog.

Puis je me permettre de te demander de m'expliquer un peu ce que fait le code s'il te plaît?

Je ne comprends pas tout.

Trés cordialement.
hortencia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 23h42   #6
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Oui certainement avec explication en commentaire
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Sub Test()
Dim LastLig As Long, i As Long
Dim n As Byte
Dim Tb
 
Application.ScreenUpdating = False
With Worksheets("Feuil2") 'Adapte au nom de ta feuille
'Ligne de la dernière cellule remplie de la colonne A
    LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
    'Dans la variable tableau Tb, on écupère les données de la colonne A et B
    Tb = .Range("A2:B" & LastLig)
    'on parcour le tableau
    For i = 1 To UBound(Tb, 1)
    'si Tb(i,2) est non vide (correspondant à la colonne B de notre feuille)
        If Tb(i, 2) <> "" Then
        'si Tb(i,1) est une date (correspondant à la colonne A de notre feuille)
            If IsDate(Tb(i, 1)) Then
                'n est le n° du jour dans la semaine en prenant Lundi comme départ: Lu=1,Ma=2,Me=3...Sa=6,Di=7
                'Si n>=6, càd, Si le jour est samedi ou dimanche
                n = Weekday(Tb(i, 1), vbMonday)
                If n >= 6 Then
                    'Si pour i on tombe sur un samedi, n=6, i+5-n=i-1 (ton j-1 qui est un vendredi)
                    'Si pour i on tombe sur un dimanche, n=7, i+5-n=i-2 (ton j-2 qui est un vendredi)
                    'On somme la valeur initiale du vendredi (j-1 ou j-2) avec la valeur de i (samedi ou dimanche)
                    Tb(i + 5 - n, 2) = Val(Tb(i + 5 - n, 2)) + Val(Tb(i, 2))
                    'on vide notre Tb(i,2) (samedi ou dimanche
                    Tb(i, 2) = Empty
                End If
            End If
        End If
    Next i
    'à la fin de notre boucle, on transfert notre Tb vers la feuille
    .Range("A2:B" & LastLig) = Tb
End With
End Sub

PS, un t n'est pas un d
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/12/2011, 23h52   #7
Nouveau Membre du Club
 
Femme
Étudiant
Inscription : juin 2011
Messages : 98
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : juin 2011
Messages : 98
Points : 25
Points : 25
Merci beaucoup Mercadog.

C'est parfait.
Tu es vraiment trés fort.
Meri.
hortencia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h02.


 
 
 
 
Partenaires

Hébergement Web