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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  fonction find

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction find

n°2174431
minimoack
Posté le 07-02-2013 à 09:27:35  profilanswer
 

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:

mood
Publicité
Posté le 07-02-2013 à 09:27:35  profilanswer
 

n°2174435
minimoack
Posté le 07-02-2013 à 09:52:11  profilanswer
 

J'ai essayé
 

Code :
  1. Rg.Row.Select


 
mais cela ne fonctionne pas...

n°2174436
sh_kyra
Entre nous c'est Kyra
Posté le 07-02-2013 à 09:53:46  profilanswer
 

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

n°2174437
minimoack
Posté le 07-02-2013 à 09:55:44  profilanswer
 

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

n°2174441
minimoack
Posté le 07-02-2013 à 10:02:28  profilanswer
 

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

n°2174446
minimoack
Posté le 07-02-2013 à 10:13:26  profilanswer
 

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

n°2174452
minimoack
Posté le 07-02-2013 à 10:34:00  profilanswer
 

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
n°2174454
sh_kyra
Entre nous c'est Kyra
Posté le 07-02-2013 à 10:39:22  profilanswer
 

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

n°2174455
minimoack
Posté le 07-02-2013 à 10:39:35  profilanswer
 

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)

n°2174460
sh_kyra
Entre nous c'est Kyra
Posté le 07-02-2013 à 10:45:02  profilanswer
 

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

mood
Publicité
Posté le 07-02-2013 à 10:45:02  profilanswer
 

n°2174461
minimoack
Posté le 07-02-2013 à 10:48:52  profilanswer
 

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

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

n°2174462
minimoack
Posté le 07-02-2013 à 10:49:57  profilanswer
 

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

n°2174463
sh_kyra
Entre nous c'est Kyra
Posté le 07-02-2013 à 10:53:51  profilanswer
 

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
n°2174465
minimoack
Posté le 07-02-2013 à 10:57:12  profilanswer
 

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

n°2174466
minimoack
Posté le 07-02-2013 à 10:57:20  profilanswer
 

merci ;D

n°2174471
sh_kyra
Entre nous c'est Kyra
Posté le 07-02-2013 à 11:10:50  profilanswer
 

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

n°2174472
minimoack
Posté le 07-02-2013 à 11:14:21  profilanswer
 

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

n°2174497
minimoack
Posté le 07-02-2013 à 12:49:10  profilanswer
 

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
 

n°2174520
sh_kyra
Entre nous c'est Kyra
Posté le 07-02-2013 à 14:42:06  profilanswer
 

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

n°2174532
minimoack
Posté le 07-02-2013 à 15:09:09  profilanswer
 

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é

n°2174533
minimoack
Posté le 07-02-2013 à 15:10:16  profilanswer
 

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

n°2174552
sh_kyra
Entre nous c'est Kyra
Posté le 07-02-2013 à 15:47:28  profilanswer
 

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

n°2174554
minimoack
Posté le 07-02-2013 à 15:52:50  profilanswer
 

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

n°2174555
minimoack
Posté le 07-02-2013 à 15:54:06  profilanswer
 

et le PHD1, il est dans referentiel.xls

n°2174564
sh_kyra
Entre nous c'est Kyra
Posté le 07-02-2013 à 16:19:32  profilanswer
 

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

n°2174566
sh_kyra
Entre nous c'est Kyra
Posté le 07-02-2013 à 16:20:52  profilanswer
 

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.

n°2174569
minimoack
Posté le 07-02-2013 à 16:23:25  profilanswer
 

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

n°2174570
minimoack
Posté le 07-02-2013 à 16:23:34  profilanswer
 

merki  :D


Message édité par minimoack le 07-02-2013 à 16:23:51
mood
Publicité
Posté le   profilanswer
 


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

  fonction find

 

Sujets relatifs
Appel d'une matrice dans une fonctionPb fonction RechercheV Excel
EXCEL alternative a la fonction SIautoriser une annimation en fonction de la date du jour sous powerpoin
[VBA] Fonction find avec plusieurs criteresfonction find vba
Bug fonction find, the returnBug fonction find
Fonction Cells.find mais quand il ne trouve rien?[Perl] Fonction find, en plus d'utilisation de simili-objet
Plus de sujets relatifs à : fonction find


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