Mettre du code répétitif en fonction

Résolu/Fermé
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 - Modifié par HugoHerbomez le 6/02/2017 à 15:03
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 - 7 févr. 2017 à 09:07
Bonjour,

Je suis actuellement en train d'essayer de mettre mon code sous la forme d'une fonction. Mon problème étant que je ne rentre même pas dans la fonction! Et mes données ne sont donc bien sûr pas changée. Au passage ma fonction "inc" ne fonctionne pas non plus.

Voici le code que je voudrais mettre en fonction :

Dim rng As range
Dim anneeS As String, semaineS As String
Dim i As Integer

Private sub ....
....
With ActiveSheet
    Select Case .Name
        Case "Matin"
            i = 11
            'Cherche l'année
            While StrComp(.Range("I" & i + 1 & "").Value, anneeS) = 1
               inc i, 29
            Wend
            'Cherche la semaine associée à l'année si elel est indiquée
            If Len(dateS) = 7 Then
               If Len(.Range("I" & i & "").Value) = 1 And Len(semaineS) = 2 Then
                   semaineS = Mid(semaineS, 2, 1)
               End If
               While StrComp(.Range("I" & i & "").Value, semaineS) = 1
                   inc i, 29
                   If Len(.Range("I" & i & "").Value) = 1 And Len(semaineS) = 2 Then
                       semaineS = Mid(semaineS, 2, 1)
                   End If
               Wend
            End If
            'Copie
            Set rng = .Range("A" & i & ":J" & i & "", "A" & i & ":A" & i + 28 & "")
            End With
....
End Sub

Private Sub inc(ByRef i As Integer, ByVal nb As Integer)
    i = i + nb
End Sub


J'ai donc essayé un peu et j'avais fait ça :


'Mon search est dans la fonction du code au dessus
i = 11
search rng, anneeS, semaineS, i

Private sub search (rng As range, ByVal anneeS As String, ByVal semaineS As String, ByRef i As Integer)
            'Cherche l'année
            While StrComp(.Range("I" & i + 1 & "").Value, anneeS) = 1
               inc i, 29
            Wend
            'Cherche la semaine associée à l'année si elel est indiquée
            If Len(dateS) = 7 Then
               If Len(.Range("I" & i & "").Value) = 1 And Len(semaineS) = 2 Then
                   semaineS = Mid(semaineS, 2, 1)
               End If
               While StrComp(.Range("I" & i & "").Value, semaineS) = 1
                   inc i, 29
                   If Len(.Range("I" & i & "").Value) = 1 And Len(semaineS) = 2 Then
                       semaineS = Mid(semaineS, 2, 1)
                   End If
               Wend
            End If
            'Copie
            Set rng = .Range("A" & i & ":J" & i & "", "A" & i & ":A" & i + 28 & "")
            End With
End sub


Merci
Bien cordialement,
Hugo
A voir également:

2 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
6 févr. 2017 à 16:00
Bonjour,

Ne pas confondre FONCTIONS et ROUTINES ... autrement dit :
function et Sub

=> Transforme ta SUB INC en function inc(....)



1
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
6 févr. 2017 à 16:07
Ah okkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk!!!
Merki !
0
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
6 févr. 2017 à 17:01
En faite non ce n'est pas bon ! j'ai remplacé "Sub" par "Function" mais rien ne change.... grrrr

Tu pourrais me donner un exemple s'il te plait? Si possible avec mon code!

Merci beaucoup
0
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
Modifié par HugoHerbomez le 7/02/2017 à 09:00
Je vais bien réécrire mon problème.
Alors pour l'instant j'ai ça, mais je n'entre même pas dans la fonction car la cellule 'A1' ne me donne même pas '1'. Et bien sûr je n'ai pas la range que je veux dans la variable 'rng'. Comment faire pour entrer dans cette satanée fonction? Le problème est-il au niveau de l'adressage?

Private Sub CommandButton1_Click()
    Dim rng As Range
    Dim i As Integer
    moisS As String, anneeS As String
    ...
    i = 12
    'Copier les 11 dernières interventions
    Set rng = search(anneeS, moisS, i)
    ...
End Sub

'Et la fonction
Function search(ByVal anneeS As String, ByVal moisS As String, ByRef i As Integer) As Range
    Range("A1") = 1
    Dim inc As Integer
    inc = 2
    While StrComp(Year(CDate(Range("B" & i & "").Value)), anneeS) = 1
        i = i + inc
    Wend
    If Len(dateS) = 7 Then
        While StrComp(month(CDate(Range("B" & i & "").Value)), moisS) = 1 And Len(month(CDate(Range("B" & i & "").Value))) = 2 And StrComp(Year(CDate(Range("B" & i & "").Value)), anneeS) = 0
            i = i + inc
        Wend
        If moisS < 10 Then
            moisS = Mid(moisS, 2, 1)
            While StrComp(month(CDate(Range("B" & i & "").Value)), moisS) = 1 And StrComp(Year(CDate(Range("B" & i & "").Value)), anneeS) = 0
                i = i + inc
            Wend
        End If
    End If
    search = Range("B" & i & ":L" & i + 10 * 2 + 1 & "")
End Function


De plus, la fonction doit être déclarée avec la feuille ou autre part?

Merci beaucoup

Bien cordialement,
Hugo
0
HugoHerbomez Messages postés 57 Date d'inscription dimanche 15 juillet 2012 Statut Membre Dernière intervention 2 mars 2017 2
Modifié par HugoHerbomez le 7/02/2017 à 09:07
Du coup j'ai résolu mon problème. Il ne faut pas mettre la fonction dans la même feuille où on l'appelle.
Il faut la mettre dans un module associé à la feuille si j'ai bien compris, en tout cas cela fonctionne pour moi.
0