fonction find

fonction find - VB/VBA/VBS - Programmation

Marsh Posté le 07-02-2013 à 09:27:35    

Bonjour!  :D  
 
J'ai utilisé ceci :  
 

Code :
  1. Set Rg = ws1.ActiveSheet.Range(Plage).Find(nom)


 
Savez-vous s'il est possible de récupérer le numéro de la ligne de "nom"?
 
J'aimerais, après avoir trouvé ma valeur, supprimer sa ligne...
 
:jap:

Reply

Marsh Posté le 07-02-2013 à 09:27:35   

Reply

Marsh Posté le 07-02-2013 à 09:52:11    

J'ai essayé
 

Code :
  1. Rg.Row.Select


 
mais cela ne fonctionne pas...

Reply

Marsh Posté le 07-02-2013 à 09:53:46    

minimoack a écrit :

Bonjour!  :D  
 
J'ai utilisé ceci :  
 

Code :
  1. Set Rg = ws1.ActiveSheet.Range(Plage).Find(nom)


 
Savez-vous s'il est possible de récupérer le numéro de la ligne de "nom"?
 
J'aimerais, après avoir trouvé ma valeur, supprimer sa ligne...
 
:jap:


 
Hello ;)
 

Code :
  1. Rg.EntireRow.Delete


 
Ça devrait faire ce que tu veux si j'ai bien compris :D

Reply

Marsh Posté le 07-02-2013 à 09:55:44    

oui je pense !
j'essaye et je te dis :D
 
merkii :jap:

Reply

Marsh Posté le 07-02-2013 à 10:02:28    

Bon... c'est bizarre... je t'envoie les fichiers... (je les modifie d'abord un peu pour confidentialité)

Reply

Marsh Posté le 07-02-2013 à 10:13:26    

Envoyé! désolée de t'embêter encore et encore :D

Reply

Marsh Posté le 07-02-2013 à 10:34:00    

Je ne comprends pas pourquoi cela ne fonctionne pas... j'ai mis certaines lignes de code en commentaire pour voir si au moins j'avais des ajouts de ligne, mais même pas...
 

Code :
  1. ws2.Activate
  2.     ' on parcourt la première colonne du fichier ws2 en partant de la fin
  3.     For i = ligneMaxWs2 To 3 Step -1
  4.         ' si la ligne parcourrue à un PHD en colonne 2 alors
  5.         If InStr(1, ws2.ActiveSheet.Cells(i, 2).Value, "PHD" ) <> 0 Then
  6.             ' on récupère le nom du CICS dans nomCICS
  7.             nomCICS = ws2.ActiveSheet.Cells(i, 1).Value
  8.             ws1.Activate
  9.             ' on recherche nomCICS dans le fichier ws1
  10.             Set Rg = ws1.ActiveSheet.Range(Plage).Find(nomCICS)
  11.             ' S'il existe, i-e si on l'a trouvé alors
  12.             If Not Rg Is Nothing Then
  13.                 ws1.Activate
  14.                 ' on insert une ligne en dessous de la ligne 3
  15.                 Rows("4:4" ).Insert Shift:=xlDown
  16.                 ' on coupe la ligne qui contient le nom du CICS voulu
  17.                 'Rg.EntireRow.Select
  18.                 'Selection.Cut
  19.                 ' et on la colle au niveau de la ligne que l'on vient d'ajouter.
  20.                 'Cells(4, 1).Select
  21.                 'ws1.ActiveSheet.Paste
  22.             End If
  23.         End If
  24.     Next i


Message édité par minimoack le 07-02-2013 à 10:36:55
Reply

Marsh Posté le 07-02-2013 à 10:39:22    

J'ai compris, je te répond dans 2mn ;)

Reply

Marsh Posté le 07-02-2013 à 10:39:35    

J'ai donc 2 fichiers : ws1 et ws2.
 
Je dois trier les données de ws1 en fonction des données de ws2.
 
Mon but est de faire remonter les lignes importantes dans ws1 (ce que j'ai mis en commentaire pour tester mon code)

Reply

Marsh Posté le 07-02-2013 à 10:45:02    

Ta plage est pas bonne poulette! C'est celle du référentiel... celle du STM a plus de 126 lignes... ;)

Reply

Marsh Posté le 07-02-2013 à 10:45:02   

Reply

Marsh Posté le 07-02-2013 à 10:48:52    

comprends pas... j'ai mis ça pourtant... non?
 

Code :
  1. ligneMaxWs1 = Range("A65536 " ).End(xlUp).Row
  2.    
  3.     Plage = "A4:A" & ligneMaxWs1

Reply

Marsh Posté le 07-02-2013 à 10:49:57    

c'est parce que je boucle en fonction de ligneMaxWs2?

Reply

Marsh Posté le 07-02-2013 à 10:53:51    

Nan ça c'est parce que tu suis pas encore assez mes conseils :)

 
Code :
  1. ligneMaxWs1 = Range("A65536 " ).End(xlUp).Row
 

Comme tu précises pas le workbook, ça tape dans l'activesheet de l'activeworkbook, donc dans ws2 puisque c'est le dernier ouvert!

 
Code :
  1. Set ws1 = Workbooks(Fichier1)
  2. Set ws2 = Workbooks(Fichier2)
  3.    
  4. ' ligneMaxWs1 au numéro de la dernière ligne qui contient une valeur du fichier 1
  5. ' ligneMaxWs2 au numéro de la dernière ligne qui contient une valeur du fichier 2
  6. ligneMaxWs1 = ws1.Worksheets(1).Range("A65536 " ).End(xlUp).Row
  7. ligneMaxWs2 = ws2.Worksheets(1).Range("A65536 " ).End(xlUp).Row
 

Toujours préciser le workbook et la worksheet (sauf si tu variabilises!)


Message édité par sh_kyra le 07-02-2013 à 10:54:50
Reply

Marsh Posté le 07-02-2013 à 10:57:12    

ah oui... c'est vrai...  
 :pfff:

Reply

Marsh Posté le 07-02-2013 à 10:57:20    

merci ;D

Reply

Marsh Posté le 07-02-2013 à 11:10:50    

[:evil dildo]  
 
 :lol:  
 
De rien ;)

Reply

Marsh Posté le 07-02-2013 à 11:14:21    

je suis vraiment stupide des fois :lol:
enfin bon, je bloque souvent sur des petites erreurs comme ça!
désolée de t'avoir dérangé pour si peu, la prochaine fois, je viendrais avec un truc de balèze!
:D
merci

Reply

Marsh Posté le 07-02-2013 à 12:49:10    

Si sur mon fichier STM, je veux avoir la correspondance avec les PHD genre :  
CIC... PHD1
 
 
je peux le faire dans cette boucle, ou il vaut mieux que j'en fasse une autre?
 
genre :  

Code :
  1. ws2.Activate
  2.     ' on parcourt la première colonne du fichier ws2 en partant de la fin
  3.     For i = ligneMaxWs2 To 3 Step -1
  4.         ' si la ligne parcourrue à un PHD en colonne 2 alors
  5.         If InStr(1, ws2.ActiveSheet.Cells(i, 2).Value, "PHD4" ) <> 0 Then
  6.             ' on récupère le nom du CICS dans nomCICS
  7.             nomCICS = ws2.ActiveSheet.Cells(i, 1).Value
  8.             ws1.Activate
  9.             ' on recherche nomCICS dans le fichier ws1
  10.             Set Rg = ws1.ActiveSheet.Range(Plage).Find(nomCICS)
  11.             ' S'il existe, i-e si on l'a trouvé alors
  12.             If Not Rg Is Nothing Then
  13.                 ws1.Activate
  14.                 ' on insert une ligne en dessous de la ligne 3
  15.                 Rows("4:4" ).Insert Shift:=xlDown
  16.                 ' on coupe la ligne qui contient le nom du CICS voulu
  17.                 Rg.EntireRow.Select
  18.                 Selection.Cut
  19.                 ' et on la colle au niveau de la ligne que l'on vient d'ajouter.
  20.                 Cells(4, 1).Select
  21.                 ws1.ActiveSheet.Paste
  22.                 ' et là je mets dans la même ligne que rg, mais colonne 5 : "PHD4"
  23.             End If
  24.         End If
  25.     Next i


 
et je fais des elseIf pour les autres valeurs
 

Reply

Marsh Posté le 07-02-2013 à 14:42:06    

J'ai pas trop compris là... tu peux développer?

Reply

Marsh Posté le 07-02-2013 à 15:09:09    

tu as encore les fichiers?
 
dans referentiel, il y a des CIC... en fonction des PHD...
dans STM, j'ai mes données triées, avec tous les PHD au début. J'aimerais dans ce fichier, identifier chaque CIC... à un PHD1 ou PHD2 ou PHD.....  
 
c'est un peu plus clair? ... désolée, un peu compliqué

Reply

Marsh Posté le 07-02-2013 à 15:10:16    

pour cela, je dois aller chercher à quel PHD.... (1, 2 ...) correspond ce CIC...

Reply

Marsh Posté le 07-02-2013 à 15:47:28    

Non franchement là je comprends pas ce que tu veux... tu peux me donner un exemple concret?

Reply

Marsh Posté le 07-02-2013 à 15:52:50    

Dans STM.xls, je veux :  
  A                   B                  C               D
CICPFA01      185111            781            PHD1
 
je veux rajouter la colonne D

Reply

Marsh Posté le 07-02-2013 à 15:54:06    

et le PHD1, il est dans referentiel.xls

Reply

Marsh Posté le 07-02-2013 à 16:19:32    

Pourquoi tu ajoutes pas une boucle vu que tes PHD vont de 1 à 4?
 

Code :
  1. For j = 1 to 4
  2.        If InStr(1, ws2.ActiveSheet.Cells(i, 2).Value, "PHD" & j ) <> 0 Then
  3. ....
  4. Next j

Reply

Marsh Posté le 07-02-2013 à 16:20:52    

Faudra que tu fasses pareil pour les autres? (PR01 etc...)
 
Si c'est le cas je te conseille de faire une collection qui contienne l'ensemble des valeurs avant... ça sera plus simple/perf à traiter.

Reply

Marsh Posté le 07-02-2013 à 16:23:25    

une collection? je vais me renseigner (j'ai vu ça qu'en C#)

Reply

Marsh Posté le 07-02-2013 à 16:23:34    

merki  :D


Message édité par minimoack le 07-02-2013 à 16:23:51
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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