macro Excel

macro Excel - VB/VBA/VBS - Programmation

Marsh Posté le 12-07-2006 à 08:57:49    

Bonjour à tous...
J'aimerais avoir un petit coup de main pour effectuer une macro Excel qui devrait être toute simple pour vous, mais qui est à la limite de l'impossible pour moi .. :pt1cable:  
 
Explication:
Je possède un tableau Excel dans lequel il y a plein d'info. Je voudrai donc retrouver dans la colonne A toutes les cases avec inscrit "TY". Dès qu'un "TY" est trouvé, le doit récupérer la valeur associée en colonne B et mettre le tout dans une nouvelle feuille Excel pour n'avoir, qu'à la fin, le récapitulatif des valeurs de "TY".
 
Par ex:
En A13 et en A25  il y a des "TY". Associés en B13 et B26 de "1" et "3".Je voudrai donc que, dans une autre feuille, il y ai: - en A1: "TY"
                   - en B1: "1"
                   - en A10: "TY"
                   - en B10: "3"
           ...
 
Ceci est donc la première partie de ma réalisation. Mais il y a une suite:
Selon la valeur de "TY", dans mon fichier de départ, il faut que j'aille chercher d'autre info dans ce même fichier.
Ex:
si en B13 j'ai "1" (comme tout à l'heure), il faudrait que j'aille chercher les valeurs des cases A15 avec B15, A17 avec B17 et A19 avec B19 et C19. Et toute ces valeurs là, pouvoir les mettre dans la feuille récapitulative, à la suite de (A1 B1), c'est-à-dire à partir de A2.
 
Si il y a des choses pas très claires, dites-le moi et j'expliquerais plus en détail...
mais j'ai vraiment besoin de votre aide....
 
Merci d'avance
 
 :hello:  
 
 

Reply

Marsh Posté le 12-07-2006 à 08:57:49   

Reply

Marsh Posté le 12-07-2006 à 09:27:22    

une boucle  
for i=1 to 120 '(exemple)
if range("A"&i).value = "TY" then
'ton tralala le caht ici
end if
next i
 
par la suite, tu fais un test avec range("B"&i).value et tu refais ton code selon ce que tu souhaites faire sur tes cellules...

Reply

Marsh Posté le 12-07-2006 à 09:38:06    

ben pour faire claire, j'ai fai ça:
 
Sub Trier_les_infos()
'
' Trier_les_infos Macro
'
Dim pas As Integer
Dim val As Double
 
Worksheets("da_essais" ).Select
pas = 1
For pas = 1 To ActiveCell.SpecialCells(xlCellTypeLastCell).Row
While Range("A" & pas).Value <> "TY"
 
pas = pas + 1
If Range("A" & pas).Value = "TY" Then
             
            val = Range("B" & pas).Value
            Worksheets("Feuil3" ).Select
            Range("F14" ).Value = val
        Worksheets("da_essais" ).Select
         
End If
 
Wend
Next
 
End Sub
 
mais ça marche pas... Il m'inscris toujours les résultat dans la case F14 et la boucle est infini...

Reply

Marsh Posté le 12-07-2006 à 09:48:04    

ton code n'est pas des plus efficaces (mais qu'est-ce que je suis prétentieux des fois moi...)
 
 
Sub Trier_les_infos()
'
' Trier_les_infos Macro
'
Dim i As Integer 'pour les compteur, reste avec une seule lettre c plus facile
Dim val As Double
 
 
For i = 1 To 100 'fixe une limite arbitraire que tu sais que tu n'atteindras pas, comme ca tu évite un retour foireux de ta fonction
 
If Range("da_essais!A" & i).Value = "TY" Then
            val = Range("da_essais!B" & i).Value
          'la ligne d'après je la comprends pas trop, c'est normal que seul F14 bouge, mais si tu m'explique un eu plus ton histoire je peux essayer.  
         Range("Feuil3!F14" ).Value = val
        Worksheets("da_essais" ).Select
         
End If
Next
 
End Sub


Message édité par jpcheck le 12-07-2006 à 09:54:06
Reply

Marsh Posté le 12-07-2006 à 09:48:15    

Il est censé faire quoi ton
ActiveCell.SpecialCells(xlCellTypeLastCell).Row ?

Reply

Marsh Posté le 12-07-2006 à 09:52:43    

qqe modifs qui devrait améliorer
 
Sub Trier_les_infos()  
   Dim pas As Integer  
   Dim pas2 As Integer
   Dim val As Double  
 
   Worksheets("da_essais" ).Select  
   pas = 1  
   pas2=1
   While Range("A" & pas).Value <> ""  
 
      If Range("A" & pas).Value = "TY" Then  
         Worksheets("da_essais" ).Range("F"& pas2).Value  = Range("B" & pas).Value  
         pas2 = pas2+1            
      End If  
 
   Loop  
 
End Sub  

Reply

Marsh Posté le 12-07-2006 à 10:03:02    

le "ActiveCell.SpecialCells(xlCellTypeLastCell).Row" est censé détecté la dernière ligne écrite de mon tableau pour éviter que la boucle n'aille jusqu'à 100000...
Ainsi, ça peut s'adapter, je pense, à un tableau qui fait 30 ligne, comme un ki en fai 500.

Reply

Marsh Posté le 12-07-2006 à 10:04:18    

damienCYS, pourquoi tu mets un Loop à la fin alos qu'il n'y a pas de Do?

Reply

Marsh Posté le 12-07-2006 à 10:06:39    

wend à la place de loop
ou Do devant while

Reply

Marsh Posté le 12-07-2006 à 10:07:19    

jpcheck, ton programme marche et ça c super cool... Mais comment fait tu pour qu'il évite de mettre tous les résultat dans F14.
ex: le premier dan A1, le deuxième dans A10, troisième A20....

Reply

Marsh Posté le 12-07-2006 à 10:07:19   

Reply

Marsh Posté le 12-07-2006 à 10:09:14    

Paul Hood, ok, mais ni "pas" ni "pas2" s'incrémente...

Reply

Marsh Posté le 12-07-2006 à 10:12:43    

pas = pas+1 juste avant la fin de la boucle (wend ou loop)

Reply

Marsh Posté le 12-07-2006 à 10:19:59    

effectivement j'ai oublié le Do

Reply

Marsh Posté le 12-07-2006 à 10:35:31    

merci beaucoup à tous...
La première partie de mon programme marche.
Je vais essayé de me débrouiller pour la suite, mais c pas gagné....
rester à vos clavier.. lol
 
encore merci

Reply

Marsh Posté le 12-07-2006 à 10:39:02    

tu peux mettre un autre compteur de type j
avec j=0 au depart
lorsque tu as la valeur "TY" tu incrémentes ton j et  tu mets  
j=j+1      
Range("da_essais!F"& j*10).Value  = Range("B" & i).Value  
tu auras alors tes résultats progresssivment dans F10, F20, F30...


Message édité par jpcheck le 12-07-2006 à 10:46:33
Reply

Marsh Posté le 12-07-2006 à 10:41:09    

oui c'est ce que j'ai fait.
merci

Reply

Sujets relatifs:

Leave a Replay

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