Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Besoin d'aide pour comprendre un bout de code

  • Initiateur de la discussion Initiateur de la discussion fenec
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fenec

XLDnaute Impliqué
Bonsoir le forum

Je reviens vers vous car je n'arrive pas à comprendre un bout de code et ainsi pourvoir l'adapter à mon projet

Voici le code:

Code:
For n = 0 To 4
   jour = Date + n
   If Weekday(jour) <> 1 And Weekday(jour) <> 7 Then
     jour = jour + 1
     nb = nb + 1
     If nb = 2 Then Exit For
       End If
 Next n
 For n = Range("J65536").End(xlUp).Row To 7 Step -1
   If Range("J" & n) > jour Then Rows(n).Delete
 
 If CDate(Range("J" & n)) < Date - 60 Then Rows(n).Delete
Next n
 Selection.Locked = True ' bloque les formules
     Selection.FormulaHidden = True

Je compte sur vous car mon niveau de vba est plus que petit

D'avance merci

Cordialement

Fenec
 
Re : Besoin d'aide pour comprendre un bout de code

Bonsoir Fenec,

J'ai essayé de t'expliquer le code 😉
VB:
Sub Fenec()
  ' Pour n de 0 à 4
  For n = 0 To 4
    ' Date du jour = celle d'aujourd'hui + 4
    jour = Date + n
    ' si le numéro du jour dans la semaine est différend de 1 (dimanche au format américain)
    ' et est différend de 7 (samedi au format américain)
    If Weekday(jour) <> 1 And Weekday(jour) <> 7 Then
      ' Alors date du jour = date du jour + 1
      jour = jour + 1
      ' Nombre = nombre +1
      nb = nb + 1
      ' Si nombre = 2 on sort de la boucle
      If nb = 2 Then Exit For
    End If
  Next n
  ' Pour n de la dernière ligne remplie de la colonne J
  ' à la ligne 7
  For n = Range("J65536").End(xlUp).Row To 7 Step -1
    ' Si la date de la cellule Jn est supérieure à celle calculée du jour
    ' on supprime la ligne
    If Range("J" & n) > jour Then Rows(n).Delete
    ' Si la date de la cellule Jn est inférieur à la date du jour - 60
    ' on supprime la ligne
    If CDate(Range("J" & n)) < Date - 60 Then Rows(n).Delete
  Next n
  ' Protéger la cellule
  Selection.Locked = True
  Selection.FormulaHidden = True
End Sub

A+
 
Re : Besoin d'aide pour comprendre un bout de code

Bonjour le forum, BrunoM45

Merci pour ces explications très claires

Deux petites questions cependant :

1er : Est-il gênant que les dimanches soient au format Américain pour utiliser ce code ?
Si oui comment modifier ce critère ?

2ème : Supprimant les lignes devenues (je dirais) inutiles dans mon fichier.
Est-il possible de rajouter dans ce code le nombre de lignes supprimées afin que mon classeur soit toujours avec un nombre de lignes définies à la création, par exemples 100 ?

Cordialement

Fenec
 
Re : Besoin d'aide pour comprendre un bout de code

Re,

Réponse 1 : non, mais j'ai modifié le code pour qu'il soit plus clair
Réponse 2 : pourquoi les supprimer alors ? Il suffit tout simplement de les effacer

VB:
Sub Fenec()
  ' Pour n de 0 à 4
 For n = 0 To 4
    ' Date du jour = celle d'aujourd'hui + 4
   jour = Date + n
    ' si le numéro du jour dans la semaine est inférieur
    ' à 6 = samedi ou 7 = dimanche format européen
   If Weekday(jour, vbMonday) < 6 Then
      ' Alors date du jour = date du jour + 1
     jour = jour + 1
      ' Nombre = nombre +1
     nb = nb + 1
      ' Si nombre = 2 on sort de la boucle
     If nb = 2 Then Exit For
    End If
  Next n
  ' Pour n de la dernière ligne remplie de la colonne J à la ligne 7
 For n = Range("J65536").End(xlUp).Row To 7 Step -1
    ' Si la date de la cellule Jn est supérieure à celle calculée du jour
    ' ou Si la date de la cellule Jn est inférieur à la date du jour - 60
    ' on efface la ligne tout simplement pour conserver le même nombre
    If Range("J" & n) > jour Or CDate(Range("J" & n)) < Date - 60 Then
      Rows(n).ClearContents
    End If
  Next n
  ' Faire le tri ici pour que les linges vides se retrouvent à la fin
  
  ' Protéger la cellule
   Selection.Locked = True
  Selection.FormulaHidden = True
End Sub

Si tu ne sais pas, tu trouveras sur ce forum du code pour trier les lignes 😉

A+
 
Re : Besoin d'aide pour comprendre un bout de code

Bonjour le forum, BrunoM45

Venant de mettre ton code modifié je rencontre une erreur d'excécution'13' incompatibilité de type sur

Code:
If Range("J" & n) > jour Or CDate(Range("J" & n)) < Date - 60 Then

Pour ce qui est du trie, je vais suivre ton conseil et chercher sur le forum

A+
 
Re : Besoin d'aide pour comprendre un bout de code

Re,

Oui je n'y avais pas pensé, mais le test avec CDate() si tu n'as pas de date pose forcément problème

Il faut laisser 2 tests avec 1 en plus
Code:
If Range("J" & n) > jour Then Rows(n).ClearContents
If Range("J" & n) <>"" then
  IF CDate(Range("J" & n)) < Date - 60 Then Rows(n).ClearContents
End If

a+
 
Re : Besoin d'aide pour comprendre un bout de code

Re,

Merci viens de tester plus d'erreur mais pour ce qui est du tri pour que les linges vides se retrouvent à la fin je sèche
j'ai lu beaucoup de sujet mais ils parlent tous,enfin ce que j'ai lu de suppression mais pas de déplacement de lignes vides

Un petit coup de pouce serait le bien venu

Je vous joint un fichier tres épuré
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
839
Réponses
15
Affichages
657
Réponses
8
Affichages
749
Réponses
4
Affichages
692
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…