Variables et modules de classe [Résolu]

Signaler
Messages postés
209
Date d'inscription
jeudi 5 août 2004
Statut
Membre
Dernière intervention
15 juillet 2009
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour,

Je fais un travail qui me pose un problème. je travaille dans excel. j'ai un bouton sur une feuille qui appelle des inputbox qui entrent des variables. une variable qté et une variable ref. à chaque entrée d'information les valeurs vont s'additionner dans un tableau de la feuile excel. à la fin de l'enregistrement j'ai un tableau qui ressemble à cela dans ma feuille 1

 

<colgroup><col span=\"5\" width=\"80\" /></colgroup>----
date, qte, ref, , , ----janv.-00, 1, 1, <?xml:namespace prefix v ns "urn:schemas-microsoft-com:vml" /??><v:shape id="CommandButton1" o:spid="_x0000_s1026" type="#_x0000_t201" stroked="f" strokecolor="windowText [64]" o:insetmode="auto">bouton d'enregistrement</v:shape>, ----
févr.-08, 3, 2, ----
févr.-08, 4, 1, ----
févr.-08, 5, 7, ----
févr.-08, 5, 8

Dans une autre feuille j'ai aussi un tableau ref et je voudrais qu'à chaque nouvelle ref enregistrée en feulle 1 le programme aille chercher la valeur dans la feuille 2 et par la position relative aille s'ajouter dans la colonne quantité... cela ne fonctionne pas avec le programme que j'ai fait (voir ci dessous)

<colgroup><col span=\"2\" width=\"80\" /></colgroup>----
ref, quantité, ----
1,  , ----
2,  , ----
3,  , ----
4,  , ----
5,  , ----
6,  , ----
7,  , ----
8,  , ----
9

dans la feuille 1,
Quand je clique sur le bouton d'enregistrement, voici le programme qui se déclenche :

Private Sub CommandButton1_Click()
le curseur se positionne sur la première cellule de la page et va à la fin de cette colonne et une cellule en dessous
 Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Là, je déclare mes variables : qte est la variable quantité, ref la variable reference
Dim qte As Integer
Dim ref As String
Là je mets qte = 1 et je précise au programme, tant que la qte est difféente de 0, continue de lancer la boite message...
qte = 1
While qte <> 0
qte = InputBox("entrez la quatité")
ref = InputBox("entrez la reference")
Là je positionne sur ma feuille les infos voulues : la date, la quantité et la ref
Selection = Date
ActiveCell.Offset(0, 1) = qte
ActiveCell.Offset(0, 2) = ref
là je me posittionne à la fin de mon tableau pour recommencer l'opération jusqu'à ce que la quantité soit égale à 0
ActiveCell.Offset(1, 0).Range("A1").Select
et là, je dits au programme d'aller à la feuille 2, de se positionner sur la vellule A1 et, de jusqu'à ce que la cellule active soit égale à la variable ref, de descendre d'une cellule.
Worksheets("Feuil2").Range("A1").Select
Do Until ActiveCell = ref
ActiveCell.Offset(1, 0).Select
Loop
quand la cellule active est égale à la ref, va à la cellule à côté et ajoute à la valeur de la cellule la variable qté.
ActiveCell.Offset(0, 1) = qte+ Val(ActiveCell.Offset(0, -1))
Wend
End Sub

et cela ne fonctionne pas, comment je peux faire ?
apparement les variables ne sont valables que pour une feuille ? il n'est pas possible qu'une variable soit valable pour plusieurs feuilles ?
et je voulais connaître l'interet des modules de classes. A quoi ils servent ? est ce que par cette méthode mon programme peut fonctionner ?
merci de votre aide

3 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

Tu n'es pas dans le bon theme ! Tu n'es pourtant pas un nouveau sur VBF !!!

Si ta variable est declarée Public dans un Module elle existera partout dans ton projet

A+
Messages postés
14760
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2021
151
Bonjour

Ne met pas réponse acceptée si ton pb n'est pas solutionné.

Voici un petit code fais rapidement (donc pas forcément parfait) :

private const cFeuilData as string="Feuil1" 'Feuille contenant les données
private const cFeuilRecap as string="Feuil2" 'Feuille des récapitulatif

Private Sub CommandButton2_Click() 'MAJ des données
  dim lShData as object
  dim lShRecap as object
  
  'Mise en cacha des feuilles
  set lShData=sheets(cFeuilData)
  set lShRecap=sheets(cFeuilRecap)
  
  dim i as long
  
  'RAZ des données
  lshrecap.range("A2:B65535").value=empty
  
  i=1
  'Tant que l'on a pas atteint la fin du tableau on continue
  do while cstr(lshdata.cells(i,1).value)<>""
    with ldhrecap.cells(lshdata.cells(i,3)+1,1) 'Eventuellement revoir le _
      positionnement vertical
      .Value=lshdata.cells(i,3)
      .offset(0,1).value=.offset(0,1).value+lshdata.cells(i,2)
    end with
    'Incrémentation !!!! INDISPENSABLE sinon boucle infinie
    i=i+1
  loop
end sub, ----
(Coloration syntaxique automatique par Kenji)

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
La méthode Find que je t'ai proposée sur ton autre message ne convient pas ?
C'est identique, à peu de chose près, à faire une recherche à l'aide de Ctrl-F ou menu Édition / Rechercher

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI