Création d'une action en VBA Excel - Besoin d'aide - VB/VBA/VBS - Programmation
Marsh Posté le 29-01-2013 à 15:56:51
Ce que je comprends tu as tout tes comptes en colonne A que tu veux parcourir pour garder les 3 premiers chiffres
Dim iLigneFin As Integer
iLigneFin = Sheets("Feuil1" ).Range("A65000" ).End(xlUp).Row 'retourne H4 en gros
Dim sNumero AS String
For i = 1To iLigneFin
sNumero = Range("A" & i )
Range("A" & i ) = Left(sNumero ,3)
Next
je sais pas si ça marche c'est la 1ere idée que j'ai là
Marsh Posté le 29-01-2013 à 16:08:20
Ayant compris la même chose que boomy29, je te propose cette solution alternative (même si celle de boomy29 est très bien aussi , mais voilà comment je ferais)
Code :
|
et tu n'as pas besoin du nombre de ligne
Marsh Posté le 29-01-2013 à 16:16:27
Merci Boomy29 et Minimoack !
Je début en VBA donc j'ai énormément de mal à faire ce que je veux.
J'ai essayé de faire en enregistrant la macro avec l'onglet développeur mais je n'avais jamais le résultat escompter.
Je vous remercie de l'aide précieuse que vous m'avez apporter !
Je pense que dans peu de temps j'aurai besoin à nouveau de votre aide...
Marsh Posté le 29-01-2013 à 16:47:53
J'ai encore besoin de vos lumières...
Pardonnez-moi si je suis pénible et que ce que je veux faire relève du basic.
Après avoir réduis le nombre de caractères de mes comptes (grâce à vous), je voudrais faire une action dans une autre feuille.
Je voudrais faire une recherche sur les numéros de compte dans la feuille1 et déterminer leur valeur en feuille2.
Mais ce n'est pas si simple car vu que j'ai réduis le nombre de caractères, j'ai plusieurs compte "601".
Comment puis-je faire ?
Tableau :
......A.......B.......C......D
1....601....1256€
2....601....156€
3....601....85€
4....
5....
6....
Marsh Posté le 29-01-2013 à 16:59:00
Qu'est ce que tu entends par recherche?
genre tu sélectionnes un/des numéro(s) de compte, et tu récupères dans la feuille 2 toutes les valeurs associées à ce/ces numéros de compte?
Désolée, je n'ai pas très bien compris...
Marsh Posté le 29-01-2013 à 17:10:59
Désolée du manque d'explications et de cohérences...
Dans ma feuille 2 j'ai un tableau avec les 3 premiers caractère du comptes, d'où ma première demande pour réduire mes numéros de comptes feuille1.
Ce que je veux faire, c'est comme une recherchev mais en VBA.
Dans ma feuille2, en colonne 1, j'ai par ex : 601.
Donc je veux rechercher dans ma feuille tous le comptes 601 présents en A1 et donner leurs valeurs qui sont en E4
Marsh Posté le 29-01-2013 à 17:12:13
*Correction : Ma recherche se fait en feuille2 et je vais rechercher les valeurs en feuille1
Marsh Posté le 29-01-2013 à 17:13:30
Tu as essayé d'enregistrer une macro pour cette action?
(Je ne suis pas une pro non plus du vba dsl ^^)
Marsh Posté le 29-01-2013 à 17:20:12
J'essaie de faire des choses, mais rien de cohérent ou alors, il y a des erreurs vu que j'ai plusieurs fois le meme nom de compte...
L'ordinateur ne sait pas quelle cellule prendre.
L'idéal je pense, serait de faire une somme des recherche ^^
Marsh Posté le 29-01-2013 à 17:22:53
... je sèche cette fois ci ... je te préviens si une idée me vient
Marsh Posté le 29-01-2013 à 17:48:29
ce que je vois et là j'y vois pas clair
après c'est plus simple de voir avec le fichier
j'aurai fait un somme.si(A:D;601;D)
Marsh Posté le 30-01-2013 à 08:02:00
J'y ai pensé, mais il faut que j'automatise mon calcul et que je le mette sous Visual Basic
Marsh Posté le 30-01-2013 à 08:47:42
Le somme.si(A:D;601;D) ne fonctionne pas car mon 601 est variable, je ne cherche pas toujours ce compte...
Marsh Posté le 30-01-2013 à 09:28:17
Mais si tu remplaces ton 601 par une variable que tu demanderais à l'utilisateur genre :
InputBox("Veuillez saisir le numéro de compte que vous recherchez :", "Choix du compte" )
Marsh Posté le 30-01-2013 à 09:58:53
Clochette0307 a écrit : J'essaie de faire des choses, mais rien de cohérent ou alors, il y a des erreurs vu que j'ai plusieurs fois le meme nom de compte... |
J'ai compris ce que tu voulais mais est-ce que tu pourrai nous dire quel résultat tu veux?
Grosso-modo pour faire ça le plus simple est de le gérer directement en objet. Tu es familière avec les objets ou pas du tout?
Tu peux nous mettre 3 screens? Un de ta feuille 1, l'autre de ta feuille 2 et ce que tu souhaiterai comme résultat. Je te détaillerai ensuite la marche à suivre.
Marsh Posté le 30-01-2013 à 14:32:47
Ce que je veux faire, c'est une recherche sur le numéro de compte, mais vu que j'ai plusieurs fois le même n° de compte qui revient, je voudrais avoir comme résultat : la somme des montants figurant dans mon compte.
Ex : 601 (apparait sur 3 fois dans mon tableau, avec 3 montants différents). Le résultat : la somme de ces 3 montants.
Je débute en VBA donc je ne suis pas très familière avec les objets...
Je suis désolée sh_kyra
Marsh Posté le 30-01-2013 à 14:39:13
Tu demandes à l'utilisateur de choisir un numéro de compte, et tu veux la somme des montants pour ce numéro de compte c'est ça?
Marsh Posté le 30-01-2013 à 14:40:25
Oui minimoack, tous mes 601 sont à la suite.
J'ai fait un imprim écran de ce que je veux, mais je ne sais pas du tout comment poster mon image sur le forum...
Marsh Posté le 30-01-2013 à 14:43:33
Ton idée du message box n'est pas mal, seulement ça prendrait beaucoup trop de temps si je devais le faire compte par compte...
Marsh Posté le 30-01-2013 à 14:53:35
il faudrait peut etre faire une boucle qui parcourt les cellules genre :
For i=0 jusqu'à i=nbligne
Si la valeur de la cellule = la valeur de la cellule précédente alors
on ajoute à total le montant
Sinon,
on insert total dans la feuil2 à un indice j
et on incrémente j
End If
Next i
... je réfléchis pour mettre en forme ce code, mais c'est plutot ça?
Marsh Posté le 30-01-2013 à 15:00:08
Je réfléchis de mon côté également pour mettre en forme ton idée.
Mais à mon avis, ce code est une très bonne idée
C'est un peu comme un SOMME.SI de RECHERCHEV
Merci beaucoup de ton aide minimoack !
Marsh Posté le 30-01-2013 à 15:05:27
Clochette0307 a écrit : Oui minimoack, tous mes 601 sont à la suite. |
Mets là sur un hébergeur d'image en jpg ensuite utilise la balise IMG ([IMG][/IMG])
Si tout est à la suite c'est plus simple, il te faut faire:
Une boucle qui parcours ta colonne de références
Stocker la référence dans une variable
Si la référence courante est différente de la référence précédente (que tu as préalablement stocké) tu ajoutes ta référence et la valeur dans un tableau à deux dimensions
Si elle est identique, tu ajoutes la valeur de ton tableau à la nouvelle valeur et ainsi de suite
Si tu n'arrives pas à mettre des screens ici, tu peux m'envoyer un MP je te donnerai mon mail pour que tu me transmettes ton fichier.
Marsh Posté le 30-01-2013 à 15:06:06
Tiens, voici le début, je pense que ça devrait marcher. Je réfléchis encore pour insérer total dans une autre feuille
Code :
|
Marsh Posté le 30-01-2013 à 15:09:05
Le Range("E"......) est pour le montant. adapte le à ta colonne, j'ai cru comprendre que c'était la E, mais je ne suis pas sure...
La première partie permet de déterminer le nombre de lignes (en supposant qu'il n'y a aucune ligne de sauté, sinon ça ne marche pas)
Marsh Posté le 30-01-2013 à 15:10:23
Je n'avais pas vu ton message sh_kyra, mais ce que j'ai mis fonctionne aussi non?
Marsh Posté le 30-01-2013 à 15:11:17
Wahou, tu es très efficace !
Je ne vais pas si vite, ce n'est pas évident d'être débutant ^^
En fait, je veux faire ma recherche sur mon n° compte qui est en feuille1 et aller chercher mes données dans la feuille2 (N° compte renseigné en colonne A et valeur en colonne E)
Donc mon résultat apparaitra en feuille1
Marsh Posté le 30-01-2013 à 15:12:38
Merci de ton aide sh_kyra !
Mais je ne peux pas joindre mon fichier pour raison de confidentialité...
Marsh Posté le 30-01-2013 à 15:14:53
alors il faudrait peut etre rajouter juste des Feuil1.Range.... mais ceci n'est que supposition...
je ne sais pas trop
Marsh Posté le 30-01-2013 à 15:17:37
J'essaie d'adapter ton code qui me sauve la vie ^^
Après je te dirai si ça marche, car je débute en VBA
Marsh Posté le 30-01-2013 à 15:18:40
Je ne suis pas très expérimentée en VBA non plus, mais ça s'apprend vite
Marsh Posté le 30-01-2013 à 15:21:32
minimoack a écrit : Tiens, voici le début, je pense que ça devrait marcher. Je réfléchis encore pour insérer total dans une autre feuille |
C'est pas mal mais tu fais 2 boucles pour rien..
Quand tu cherches quelque chose avec une boucle, penses aussi à faire un Exit For/Do, pour pas continuer à boucler pour rien.
Code :
|
Marsh Posté le 30-01-2013 à 15:21:40
Je vois ça
J'ai essayé avec l'enregistreur de macro ma recherche alors ça me donne ça
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],BALANCE!C[-2]:C[2],5,FALSE)"
Range("C10" ).Select
Là j'ai uniquement ma recherchev dans une seule cellule pour un seul montant, j'ajoute petit à petit ^^
Marsh Posté le 30-01-2013 à 15:22:53
Clochette0307 a écrit : Merci de ton aide sh_kyra ! |
Tu pouvais aussi m'envoyer la même chose avec des valeurs bidonnées
Bon courage
Marsh Posté le 30-01-2013 à 15:23:18
J'ai à faire à des personnes qui maitrise le VBA !
En tous cas, je vous remercie pour votre aide ! Ca m'enlève une sacré épine du pied, sinon je met beaucoup plus de temps...
Je test vos deux formules et je vous redis
En tous cas : MERCIIIIIIII !
Marsh Posté le 30-01-2013 à 15:24:02
J'avoue que j'aurai pu tout trafiquer et t'envoyer mon dossier
En tous cas, merci beaucoup sh-kyra
Marsh Posté le 30-01-2013 à 15:26:30
aaaaaah ok!
C'est là ou on voit que je débute je n'ai encore jamais utilisé de boucle do, juste des while, for
Le ThisWorkbook est-il nécessaire à chaque fois?
Marsh Posté le 29-01-2013 à 14:55:31
Bonjour le forum,
Après plusieurs jours de recherche, je me permet de me tourner vers vous.
Je suis en train de réaliser une macro et je dois avouer que je galère un peu (je ne suis pas très douée).
J'ai importé des comptes et ceux-ci sont rangés en cellule A.
Cette cellule A peut être variable selon les mois (un compte peut exister ou pas).
J'ai réussi à faire une action VBA Excel dans la cellule H4 de mon tableau qui me détermine combien il y a de lignes dans ma colonne A.
Maintenant, j'aimerai faire une boucle qui répète cette action sur le nombre de lignes.
L'action que je veux faire marche mais il faudrait que je saisisse à la main le nombre de lignes de la colonne A jusqu'à ce qu'il n'y est plus rien.
Ma formule est la suivante :
Ex : A1 = 601120 (n° de compte)
Range("A1" ) = Left([A1],3)
Résultat = 601
Comment faire pour intégrer à cette fonction le nombre de ligne obtenues en H4?
Désolée si je ne suis pas très claire...