|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic [ Archives Visual Basic / J'AI BESOIN D'AIDE !!!! :) ] (Adoc5)
Informations & options pour cette discussion
|
vendredi 25 juin 2004 à 15:32:47 |
Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic

Adoc5
|
Bonjour tout le monde, Je cherche à créer une fonction qui a pour paramètre d'entrée le nom de la colonne Excel. La colonne choisi par l'utilisateur subira ensuite un traitement qq. Comment pourrai-je coder ceci. public function toto (row as ?) ???? Merci d'avance. 
|
|
|
|
vendredi 25 juin 2004 à 15:38:04 |
Re : Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic

ITALIA
|
A mon avis c plus une procedure qu'une Fonction
Public Sub TraitementExcel(ByVal MaColonne As integer)
End Sub
It@li@
|
|
|
|
vendredi 25 juin 2004 à 15:43:37 |
Re : Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic

Adoc5
|
Voila ce que j'ai écrit : Public Sub lissage(ByVal Row As Integer) Dim i As Integer Dim Cellule As Range Cellule.Row = Row Cells(Cellule.Row, 1).Activate While Not ActiveCells.Offset(Cellule.Row, 0).Value = "" ActiveSheet.Cells(Row + 1, i) = (ActiveSheet.Cells(Row, i) + ActiveSheet.Cells(Row, i + 1)) / 2 i = i + 1 Wend End Sub En fait je fait une moyenne 2 à 2 des cellules de la colonne choisi par l'utilisateur. D'une part, je ne suis pas sûr de mon code et d'autre part, je ne sais pas quoi écrire dans Excel pour lancer cette fonction. En conclusion je débute vraiment sur VB et je trime. 
|
|
|
|
vendredi 25 juin 2004 à 16:29:44 |
Re : Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic

Mooiz
|
effectivement il y a quelques petites erreurs : tout d'abord, il faut initialiser i (après les dim par exemple) Ensuite ta boucle est infinie : ActiveCells.Offset(Cellule.Row, 0) ne change pas : si Cellule.Row vaut 1, alors ActiveCells.Offset(Cellule.Row, 0) sera toujours calé à A1. Il faut ajouter l'incrément : while not ActiveCells.Offset(Cellule.Row, i)... D'autre part, avec ce test de sortie, tu vas avoir un pb à la dernière itération : si la dernière valeur se trouve en A3, une fois arrivé à i=3 tu vas tester le contenu de ActiveCells.offset(cellule.row, 3), soit A3, qui va s'avérer non nul, donc tu vas calculer la moyenne entre A3 et A4, A4 etant nul -> ca n'a pas d'intérêt, donc je te conseillerais de tester : | while not ActiveCells.Offset(Cellule.Row, i+1).value="" |
ou encore mieux : | while not ActiveCells.Offset(Cellule.Row, i+1).value="" and not ActiveCells.Offset(Cellule.Row, i).value="" |
comme ca tu teste que les deux champs necessaires pour le calcul sont remplis Enfin, si tu veux calculer les moyennes de A1 et A2, puis A2 et A3 (en supposant que tu aies choisi la colonne A) alors c'est bon. Mais si tu veux calculer la moyenne de A1 et A2, puis A3 et A4, dans ce cas la il faut remplacer i=i+1 par i=i+2 voila Sinon un dernier petit truc (mais ca releve plus de l'esthetique qu'autre chose) : il faudrait uniformiser ta méthode d'accès aux cellules : dans le test de sortie de boucle tu utilises activecells.offset, et dans la boucle, tu passes par activesheet.cells. Ca ne pose pas de problème mais je pense que c'est plus compréhensible de tout faire de la même manière (soit l'un soit l'autre, je n'ai pas assez de conaissances pour dire quelle méthode et préférable). Mais je chipote ;-)
|
|
|
|
lundi 28 juin 2004 à 08:03:01 |
Re : Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic

Adoc5
|
ok, merci beaucoup. Mais ensuite, dans Excel, comment je fait l'appel de cette fonction. Je me place par exemple dans une cellule de la colonne C et j'y écrit =lissage(1) ???? La question peut sembler un peu débile mais c'est la première fois que je programme une fonction en VBA... Merci d'avance à celui ou à celle qui me répondra. 
|
|
|
|
lundi 28 juin 2004 à 08:25:26 |
Re : Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic

Adoc5
|
Pour plus de précisions : J'ai écrit ceci pour mon programme et à priori je pense que ça devrait marcher : Option Explicit Public Sub lissage(ByVal Row As Integer) ' Déclaration des variables Dim i As Integer Dim Cellule As Range i = 1 Cellule.Row = Row Cells(Cellule.Row, 1).Activate While Not ActiveCells.Offset(Cellule.Row, i + 1).Value = "" And Not _ ActiveCells.Offset(Cellule.Row, i).Value = "" ActiveSheet.Cells(Row + 1, i) = (ActiveSheet.Cells(Row, i) + ActiveSheet.Cells(Row, i + 1)) / 2 i = i + 2 Wend End Sub Mais comme je suis un débutant en VBA, je ne sais pas comment le tester. Je me suis placé au début de la colonne C, dans la première cellule et là, j'ai écrit : =lissage(2) 2 car je veux faire la moyenne sur la colonne B. Mais, losque j'écris ceci, dans la colonne C, en résultat, j'au un magnifique #Name?. HAAAAAAAAAA mon Dieu que faire ???? Si tu as une idée, n'hésite pas, car commencer comme ça un Lundi matin ça vous fait froid dans le dos... lol @+ et bonne journée. 
|
|
|
|
lundi 28 juin 2004 à 09:01:00 |
Re : Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic

Mooiz
|
Typiquement, une fonction en VBA s'appelle lors d'un evenement, par exemple clic sur un bouton. Il doit surement exister un moyen pour ajouter une fonction à la bibliothèque excel, mais je ne pense pas que ca passe par VBA. Donc : effectivement ca ne marche pas comme ca. Le plus simple pour commencer, c'est de créer un bouton et de lancer ta procédure lorsque l'utilisateur va cliquer sur le bouton. Pour faire ca, c'est tout bete : après avoir crée le bouton, tu double clique dessus et ca t'écris la procédure qui gère l'évènement "clic sur le bouton" puis ca te positionne directement dedans. Et là tu peux faire appel à ta procedure lissage, par exemple lissage(1). Maintenant, si le clic sur un bouton ne te convient pas, il existe plein d'autres évènements (ouverture du document, ...), à toi de trouver celui qui te convient le mieux Ensuite, si tu veux donner le choix à l'utilisateur de spécifier la colonne à traiter, tu peux commencer avec une boite de dialogue simple en appelant inputbox. Ca va t'ouvrir une boite de dialogue dans laquelle tu pourras donner la valeur de la colonne à traiter. Pour l'appel, tu écris quelque chose comme ca :
dim colonne as variant colonne = inputbox("Colonne à traiter :") lissage(colonne)
Note : j'ai mis colonne en variant car il me semble que inputbox renvoie une chaine de caractère, ce qui n'irait pas avec le paramètre de ta procédure. Plutot que de faire une conversion (et parce que je ne me souviens pas de la fonction qui fais ca !!!) je declare ma variable en variant, comme ca ca passe tout seul. Attention tout de même, avec cet exemple tu peux donner "A" comme valeur à colonne, et dans ce cas, l'appel à lissage(colonne) va effectuer le traitement sur la colonne qui a pour numéro le code ascii de la lettre "A". Donc ce code permet quelques dérives, à manipuler avec précaution. Enfin, si une inputbox ne te suffit pas (c'est vrai que c'est moche) tu peux faire une fenêtre toi même, mais je te laisse découvrir
En esperant avoir répondu à tes questions
|
|
|
|
lundi 28 juin 2004 à 11:42:14 |
Re : Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic

Adoc5
|
non ça marche : Option Explicit Option Base 1 Public Function Lissage(col As Range) ' Déclaration des variables ' cells (ligne,colonne) Dim i As Double, j As Double, rt, nRow As Double On Error GoTo errFound i = 1 While col.Cells(i, 1) <> "" i = i + 1 Wend nRow = i - 1 ReDim rt(1 To nRow, 1) For i = 1 To nRow - 1 rt(i, 1) = (col(i, 1) + col(i + 1, 1)) / 2 Next rt(nRow, 1) = col(nRow, 1) Lissage = rt Exit Function errFound: Lissage = Err.Description End Function c'est la fontion que j'ai faite. Ensuite pour l'utiliser, tu créés une colonne A avec 10 chiffres par exemple, ensuite dans la colonne B tu vas sélectionner 10 cases, dans la partie fx tu écris lissage(la sélection des 10 chiffres de la colonne A) puis tu cliques à la fois sur Ctrl Shift Entrée et là tu as ta moyenne. En fait je raisonne en terme de vecteur verticaux. 
|
|
|
|
lundi 28 juin 2004 à 13:08:32 |
Re : Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic

Adoc5
|
Par contre, j'ai testé ce prog avec des nombres négatifs, et là, ça ne marche plus, si qq'un voit pourquoi, je suis prenneur. 
|
|
|
|
lundi 28 juin 2004 à 13:42:31 |
Re : Aidez-moi !!! je trime sur un truc qui doit être super simple mais j'ai pas le déclic

Mooiz
|
Ok avec une fonction ca marche (c'est toujours bon à savoir ;-) j'ai essayé ta fonction (sous open office, linux oblige) et je suis pas sur qu'elle soit vraiment adaptée : je sais pas ce que fais ctrl+shift+entrée sous excel mais si c'est comme sous OOo (c'est à dire que ca copie la formule que tu à écrit dans toutes les cases sélectionnées), alors tu perds beaucoup de temps : chaque fois que tu appelle ta fonction, tu fais les calculs pour toute ta colonne A. Donc en appelant 10 fois ta fonction, tu calcule 10 fois tes moyennes -> 100 calculs contre 10, c'est pas top optimisé Donc si tu veux l'utiliser comme ca, autant la mettre dans une seule case puis l'executer, ca fera pareil Ensuite je ne sais pas si l'objet range est adapté : si tu ne selectionnes pas toutes les valeurs à traiter plus au moins une case vide, je ne sais pas si tu vas pas sortir en erreur : la boucle a une seule condition d'arrêt : trouver une case vide. Si ton objet range n'ene a pas, alors arrivé à la dernière valeur, je pense que tu vas faire un dépassement d'index sur ton objet range -> plantage (à ce propos, c'est bien d'avoir ajouté une gestion d'erreur). Pour ma part, je choisirais plutot comme paramètre un numéro de colonne (ou alors recupérer le numéro de colonne de ton objet range), comme proposé dans les premières solutions de l'algo, comme ca tu n'as pas à tout selectionner, ca limite les risques d'erreur voila
|
|
|
Cette discussion est classé dans : simple, truc, super, trime, déclic
Répondre à ce message
Sujets en rapport avec ce message
NIX! super le new design mais encore un truc (pas un bug mais une suggestion) [ par BlackWizzard ]
ba oui, now que t'as changé la presentation des codes, tu pourrais en mettre plus par page, non?genre 30 à 50 par page au lieu de 10...ou encore mieux
creer une base de donnees [ par damd ]
salut a tousj'aimerai creer une base de donnees sous visual basic.j'ai deja essayer plein de truc, et rien n'a marché.en fait je veut un truc simple :
Un truc tout simple... [ par syltouille ]
Voila je voulais savoir comment faire un petit exercice tout simple.J'ai un formulaire avec 2 boutons, un pour compter et l'autre pour arreter de comp
vérifier format d'une chaine (général) [ par themaste ]
Slt a tous!!Voila en fait j'aimerais faire un truc tout simple, dont je n'ai pas trouver la solution en cherchant ds les posts.En fait, j'ai trouve pl
Probleme de TreeView [ par freddy1787 ]
Salut TLM,Bonjour je cherche un code super super simple pour pouvoir enregistrer le contenu d'une TreeView dans un fichier text.J'en ai deja trouve un
UN TRUC TOUT SIMPLE: Formulaire VB pour BD Excell [ par sofitux ]
Je ne suis pas dévelopeuse et je suis nulle en informatiqueJ'ai une BD sur EXcel et j'aimerai créer un formulaire VB pour que les utilisateurs du fich
truc tout simple [ par Miss_Am ]
En fait voila je débute en vba et je voulais savoir comment faire ca.....Je suis sure que c tout simple....Je doit faire un devis pour de la location
question super simple ! [ par Homer Simpson ]
comment dupliquer un fichier et renommer le fichier destinataire ?Merci
VB.net : Faire un Splitter !!! [ par fabts ]
Bonjour à tous,je débute en VB.net, et j'aimerais faire un splitter. J'ai trouvé plein de truc, VB 6.0, des fois un peu de .net, mais je comprend que
VB.net : faire un Splitter [ par fabts ]
Bonjour à tous,je débute en VB.net, et j'aimerais faire un splitter. J'ai trouvé plein de truc, VB 6.0, des fois un peu de .net, mais je comprend que
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|