VBA MACRO declaration/affectation variable

Résolu
nunnu27 Messages postés 20 Statut Membre -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde!

Je viens vers vous soliciter votre aide car je bloque sur un point.....

Je dois calculer une somme dans une cellule (A50 par exemple) en fonction des colonnes (A1 à A49 par exemple). Donc dois-je utiliser la fonction "somme" (cependant il en existe plusieurs) ou bien la fonction "ActiveCell.FormulaR1C1" (que je ne comprends strictement pas.

De plus, j'ai un probleme quant a la syntaxe d'une declaration de variable et son affectation.

Pourriez-vous me donner un exemple "concret" et "clair" (car pas moyen de trouver ça sur le net....) du genre en francais ça donnerait ça:

Sub calc() 'alors arguments ou non entre parenthese?
soit x une variable de type "integer" ou"range"
x=("A50")
x=0
x=valeur de ("A1") + valeur de jusqu'à ("A49")
End Sub


J'espère avoir été suffisamment clair.

Je vous remercie d'avance pour votre aide.

Cordialement

5 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Pas besoin de macro VBA, met en A50 une formule :
    =SOMME(A1:A49)

    Si tu tiens vraiment à une macro :

    Sub calc()  
          
        Range("A50").FormulaLocal = "=Somme(A1:A49)"  
    
    End Sub


    Pour déclarer une variable :

    Dim x As Integer 
    ou

    Dim rng As Range

    Cordialement
    Patrice

    Nicolas dit toujours : « C'est facile quand on connait la réponse ! »
    0
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Tu as comme souvent beaucoup de possibilités. En fonction de ta question, je t'en propose 2 :

    Sub calc1() ' crée une formule de somme A1:A49 en A50
    Range("A50").FormulaLocal = "=SOMME(A1:A49)"
    End Sub
    
    Function calc2(plage As Range) ' calcule la somme dela plage donnée
                                   ' dans la cellule où elle est mise
    calc2 = Application.WorksheetFunction.Sum(plage)
    End Function
    ' appel par =calc2(A1:A49) par exemple
    

    Tu as une macro qui affecte une fonction à une cellule précise,
    et tu as une fonction personnalisée qui est paramétrable et que tu peux utiliser autant que tu veux, là où tu veux : elle doit être dans un module.
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Salut gb,

      On va dire que ta fonction personnalisée est là juste à titre d'exemple explicatif car sinon autant utiliser directement =somme(plage) ;-)
      eric
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    pas moyen de trouver ça sur le net....
    Pourtant si tu recherches sur google 'vba declaration de variable' il y en a des réponses...

    Et pour ton problème plusieurs façons d'y répondre.
    Déjà en A50 il faut décider si tu veux y mettre une formule (dans ce cas tu utilises .FormulaR1C1="ta formule en texte avec les références au format R1C1" ou .Formula="ta formule en texte avec les références au format A1") ou le résultat.

    Et pour déclarer c'est (entre autres) Dim ta_variable as type_de_ta_variable
    ex:
    dim i as integer
    dim r as range
    Si tu fais F1 sur Dim tu auras l'aide

    Ex dans ton cas :
    Sub calc()
        Dim r As Range
        Set r = Worksheets("Feuil1").Range("A1:A49")
        Worksheets("Feuil1").Range("A50") = Application.Sum(r)
    End Sub

    Worksheets("...") peut être omis si tu travailles sur la feuille active

    Note que tu peux utiliser les fonctions de feuille avec
    Application.nom_de_la_fonction_en_anglais(param1,param2,...)
    ou bien
    Application.WorksheetFunction.nom_de_la_fonction_en_anglais(param1,param2,...)
    C'est ce que j'ai fait avec sum()

    eric
    0
  4. nunnu27 Messages postés 20 Statut Membre 1
     
    Bonjour gbinforme et eriiic,

    Tout d'abord merci pour vos réponses rapide !

    Je vais essayer ces codes afin de comprendre leur fonctionnement...

    Merci encore pour votre aide !

    n.b: je vous joints mon code complet dès qu'il fonctionne, je ne bascule donc pas encore le sujet comme "résolu".

    Bonne journée et merci !

    Cordialement
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nunnu27 Messages postés 20 Statut Membre 1
     
    Re bonjour,

    Tout d'abord, pardon patrice de t'avoir omis dans mon bonjour précédent...dsl

    Ensuite, j'ai en fait utilisé le code de patrice et l'ai un peu modifié afin qu'il soit actif dès qu'une modification a lieu sur ma feuille excel .

    Code:

    Sub worksheet_change(ByVal target As Range)
    
        If Not Intersect(target, Range("E10:E59,H10:H59,K10:K59,N10:N59,Q10:Q59,T10:T59,W10:W59,Z10:Z59,AC10:AC59,AF10:AF59,AI10:AI59,AK10:AK59")) Is Nothing Then
        Range("E60").FormulaLocal = "=Somme(E1:E59)"
        Range("H60").FormulaLocal = "=Somme(H1:H59)"
        Range("K60").FormulaLocal = "=Somme(K1:K59)"
        Range("N60").FormulaLocal = "=Somme(N1:N59)"
        Range("Q60").FormulaLocal = "=Somme(Q1:Q59)"
        Range("T60").FormulaLocal = "=Somme(T1:T59)"
        Range("W60").FormulaLocal = "=Somme(W1:W59)"
        Range("Z60").FormulaLocal = "=Somme(Z1:Z59)"
        Range("AC60").FormulaLocal = "=Somme(AC1:AC59)"
        Range("AF60").FormulaLocal = "=Somme(AF1:AF59)"
        Range("AI60").FormulaLocal = "=Somme(AI1:AI59)"
        Range("AK60").FormulaLocal = "=Somme(AK1:AK59)"
        End If
        
    End Sub


    ça fonctionne parfaitement !!! :)

    Bref, encore merci pour votre aide !

    Cordialement ;)
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      De rien, avec plaisir
      0