déclaration de variable

  • Initiateur de la discussion Jean-Michel
  • Date de début
J

Jean-Michel

Guest
Salut a tous et en particulier aux experts vba,


Je suis en en autoformation avec le livre excel 2000 vba étape par étape et j'èssaye de faire un exercice proposé.

Depuis deux heures, j'essaye de déclarer une variable et je rame à contre sens du courant.

Voici la question

1) déclarez deux variables, l'une nomée maPlage et l'autre monCummul

2) assigner à maPlage la zone en cours entourant la cellule active

3) assigez à mon cummul, la plage constituée de la collone de droite de maPlage

4) Assignez a la plage mon cummul une formule cummulant toute le valeurs d'une ligne. Servez vous de la propriété address avec des reférences relatives pour les lignes et les collones.

comme référence à prendre je dois utiliser un tableau ("a1:d8")sur une feuille de calacul nomée table.

je n'attend pas forcément la solution à ce probléme car je n'apprendrai pas a déclarer les variables mais plutôt un petit coup de pouce explicatif pour que j'arrive à accomplir cet exercice.

Sincères remerciements à toutes les personnes qui prendront un peu de temps pour moi

Jean-Michel
 
L

Lord Nelson

Guest
Salut Jean-Michel,

Il doit bien y avoir le corrigé de ton exercice dans le bouquin...

Sinon, pour te mettre sur la voie, je déclarerais les variables comme ceci :

Dim MaPlage as Range, MonCumul as Range

Le mot "Range" indique que les variables MaPlage et MonCumul vont contenir toutes les informations des cellules Excel (Valeurs, positions, formules, formats...).
A ce stade, VBA sait que MaPlage va représenter une ou plusieurs cellules quelconques.

Pour être plus précis, tu devras utiliser l'instruction Set pour dire à VBA quelles cellules représente MaPlage :

Set MaPlage = ActiveCell.CurrentRegion

Désormais, MaPlage a toutes les propriétés des cellules qui jouxtent la cellule active.
Pour t'en assurer, tu peux demander d'afficher ce message :

MsgBox MaPlage.Address

Etonnant non ?

A+
Horatio
 
J

Jean-Michel

Guest
Salut Horatio,

étonnant c'est le mot qui convient!!!
Mais le plus désespérant c'est que j'ai essayé tout l'aprés midi de placer "ActiveCell.CurrentRegion" mais rien à faire je me suis batu avec cet ordi et il ne voulait rien savoir.
Il devait manqué un espace ou quelquechose d'autre de trop ailleurs je ne sais pas trop.
Enfin ça fonctionne et je te remercie.
je serais intéressé pour connaitre le code pour sélectionné la colonne de droite car là je n'ai encore rien essayé

merci pour l'info et a+

Jean-Michel
 
O

omicron

Guest
Bonsoir Jean-Michel,

Voilà un bout de code qui te permettra de traiter de bout en bout le problème posé.

Je pense que les quelques commentaires te permettront sans mal de comprendre l'algorithme présenté.

=====================================================
Private Sub CommandButton1_Click()

'Déclaration des références aux objets Ranges (Plage en Français)
Dim MaPlage, Moncumul As Range

'Initialisation de la référence à Maplage
'MaPlage est un Range
'sa première cellule est positionnée à -1 ligne et - 1 colonne par rapport à la cellule sélectionnée
'sa dernière cellule est positionnée à +1 ligne et + 1 colonne par rapport à la cellule sélectionnée
Set MaPlage = Range(Selection.Offset(-1, -1), Selection.Offset(1, 1))

'Initialisation de la référence à MonCumul
'MonCumul est un Range qui est un sous-ensemble du Range MaPlage
'il est constitué de la dernière des colonnes de MaPlage
Set Moncumul = MaPlage.Columns(MaPlage.Columns.Count)

'Stockage dans chaque ligne de MonCumul de la Formule Somme de la ligne
'On utilise la propriété "FormulaLocal" pour que Excel traduise SOMME(Français) en SUM(Anglais)
'Les cellules à additionner sont identifiées en utilisant leur positionnement relatif / cumul (Offset)
'Les coordonnées de ces cellules sont récupérées par la propriété Address
'Les paramètres RowAsolute, ColumnAsolute sont à False pour utiliser des adresses relatives

For Each Cel In Moncumul.Cells
Cel.FormulaLocal = "=SOMME(" & _
Cel.Offset(0, -2).Address(RowAbsolute:=False, ColumnAbsolute:=False) & ":" & _
Cel.Offset(0, -1).Address(RowAbsolute:=False, ColumnAbsolute:=False) & ")"
Next Cel

End Sub
=====================================================

Tu trouveras également en pièce jointe un exemple de mise en oeuvre.

En te souhaitant bon courage pour la suite ....

Omicron.
 

Pièces jointes

  • GenererSommes.zip
    11.5 KB · Affichages: 29
J

Jean-Michel

Guest
Salut Omicron,

Merci pour toutes ces infos, je vais tenter de décortiquer ce code afin que j'avance un peu dans mon apprentissage du vba.

C'est encore trés complexe mais je ne désespère pas.

merci beaucoup, c'est super sympa de m'avoir aider.

salutations

Jean-Michel
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 505
Messages
2 089 071
Membres
104 020
dernier inscrit
Mzghal