problème de filtre vba macro Excel

problème de filtre vba macro Excel - VB/VBA/VBS - Programmation

Marsh Posté le 21-07-2009 à 17:03:02    

Bonjour, je suis un débutant sur vba et j'aimerais de l'aide , en remerciant les gens qui prendront un peu de temps pour moi ...  
 
Mon but est d'obtenir une macro qui filtre certain titre dans la colonne A puis d'aller chercher et de les sommes les élément correspondant de la colonne B pour écrire la somme dans un autre fichier  
 
ex  
col A       Col B  
titre A  
                  1  
                  4  
 
titre B  
                 5  
                 2  
                 4  
titre C  
                 8  
                  7  
 
Ici par exemple si je selectionne le titre B je devrais optenir 11  
 
 
voici ce que j'ai écris :  
 
Sub macro_filtre()  
 
Dim i As Integer  
i = 2  
MsgBox Workbooks(1).Worksheets(1).Range("A" & i).Value  
'Workbooks(1).Worksheets(1).Range("A1" ).AutoFilter  
For i = 2 To Workbooks(1).Worksheets(1).Rows.Count  
Range("A" & i).AutoFilter Field:=1, Criteria1:="*B*", Operator:=xlAnd, Criteria2:=""  
'Pour filtrer les enregistrements non vides  
Next  
'boucle sur les filtres de la feuille  
With .AutoFilter.Filters  
MsgBox Application.WorksheetFunction.Subtotal(9, Columns(2))  
' additionne les cellules visibles de la colonne B.  
 
End If  
 
 
End Sub  
 
 
En vous remerciant ....  

Reply

Marsh Posté le 21-07-2009 à 17:03:02   

Reply

Marsh Posté le 21-07-2009 à 17:54:53    

Bonjour
 
Avec un filtre et des données comme cela tu ne t'en sortiras pas.
Il faudrait que tu ai :
col A       Col B  
titre A  
titre A         1  
titre A         4  
 
titre B  
titre B         5  
titre B         2  
titre B         4
 
Il faudra donc passer par une macro, qui tant que le titre ne change pas il somme la colonne d'a coté.
Pas bien dur.
 
Question, tu veux un tableau recapitulatif de tous tes titres ?
Ou tu veux par exemple savoir la somme pour titre A ? Genre une fonction : =SommeTitre("Titre A" ) et ca te renvoie 5 ?
 
Explique un peu mieux le deroulement si tu veux de l'aide. En tout cas de ma part.
 
Cordialement


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-07-2009 à 19:25:39    

SuppotDeSaTante a écrit :


 
Merci beaucoup d'avoir répondu deja !  
Vous avez sans doute raison , j'aimerais pouvoir choisir la somme à calculer en choisissant le titre ( A , B , ou c ici )
 
 
Pour faire simple disons que mes titres sont dans la colonne A et les chiffres dans la colonne B , sachant que le nombre de chiffre à chaque fois en fonction des titres   (on ne peut pas  coder en dur )
J'aimerais par exemple choisir le titre A et avoir uniquement la somme des chiffre correspondant ...
 
merci encore de vouloir m'aider  
 
 
Cordialement


Reply

Marsh Posté le 21-07-2009 à 23:17:47    

Ok je zieute ca demain, mes noeils-noeils tombent tout seuls


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-07-2009 à 09:17:56    

excuse moi encore ,dje69r ^^ , mais j'ai aussi une 3 eme colonne ou il y a des noms ... en face de chaque nombre de la colonne B , et la cerise sur le gateau ... serait de copier just l'ensemble des noms  correspondant aux nombres sommés et de les mettre en commentaire dans la case ou l'on a somme les nombres (ici 5,2,4 par exemple)
ie on aurait dans la case cible 11 avec en commentaire dans la cellule ( "nom A" correspondant au 5, "nom B" correspondant au 2, "nom C " correspondant au 4)
 
réussi uniquement , à mettre des commentaire simple :(  
 
With Workbooks("cible" ).Worksheets("PREVIADE" ).Cells(1, AddComment
    .Visible = False
    .Text "texte à remplir"
End With
 
En te remerciant encore  
cordialement

Reply

Marsh Posté le 22-07-2009 à 11:08:19    

A tes souhaits... :D
 
Pas tout compris...
 
Je requepepete depuis le bédut :
On somme la colonne B en fonction du titre que tu choisis ?
Genre tu mets "Titre A" et ca te renvoit 5
 
Question, le 5 ca doit te le mettre ou ?
Et ton commentaire, par exemple pour "nom B", il sort d'ou le "2" ?
 
Montres moi peut etre soit un bout de tableau réél, soit ton tableau avec les 3 colonnes modifié ?


Message édité par SuppotDeSaTante le 22-07-2009 à 11:09:22

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-07-2009 à 11:19:48    

Re!  , l'ideal c'est de le copier dans un fichier cible.xls , onglet 1 , case 1  , apres je serais faire lol ...  
En ce qui concerne les nom , en faite , chaque chiffre correspond une prime d'assurance .... et donc un nom du bénéficiaire qui dans une autre colonne (ex ici C ) mais à la même ligne que le chiffre .. je souhaite  ouvrir un commentaire dans le fichier cible onglet 1 case 1 en mettant tous les noms correspondant ou les montant ont été choisis ...
 
merci encore ...
 
ps : le 2 correspondant au 2eme chiffre du titre B

Reply

Marsh Posté le 22-07-2009 à 11:23:59    

Résumons tous ^^ , il y a 3 colonne  : col A : titre  en faite correspond aux partenaires.., col B : motant des primes , col C  nom du bénéficiare...
 
J'aimerais pouvoir choisir  le nom du partenaire : la macro sommerait toutes les primes de la col B dans le fichier cible et ajouterait en commentaire dans la même cellule , le nom de tous les bénéficiares choisis dans la colonne B  

Reply

Marsh Posté le 22-07-2009 à 11:31:46    

Ah oui donc tu veux que le resultat aille dans un autre fichier ?
 
Ce fichier est il ouvert au moment de l'execution de la macro ou faut il l'ouvrir ? Est-ce toujours le meme ?
 
Il faut un max de precisions tu sais...


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-07-2009 à 11:46:02    

heu excuse moi j'ai pas trop précisé cela ,car je sais me faire .. mais disons que le fichier n'est pas ouvert et l'deal serait de chosir l'emplacement cible pour le partenaire A  par exemple  cell (1 ,1 )
le partenaire B cell (1,2)  etc  
 
cordialement  
 

Reply

Marsh Posté le 22-07-2009 à 11:46:02   

Reply

Marsh Posté le 22-07-2009 à 12:10:30    

:o  

  • Bah écoute je ne sais pas ce que tu veux dire par :

    foxley_gravity a écrit :

    heu excuse moi j'ai pas trop précisé cela ,car je sais me faire ..


  • Tu ne donnes aucune infos ou presque.
  • Je pose des questions, ce n'est pas pour rien. Pour preuve, je te demande si tu as besoin d'une somme et d'une seule, tu réponds par l'afirmative, pour finalement t'entendre dire :
foxley_gravity a écrit :

que l'deal serait de chosir l'emplacement cible pour le partenaire A  par exemple  cell (1 ,1 )  
le partenaire B cell (1,2)  etc


  • C'est un forum d'entraide et non pas 'voila mon souci, on peut le faire ? Merci. Par contre je peux pas donner d'infos car c'est taupe secret et vous etes tellement fort que vous pouvez deviner ce que j'ai sur mon ecran'
  • 10 Messages pour comprendre et exprimer ce que tu souhaites...
  • S'exprimer en Français, relire son post, et l'aérer c'est le minimum


Bon comme j'avais planché dessus, je te mets la fonction vite faite.  
Elle renvoit la somme en fonction du 'partenaire'

Code :
  1. Function foxley_gravity(Titre)
  2. DerniereLigne = Range("A65536" ).End(xlUp).Offset(1, 0).Row
  3. DerniereLigne2 = Range("B65536" ).End(xlUp).Offset(1, 0).Row
  4. DepartLigne = 0
  5. For i = 1 To DerniereLigne
  6.     If Cells(i, 1).Value = Titre Then DepartLigne = i
  7. Next i
  8. If DepartLigne = 0 Then Exit Function
  9. For x = DepartLigne To DerniereLigne2
  10.     If Cells(x + 1, 1).Value <> Cells(x, 1).Value And Cells(x + 1, 1).Value <> "" Then
  11.         foxley_gravity = Evaluate("SUM(B" & DepartLigne & ":B" & x & " )" )
  12.         Exit Function
  13.     End If
  14. Next x
  15. foxley_gravity = Evaluate("SUM(B" & DepartLigne & ":B" & DerniereLigne2 & " )" )
  16. End Function


 
Fin du caca nerveux :D


Message édité par SuppotDeSaTante le 22-07-2009 à 12:11:40

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-07-2009 à 12:30:35    

Excuse moi , c'est mon premier post , je suis désolé si j'avais été imprécis ... je voulais éssayer de simplifier au maximun pour être le plus facilement comprehensible , deja que je me perd tout seul lol .... désolé encore ^^  
 
J'ai a peu pres compris ce que tu as écris ...la somme du partenaire choisi va dans foxley gravity , tu me dis si c'est bon je vais faire , je vais essayer de copier les sommes du partenaire A  dans la cellule (1,1) du nouveau fichier et copier celle du partenaire B dans la cellule (1.2)
Pour le partenaire A  :  
 
Function foxley_gravity(Titre)
 
Workbooks.Open Filename:="cible.xls"
Workbooks.Open Filename:="source.xls"  
 
'la ou il y a les données sur les partenaires...
 
Workbooks("source.xls" ).Worksheets(1).activate
 
DerniereLigne = Range("A65536" ).End(xlUp).Offset(1, 0).Row
DerniereLigne2 = Range("B65536" ).End(xlUp).Offset(1, 0).Row
DepartLigne = 0
 
For i = 1 To DerniereLigne
    If Cells(i, 1).Value = PARTENAIRE A Then DepartLigne = i
Next i
 
If DepartLigne = 0 Then Exit Function
 
For x = DepartLigne To DerniereLigne2
    If Cells(x + 1, 1).Value <> Cells(x, 1).Value And Cells(x + 1, 1).Value <> "" Then
       
foxley_gravity  = Evaluate("SUM(B" & DepartLigne & ":B" & x & " )" )
     
 
Exit Function
    End If
Next x
 
Workbooks("source.xls" ).Worksheets("1" ).Cells(1, 1).value= Evaluate("SUM(B" & DepartLigne & ":B" & DerniereLigne2 & " )" )
 
End Function
 
 
cordialement en te remerciant

Reply

Marsh Posté le 22-07-2009 à 14:22:19    

T'inquiètes j'ai vu, d'ou mon smiley a la fin de mon post.
 
Déjà, utilises les balises cpp ou quote (entre crochet) pour mettre le code, c'est plus lisible :
[ cpp]Ton code[ /cpp]
(Sans espace dans les balises)
 
En fait non, ton code ne me semble pas bon.
 
Car tu veux mettre la somme dans le fichier cible et pas le fichier source. Et tu dois sommer dans la source pour le mettre sur la cible.
 
Ensuite tu as oublié dans la seconde boucle de justement definir la somme dans le fichier cible.
C'est une fonction, tu n'as donc pas besoin de mettre en dur le partenaire (qui d'ailleurs est mal saisi puisqu'une chaine se met entre double cote " donc ca serait "PARTENAIRE A"), puisqu'il est passé en paramatre de la fonction avec la variable Titre : Function foxley_gravity(Titre)
 
Sinon tu peux aussi passer par une boite de dialogue qui te demande quel partenaire sommer.
 
Et si tu veux appeler la macro avec les boutons d'Excel, mets ca en Sub
 
Je te mets ca dans l'exemple qui suit avec la correspondance de couleur entre explication ci haut et le code :
 

Code :
  1. Sub foxley_gravity()
  2. 'Ouvre une boite de dialogue qui t'invite a saisir le partenaire
  3. Titre = InputBox("Veuillez saisir le partenaire à sommer", "Saisie du partenaire" )
  4. Workbooks.Open Filename:="cible.xls"
  5. Workbooks.Open Filename:="source.xls"
  6. 'la ou il y a les données sur les partenaires...
  7. Workbooks("source.xls" ).Worksheets(1).Activate
  8. DerniereLigne = Range("A65536" ).End(xlUp).Offset(1, 0).Row
  9. DerniereLigne2 = Range("B65536" ).End(xlUp).Offset(1, 0).Row
  10. DepartLigne = 0
  11. For i = 1 To DerniereLigne
  12.     If Cells(i, 1).Value = Titre Then DepartLigne = i
  13. Next i
  14. If DepartLigne = 0 Then Exit Function
  15. For x = DepartLigne To DerniereLigne2
  16.     If Cells(x + 1, 1).Value <> Cells(x, 1).Value And Cells(x + 1, 1).Value <> "" Then
  17.         'Somme dans le fichier cible
  18.                 foxley_gravity = Evaluate("SUM([Cible]FeuilCible!B" & DepartLigne & ":B" & x & " )" )
  19. Workbooks("cible.xls" ).Worksheets("1" ).Cells(1, 1).Value = Evaluate("SUM([Source]FeuilleCible!B" & DepartLigne & ":B" & x & " )" )
  20.         Exit Sub
  21.     End If
  22. Next x
  23. 'Somme dans le fichier cible pour la derniere ligne de partenaire
  24. Workbooks("cible.xls" ).Worksheets("1" ).Cells(1, 1).Value = Evaluate("SUM([Source]FeuilleCible!B" & DepartLigne & ":B" & DerniereLigne2 & " )" )
  25. End Sub


Message édité par SuppotDeSaTante le 22-07-2009 à 14:40:03

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-07-2009 à 14:41:57    

Ok merci beucoup vraiment ...et pour ce qui concerne les commentaires :( ^^  
 
En ce qui concerne les nom , en faite , chaque chiffre(prime) correspond un nom d'un bénéficiaire qui dans une autre colonne (ex ici C ) mais à la même ligne que le chiffre .. je souhaite  ouvrir un commentaire dans le fichier cible onglet 1 case 1 qui vient d'etre calculé en mettant tous les noms correspondant  
 
Pour l'instant j'arrive jusque à cré un commentaire lol  ,c'est deja ca :(
 
With Workbooks("cible" ).Worksheets("PREVIADE" ).Cells(1, AddComment  
    .Visible = False  
    .Text "texte à remplir"  
End With  
 
merci encore ...  
 
 
 
 
 

Reply

Marsh Posté le 22-07-2009 à 15:08:43    

J'ai du editer mon post pendant que tu ecrivais, verifie.
 
Je passe par une variable Rtat pour stocker la somme, vu qu'on la remploie ailleurs, ca ferait trop long de retaper "SUM(" etc.
 
Pour les commentaires, nouveautés en gras :
 

Code :
  1. Sub foxley_gravity()
  2. 'Ouvre une boite de dialogue qui t'invite a saisir le partenaire
  3. Titre = InputBox("Veuillez saisir le partenaire à sommer", "Saisie du partenaire" )
  4. Workbooks.Open Filename:="cible.xls"
  5. Workbooks.Open Filename:="source.xls"
  6. 'la ou il y a les données sur les partenaires...
  7. Workbooks("source.xls" ).Worksheets(1).Activate
  8. DerniereLigne = Range("A65536" ).End(xlUp).Offset(1, 0).Row
  9. DerniereLigne2 = Range("B65536" ).End(xlUp).Offset(1, 0).Row
  10. DepartLigne = 0
  11. For i = 1 To DerniereLigne
  12.     If Cells(i, 1).Value = Titre Then DepartLigne = i
  13. Next i
  14. If DepartLigne = 0 Then Exit Function
  15. For x = DepartLigne To DerniereLigne2
  16.     If Cells(x + 1, 1).Value <> Cells(x, 1).Value And Cells(x + 1, 1).Value <> "" Then
  17.         'Somme dans le fichier cible
  18.         Rtat=Evaluate("SUM([Source]FeuilleCible!B" & DepartLigne & ":B" & x & " )" )
  19.         Workbooks("cible.xls" ).Worksheets("1" ).Cells(1, 1).Value = Rtat
  20.         TextPartenaires = TextPartenaires & ": " & Rtat
  21.  
  22.         Exit Sub
  23.     End If
  24. Next x
  25. 'Somme dans le fichier cible pour la derniere ligne de partenaire
  26. Rtat=Evaluate("SUM([Source]FeuilleCible!B" & DepartLigne & ":B" & DerniereLigne2 & " )" )
  27. Workbooks("cible.xls" ).Worksheets("1" ).Cells(1, 1).Value = Rtat
  28. TextPartenaires = TextPartenaires & ": " & Rtat
  29. Workbooks("cible.xls" ).Worksheets("PREVIADE" ).Cells(1,1).AddComment TextPartenaires
  30. End Sub


Message édité par SuppotDeSaTante le 22-07-2009 à 15:09:30

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-07-2009 à 16:14:44    

Re :)  
 
Excuse moi , au fur et à mesure je vais corser la dificulté  du programme lol , non je fais pas expres :p ,  
Le programme plante la : If DepartLigne = 0 Then Exit Sub  
erreur de compilation  
 
Les premiers chiffre sont 5 ligne en dessous du titre... est ce si le programme lit des string il plantera non ?  
Je n'ai pas vu ou indiquer la colonne des noms des sinistrés pour écrire le commentaire.
 
 
Sub forum()
 
Workbooks.Open Filename:="D:\Documents and Settings\x7001\Bureau2008Sinistres02062009.xls"
Workbooks.Open Filename:="D:\Documents and Settings\x7001\source.xls"
 
'la ou il y a les données sur les partenaires...
Workbooks("D:\Documents and Settings\x7001\Bureau2008Sinistres02062009.xls" ).Worksheets(1).Activate
 
DerniereLigne = Range("A65536" ).End(xlUp).Offset(1, 0).Row
DerniereLigne2 = Range("B65536" ).End(xlUp).Offset(1, 0).Row
DepartLigne = 0
 
'J'ai voulu mettre la case contenant PREVI MUTUEL avec les **
'j'espere que c'est bon  
 
For i = 1 To DerniereLigne
    If Cells(i, 1).Value = "*PREVI  MUTUEL*" Then DepartLigne = i
Next i
 
If DepartLigne = 0 Then Exit Sub
 
For x = DepartLigne To DerniereLigne2
    If Cells(x + 1, 1).Value <> Cells(x, 1).Value And Cells(x + 1, 1).Value <> "" Then
        'Somme dans le fichier cible
        Rtat = Evaluate("SUM([Source]FeuilleCible!B" & DepartLigne & ":B" & x & " )" )
        Workbooks("cible.xls" ).Worksheets(1).Cells(1, 1).Value = Rtat
        TextPartenaires = TextPartenaires & ": " & Rtat
 
        Exit Sub
    End If
Next x
 
'Somme dans le fichier cible pour la derniere ligne de partenaire
Rtat = Evaluate("SUM([Source]FeuilleCible!B" & DepartLigne & ":B" & DerniereLigne2 & " )" )
Workbooks("cible.xls" ).Worksheets(1).Cells(1, 1).Value = Rtat
TextPartenaires = TextPartenaires & ": " & Rtat
Workbooks("cible.xls" ).Worksheets("PREVIADE" ).Cells(1, 1).AddComment TextPartenaires
 
 
End Sub

Reply

Marsh Posté le 22-07-2009 à 16:29:21    

C'est bien le probleme, les problematiques arrivent dans le desordre...
D'ou mes questions initiales...
 
Non, tu ne peux pas prendre comme ca, les valeurs contenant "PREVI  MUTUEL"
Ensuite, pourquoi as tu enlevé l'inputbox ?
 
Tu pars trop dans tous les sens sans tester ce que je te donne.
 
Pour les chiffres 5 lignes en dessous, il etait temps de le dire... C'est DepartLigne qui le defini, un +4 devrait faire l'affaire.
 
Pour le reste, il va falloire au moins tester un bout avant de me balancer un code qui vraissemblablement ne fonctionne/era pas.
 
Je t'ai demandé :
Si tu ne cherchais que pour un seul et un seul 'titre' qui en fait sont des partenaires. Tu me dis oui, puis finalement tu veux faire une recherche avec du "contient"
Le nom de tes deux fichiers
L'endroit ou tu voulais que la somme aille
Comment etait fait le tableau (qui finalement a changé)
Etc.
Je n'ai pas les infos, je ne vais pas modifier a chaque fois le code que je te fais, parceque tu omets ou ne veux pas me donner toutes les infos.
C'est pas possible de bosser comme ca, du moins pour moi.
Il faut etre carré un minimum et ne pas partir dans tous les sens.
Pose ton probléme, tes besoins, ce que tu souhaites CONCRETEMENT faire et je repasserai


Message édité par SuppotDeSaTante le 22-07-2009 à 16:35:09

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-07-2009 à 20:09:38    

je t'es envoyé un mail pour t'expliquer completement le  probleme :)  
bonne soirée

Reply

Marsh Posté le 23-07-2009 à 15:42:13    

Bonjour  
 
Représentation du tableau
 
 
           col1 col2 col3 col4           col5  col 6
ligne 01  
ligne 02            titre A 16 Durand Dupond Duchemol
ligne 03
ligne 04 col1 col2 col3    
ligne 05 titre A      
ligne 06         1 Durand    
ligne 07         5 Dupond    
ligne 08        10 Duchemol    
ligne 09 titre B      
ligne 10        10 Ratatouille    
ligne 11        11 Ducon    
     
 
Utilisation  
dans le cellule ligne 2 colonne 4 saisie ton titre ( titre A)
attention de bien saisir (bdc cap espace)
 
execute la macro dudule que voici

Code :
  1. Sub dudule()
  2. last_line = Cells(65536, 3).End(xlUp).Row
  3. start_line = 5
  4. Dim tab1
  5. Set tab1 = CreateObject("Scripting.Dictionary" )
  6. old_cle = ""
  7. For ligne = start_line To last_line
  8.     If Cells(ligne, 1) = "" Then
  9.         cle = old_cle
  10.     Else
  11.         cle = Cells(ligne, 1)
  12.         old_cle = cle
  13.     End If
  14.    
  15.     If Cells(ligne, 2) <> 0 Then
  16.         If tab1.exists(cle) Then
  17.             tmp = tab1(cle)
  18.             tmp(0) = tmp(0) + Cells(ligne, 2) ' cumul des sommes
  19.             tmp(1) = tmp(1) & " " & Cells(ligne, 3) ' cumul des noms
  20.             tab1(cle) = tmp
  21.         Else
  22.             tab1(cle) = Array(Cells(ligne, 2), Cells(ligne, 3))
  23.         End If
  24.     End If
  25. Next
  26. cle = Cells(2, 4)
  27. tmp = tab1(cle)
  28. Cells(2, 5) = tmp(0)
  29. Cells(2, 6) = tmp(1)
  30. End Sub


 
 

Reply

Marsh Posté le 24-07-2009 à 09:24:52    

Bonjour !  
 
Merci , je crois que c'est exactement ce que je voulais .... je ne pas comment vous remecier ...
Vraiment merci beucoup d'avoir été aussi rapide , je vais travailler  à adapter tout cela  à ma 50eme d'onglet ...lol , je suis pas couché^^  
 
bonne journée ....

Reply

Marsh Posté le 24-07-2009 à 09:55:53    

Je ne comprends pas que la derniere macro que je t'ai filé ne fonctionne pas, puisque chez moi avec tes fichiers ca roule.
 
Bref, si tu t'en es sorti, c'est le principal :jap:


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 24-07-2009 à 10:58:23    

A bon ^^ peut tu peux m'en envoyer  celle qui fonctionne avec mes fichiers , ca me tracasse  
 
 
cdt  

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed