[VBA/Excel] Divers questions

kimo -  
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

je suis étudiant en informatique (1ère année) et ce moment je développe pas mal en vba pour mon stage.
N'ayant pas accès au web depuis mon poste en entreprise, j'ai pas mal de problème que je n'arrive pas à résoudre malgré l'aide de office.
Je travaille sur EXCEL 2007 et sur un système windows xp.


Première question :
Dans mon userform1 j'agis sur la valeur d'un label qui se trouve dans mon userform2.
j'ai remarqué ,en faisant une exécution pas à pas , que lorsqu'il doit mettre cette valeur dans le label du userform2, il ne se contente pas que de cela.

Il déclenche le Userform2_Initialize et j'ai pas mal de problème à cause de ça !

Est-il possible de lui demander de mettre la valeur souhaiter dans mon userform2 sans pour autant déclencher l'initialize de celui-ci ?
Si oui, comment ?


Deuxième question :

Mon fichier étant destiné à pas mal de personnes dans l'entreprise , y compris des gens qui n'y connaissent pas grand chose en informatique, j'aurai voulu savoir s'il est possible de permettre le copier/coller dans une textbox, vous me direz "ça fonctionne avec ctrl+c pour copier et ctrl+v pour coller" , oui d'accord je vous l'accorde , mais je pense que ce genre de raccourci ne sont pas connu par tous.
Je pensais plutôt à un clique droit qui affiche la liste habituelle des choix (copier/coller etc..)
Si cela est possible, comment le permettre ?



Troisième question :

Pour ne pas faire long , mon fichier est simple : je demande une saisie dans une userform , et je stocke ces données saisies sur une feuille excel que j'ai appelée "base de donnée" en attribuant à cette saisie une référence.
Cependant cette feuille peut être filtrée par certaines personnes pour obtenir uniquement quelques informations et ne pas voir les autres.
Et c'est ici que se pose le problème car si la personne oublie de retirer son filtre , la prochaine saisie aura pour référence, la dernière référence dans la
liste filtrée et non pas la référence avec la feuille sans filtre .

Pour incrémenter ma référence qui se trouve dans la 1ère collonne, voici mon code très simple :

Sheets("5- Base de données").Select
[a5].Select 'début des données - référence 1

Selection.End(xlDown).Select
refsuiv = ActiveCell.Value + 1
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = UCase(refsuiv)


Y'a-t-il un moyen de s'assurer qu'il n'y a aucun filtre appliquée sur ma feuille ?
Et s'il y'en a , y'a-t-il une fonction qui permet de les retirer ?



Quatrième question :

Structure de ma feuille de base de donnée :

A B C D E F
4 Référence - Département - Date - Auteur - Nb participant - Section
5 1 SAV 08/06/2009 DUPONT M. 1 10
6 2 RH 09/06/2009 DEY K. 1 30
7 3 RH 02/06/2009 ART L. 2 15
8 4 COM 01/06/2009 ERTCK H. 2 20
.
.


Je souhaite faire des statistiques sur le nombre de saisie réalisée par département ou section de façon mensuelle.

Je ne vois pas comment coder ça, la DATE me pose problème, je ne sais pas comment interagir avec elle.

pour moi en langage de haut niveau cela donnerai :

je déclare une variable compteur pour chaque mois, exemple CPTJANV pour le mois de janvier et je l'incrémenterai à chaque référence dont la date est en janvier , mais je ne vois pas du tout comment coder ça.

Merci pour votre aide.
A voir également:

2 réponses

kimo
 
Je viens de trouver une solution pour mon 3ème problème , j'espère que ça pourra aider certains d'entre vous :

If ActiveSheet.AutoFilterMode = True Then
Selection.AutoFilter
End If
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
bonjour

Première question :

Tu mets ta valeur dans une variable publique que tu utilises ensuite dans initialize du userform2.


Deuxième question :

Tu peux ouvrir un formulaire pour simuler la fonction.


Troisième question :

Ce code, qui évite les select, devrait fonctionner
With Sheets("5- Base de données")
    derlig = .Cells(5, 1).SpecialCells(xlCellTypeLastCell).Row
    refsuiv = .Cells(derlig, 1).Value + 1
    .Cells(derlig + 1, 1).Value = UCase(refsuiv)
End With


Quatrième question :

Essaies de générer un tableau croisé dynamique qui est très bien pour cette fonction.
0