Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2152 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Création d'une action en VBA Excel - Besoin d'aide

 



 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Page Précédente
Auteur Sujet :

Création d'une action en VBA Excel - Besoin d'aide

n°2173066
Clochette0​307
Posté le 29-01-2013 à 14:55:31  profilanswer
 

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...

mood
Publicité
Posté le 29-01-2013 à 14:55:31  profilanswer
 

n°2173089
boomy29
PSN: tintine29
Posté le 29-01-2013 à 15:56:51  profilanswer
 

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à

n°2173097
minimoack
Posté le 29-01-2013 à 16:08:20  profilanswer
 

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  :D , mais voilà comment je ferais)  
 

Code :
  1. 'On sélectionne la colonne
  2. Columns("A:A" ).Select
  3. 'On parcours la sélection
  4. For Each Cell In Selection
  5.     'Si la cellule n'est pas vide
  6.      If Cell.Value <> "" Then
  7.             Cell.Value = Left(Cell.Value, 3)
  8.      End If
  9. Next Cell


 
et tu n'as pas besoin du nombre de ligne

n°2173099
Clochette0​307
Posté le 29-01-2013 à 16:16:27  profilanswer
 

Merci Boomy29 et Minimoack ! :D
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...

n°2173106
boomy29
PSN: tintine29
Posté le 29-01-2013 à 16:44:24  profilanswer
 

De rien

n°2173107
Clochette0​307
Posté le 29-01-2013 à 16:47:53  profilanswer
 

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....

n°2173113
minimoack
Posté le 29-01-2013 à 16:59:00  profilanswer
 

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... :(

n°2173116
Clochette0​307
Posté le 29-01-2013 à 17:10:59  profilanswer
 

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

n°2173117
Clochette0​307
Posté le 29-01-2013 à 17:11:32  profilanswer
 

Ma recherche se ferai en feuille1

n°2173118
Clochette0​307
Posté le 29-01-2013 à 17:12:13  profilanswer
 

*Correction : Ma recherche se fait en feuille2 et je vais rechercher les valeurs en feuille1

mood
Publicité
Posté le 29-01-2013 à 17:12:13  profilanswer
 

n°2173119
minimoack
Posté le 29-01-2013 à 17:13:30  profilanswer
 

Tu as essayé d'enregistrer une macro pour cette action?
(Je ne suis pas une pro non plus du vba dsl ^^)

n°2173121
Clochette0​307
Posté le 29-01-2013 à 17:20:12  profilanswer
 

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 ^^

n°2173122
minimoack
Posté le 29-01-2013 à 17:22:53  profilanswer
 

... je sèche cette fois ci  :sweat: ... je te préviens si une idée me vient  :wahoo:

n°2173123
boomy29
PSN: tintine29
Posté le 29-01-2013 à 17:48:29  profilanswer
 

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)


Message édité par boomy29 le 29-01-2013 à 17:48:56

---------------
[Ach] Just dance + cam PS4
n°2173200
Clochette0​307
Posté le 30-01-2013 à 08:02:00  profilanswer
 

J'y ai pensé, mais il faut que j'automatise mon calcul et que je le mette sous Visual Basic

n°2173208
Clochette0​307
Posté le 30-01-2013 à 08:47:42  profilanswer
 

Le somme.si(A:D;601;D) ne fonctionne pas car mon 601 est variable, je ne cherche pas toujours ce compte...

n°2173210
minimoack
Posté le 30-01-2013 à 09:28:17  profilanswer
 

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" )

n°2173212
minimoack
Posté le 30-01-2013 à 09:28:26  profilanswer
 

?

n°2173219
sh_kyra
Entre nous c'est Kyra
Posté le 30-01-2013 à 09:58:53  profilanswer
 

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...
L'ordinateur ne sait pas quelle cellule prendre.
L'idéal je pense, serait de faire une somme des recherche ^^


 
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.
 
 

n°2173313
Clochette0​307
Posté le 30-01-2013 à 14:32:47  profilanswer
 

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

n°2173315
minimoack
Posté le 30-01-2013 à 14:39:13  profilanswer
 

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?


Message édité par minimoack le 30-01-2013 à 14:42:27
n°2173318
Clochette0​307
Posté le 30-01-2013 à 14:40:25  profilanswer
 

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...

n°2173319
Clochette0​307
Posté le 30-01-2013 à 14:43:33  profilanswer
 

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...

n°2173322
minimoack
Posté le 30-01-2013 à 14:53:35  profilanswer
 

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?

n°2173324
Clochette0​307
Posté le 30-01-2013 à 15:00:08  profilanswer
 

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 :D
C'est un peu comme un SOMME.SI de RECHERCHEV
Merci beaucoup de ton aide minimoack !

n°2173325
sh_kyra
Entre nous c'est Kyra
Posté le 30-01-2013 à 15:05:27  profilanswer
 

Clochette0307 a écrit :

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...


 
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.

n°2173326
minimoack
Posté le 30-01-2013 à 15:06:06  profilanswer
 

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 :
  1. Dim Cell As Variant
  2. Dim nbLignes As Integer
  3. Dim fin As Boolean
  4. nbLignes = 0
  5. fin = False
  6. Columns("A:A" ).Select
  7. While fin = False
  8.     For Each Cell In Selection
  9.         If Cell.Value <> "" Then
  10.             nbLignes = nbLignes + 1
  11.         Else
  12.             fin = True
  13.         End If
  14.     Next Cell
  15. Wend
  16. Dim i As Integer
  17. Dim j As Integer
  18. Dim total As Double
  19. total = 0
  20. j = 0
  21. For i = 2 To nbLignes
  22.     If (Range("A" + i).Value = Range("A" + i - 1).Value) Then
  23.         total = total + Range("E" + i).Value
  24.     Else
  25.         'on met la valeur de total dans une autre feuille dans un rang j
  26.         '...
  27.     End If
  28. Next

n°2173328
minimoack
Posté le 30-01-2013 à 15:09:05  profilanswer
 

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)

n°2173329
minimoack
Posté le 30-01-2013 à 15:10:23  profilanswer
 

Je n'avais pas vu ton message sh_kyra, mais ce que j'ai mis fonctionne aussi non? :)

n°2173330
Clochette0​307
Posté le 30-01-2013 à 15:11:17  profilanswer
 

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

n°2173332
Clochette0​307
Posté le 30-01-2013 à 15:12:38  profilanswer
 

Merci de ton aide sh_kyra !
Mais je ne peux pas joindre mon fichier pour raison de confidentialité...

n°2173335
minimoack
Posté le 30-01-2013 à 15:14:53  profilanswer
 

alors il faudrait peut etre rajouter juste des Feuil1.Range.... mais ceci n'est que supposition...
je ne sais pas trop

n°2173336
Clochette0​307
Posté le 30-01-2013 à 15:17:37  profilanswer
 

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

n°2173337
minimoack
Posté le 30-01-2013 à 15:18:40  profilanswer
 

Je ne suis pas très expérimentée en VBA non plus, mais ça s'apprend vite :D

n°2173338
sh_kyra
Entre nous c'est Kyra
Posté le 30-01-2013 à 15:21:32  profilanswer
 

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 :
  1. Dim IndexFeuille1 As Long
  2. Dim IndexFeuille2 As Long
  3. Dim ReferencePrecendente As String
  4. ReferencePrecendente = ""
  5. Do While Not ThisWorkbook.Worksheets(NOM_DE_TA_FEUILLE).Cells(IndexFeuille1, 1).Value = ""
  6.     'Tu vérifies si la référence précédente
  7.     If ThisWorkbook.Worksheets(NOM_DE_TA_FEUILLE).Cells(IndexFeuille1, 1).Value = ReferencePrecendente Then
  8.         'Tu ajoutes la nouvelle valeur à l'ancien total de valeur stocké dans la feuille 2
  9.         ThisWorkbook.Worksheets(NOM_DE_TON_AUTRE_FEUILLE).Cells(IndexFeuille2, 2).Value = ThisWorkbook.Worksheets(NOM_DE_TON_AUTRE_FEUILLE).Cells(IndexFeuille2, 2).Value + ThisWorkbook.Worksheets(NOM_DE_TA_FEUILLE).Cells(IndexFeuille1, 2).Value
  10.     Else
  11.         'Tu incrémentes l'index 2, vu que tu ajoutes une nouvelle ligne de valeur
  12.         IndexFeuille2 = IndexFeuille2 + 1
  13.         'Tu copies la référence
  14.         ThisWorkbook.Worksheets(NOM_DE_TON_AUTRE_FEUILLE).Cells(IndexFeuille2, 1).Value = ThisWorkbook.Worksheets(NOM_DE_TA_FEUILLE).Cells(IndexFeuille1, 1).Value
  15.         'Puis la valeur
  16.         ThisWorkbook.Worksheets(NOM_DE_TON_AUTRE_FEUILLE).Cells(IndexFeuille2, 2).Value = ThisWorkbook.Worksheets(NOM_DE_TA_FEUILLE).Cells(IndexFeuille1, 2).Value
  17.     End If
  18.     IndexFeuille1 = IndexFeuille1 + 1
  19.     'Tu stockes la référence précédente pour la prochaine comparaison
  20.     ReferencePrecendente = ThisWorkbook.Worksheets(NOM_DE_TA_FEUILLE).Cells(IndexFeuille1, 1).Value
  21. Loop


 

n°2173339
Clochette0​307
Posté le 30-01-2013 à 15:21:40  profilanswer
 

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 ^^

n°2173340
sh_kyra
Entre nous c'est Kyra
Posté le 30-01-2013 à 15:22:53  profilanswer
 

Clochette0307 a écrit :

Merci de ton aide sh_kyra !
Mais je ne peux pas joindre mon fichier pour raison de confidentialité...


 
Tu pouvais aussi m'envoyer la même chose avec des valeurs bidonnées ;)
 
Bon courage

n°2173341
Clochette0​307
Posté le 30-01-2013 à 15:23:18  profilanswer
 

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 !

n°2173342
Clochette0​307
Posté le 30-01-2013 à 15:24:02  profilanswer
 

J'avoue que j'aurai pu tout trafiquer et t'envoyer mon dossier
En tous cas, merci beaucoup sh-kyra

n°2173343
minimoack
Posté le 30-01-2013 à 15:26:30  profilanswer
 

aaaaaah ok!  
 
C'est là ou on voit que je débute :D je n'ai encore jamais utilisé de boucle do, juste des while, for :)
 
Le ThisWorkbook est-il nécessaire à chaque fois?

Message cité 1 fois
Message édité par minimoack le 30-01-2013 à 15:27:03
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Création d'une action en VBA Excel - Besoin d'aide

 

Sujets relatifs
[VBS] Script Language problème aide svpsauvegarder en session une action .Class Jquery
Aide VBA, Somme de chaque ligne d'un tableauAide pour Macro Excel
javascript : besoin de modifier une iframe crossDomainProblème TPE Création d'un site web dynamique
Aide: dérouler un menuGénérateur de chiffres à la suite d'une formule
Plus de sujets relatifs à : Création d'une action en VBA Excel - Besoin d'aide


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR