Optimisation de macro

Résolu
pyrus2047 Messages postés 156 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Sub ouest()
i = 0
date1 = Range("A1").Value
Do While date1 <= Range("A39").Value
If Weekday(date1) = 2 Then
i = i + 1
End If
date1 = date1 + 1
Range ("B1:B39") & DateDiff("ww", DateSerial(Year(date1), 1, 1), date1) + 1
Loop
End Sub

Bonjour,
si vous pouviez m'aider a corriger ma macro
dans la plage A1:A39 j'ai une liste de date don je souhaite récupéré dans la plage B1:B39
uniquement pour les lundi le n°de la semaine
merci

3 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    Bonjour,
    Un truc du genre :
    Sub ouest()
    
        Dim plageDate As Range
        Dim wkb As Workbook
        Dim sh As Worksheet
        Dim R As Integer
        Dim C As Range
        
        Set wkb = ThisWorkbook
        Set sh = wkb.ActiveSheet
        Set plageDate = sh.Range("A1:A39")
    
    
        For Each C In plageDate
            If Weekday(C.Value) = 2 Then
                R = C.Row
                sh.Cells(R, 2).Value = CInt(Format(C.Value, "ww", 2))
            End If
        Next
    
    End Sub
    
    

    2
    1. pyrus2047 Messages postés 156 Statut Membre
       
      Re
      merci beaucoup
      j'ai un autre dysfonctionnement avec cette macro
      Private Sub Worksheet_Change(ByVal Target As Range)
      
      Dim numéro As Integer
      Dim celluletrouvee As Range
      Dim ligne As Integer
      Dim col As Integer
      
      numéro = Range("T1")
      Set celluletrouvee = Range("L2:L10").Find(numéro)
      ligne = celluletrouvee.Row
      col = celluletrouvee.Column
      celluletrouvee.Select
      ActiveWindow.ScrollRow = Selection.Row
      End Sub


      EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).

      Explications disponibles ici :ICI

      Merci d'y penser dans tes prochains messages.
      Jordane45

      Merci
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > pyrus2047 Messages postés 156 Statut Membre
         
        bonsoir, peux-tu marquer cette discussion comme résolue?
        0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Bonjour,

      Pour éviter les problèmes, tu devrais t'inspirer très largement de la façon, dont Jordane écrit ses macros :
      - Pas de Select inutile
      - Pas de Range non référencé (i.e Range("T1") oui mais de quelle feuille ?)
      - Pas de valeur explicite (i.e au lieu de Range("T1") écrire Range("T1").Value)
      - Ne pas utiliser Selection
      - ....
      0
    3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      De plus... Tu ne nous dit pas quel est le souci...

      Nb: ne mets pas de caractères accentués dans le nom de tes variables
      0
    4. pyrus2047 Messages postés 156 Statut Membre
       
      re
      j'ai en T1 une liste déroulante de numéro 1,2,3,4........
      en colonne L j'ai une suite de numéro identique a la liste déroulante
      je souhaite qu'a la selection d'un numéro dans la liste déroulant
      on le recherche dans la colonne L et que la ligne ou il se trouve remonte en haut
      de la feuille
      j 'ai toujours cette ligne qui pose problème

      ligne = celluletrouvee.Row

      Cordialement
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Tu pose en dictat que la ligne est systématiquement trouvée !
    Et si ce n'est pas le cas ???? (If celluletrouvee is Nothing then ... )
    0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    quand tu écris "j 'ai toujours cette ligne qui pose problème", reçois-tu un message d'erreur?
    lequel?
    suggestion:
    Dim numero As Integer
    Dim celluletrouvee As Range
    
    numero = Range("T1")
    Set celluletrouvee = Range("L2:L10").Find(numero)
    If not (celluletrouvee is Nothing) then
        ActiveWindow.ScrollRow = celluletrouvee.Row
    end if
    0