Erreur dans ma procedure vba

frederique -  
 frederique -
Bonjour a tous, j'suis nouvelle sur le site et gspr que vous pourrez m'aider.

G écrit cette proc:
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 13/05/2005 par rieusset
'
Dim a As Integer
a = Range("B18").Value
If Range("B18").Value < Range("Avancement!I16").Value Then
Range("O4").Formula = "= Sheets(Effectifs!)Cells(5, a).Value "
End If
If a > Range("Avancement!I16") Then
Range("O4").Value = "=1+(Cells(18,2)-Avancement!Cells(16,9))/(Avancement!Cells(16,9))"
End If
End Sub

Mais elle fonctionne pas a mon avis g des problèmes pour désigner mes feuilles
ma feuille courant est Calcul Indicateur et l'autre feuille est Avancement et la dernière est Effectifs

moi je veux créer une variable "a" qui soit la valeur inscrite dans la cellule B18 de la feuille"Calcul indicateur"
Si "a"< valeur cellule I16(feuille "Avancement")
alors
cellule"O4"valeur=valeur cellule col "a" ligne"5" de la feuille "Effectifs"
et si "a">valeur I16 (feuill Avancement)
alors
valeur O4=1+(B18-I16(feuil avancement))/(I16 (feuill avancement))

je pense que je me trompe dans l'écriture formelle, j'espere que vous saurez m'aider

1 réponse

  1. frederique
     
    Alors personne pour m'aider ? Svp...
    0
    1. Mattiou
       
      Bonjour,
      si alors voilà un script qui doit répondre à ton besoin. Par contre c'est peut être un peu long mais au moins assez "propre" :

      ================================
      Sub calcul()

      Dim WS_Indicateurs As Worksheet, WS_Avancement As Worksheet, WS_Effectifs As Worksheet
      Dim Cel_B18 As Range, Cel_A5 As Range, Cel_I16 As Range, Cel_O4 As Range

      Set WS_Avancement = ThisWorkbook.Worksheets("Avancement")
      Set WS_Indicateurs = ThisWorkbook.Worksheets("Calcul Indicateurs")
      Set WS_Effectifs = ThisWorkbook.Worksheets("Effectifs")

      Set Cel_B18 = WS_Indicateurs.Range("B18")
      Set Cel_O4 = WS_Indicateurs.Range("O4")
      Set Cel_I16 = WS_Avancement.Range("I16")
      Set Cel_A5 = WS_Effectifs.Range("A5")

      If Cel_B18.Value < Cel_I16.Value Then
      Cel_O4.Value = Cel_A5.Value
      End If
      If Cel_B18.Value > Cel_I16.Value Then
      Cel_O4.Value = 1 + (Cel_B18.Value - Cel_I16.Value) / Cel_I16.Value
      End If
      '
      End Sub
      ===================================
      Voilà, bonne chance pour la suite


      Mattiou
      0
    2. frederique > Mattiou
       
      merci pour ton aide mathiou!
      Par contre mon "a" est une variable égale a la valeur inscrite dans la cellule B18
      Je n'utilise donc pas A5 de la page effectifs mais la cellule de la ligne 5 et colonne "a" ...
      0
    3. Mattiou > frederique
       
      Re-,
      désolé j'avais mal compris, cela dit ça ne change pas trop le fonctionnement, il suffit de récupérer la valeur de la cellule B18 dans une variable, et ensuite au moment de la définition de Cel_A5 de la récupérer à l'aide d'un offset avec 5 et a ...
      Voili voilou ...
      0
    4. frederique > Mattiou
       
      justement c ça que je n'arrive pas à faire : comment je dois l'écrire
      O4.formula=WorkSheets("effectifs")Cells(5,a) ?
      0
    5. Mattiou > frederique
       
      En réutilisant ce qui a été écrit avant, il faut que tu rajoutes aux endroits adéquats :
      -> Dim a as Integer
      ...
      -> a = Cel_B18.Value
      ...
      -> Set Cel_A5 = WS_Effectifs.Cells(5, a)
      ....
      et le reste du code ne change pas ... Voilà
      Cordialement,
      0