Sellection de lignes excel sur condition

Sellection de lignes excel sur condition - VB/VBA/VBS - Programmation

Marsh Posté le 28-02-2007 à 14:26:54    

Bonjour,
 
J'ai un fichier excel de plus de 13000 lignes (2 colonnes) et j'aimerais sélectionner uniquement les lignes dont les valeurs de la colonne 1 sont des entiers pour les copier (les lignes) dans une nouvelle feuille.
Je n'est aucune notion de programmation VB, alors si quelqu'un(e) pouvait m'aider....
Merci.
 
GeDu

Reply

Marsh Posté le 28-02-2007 à 14:26:54   

Reply

Marsh Posté le 28-02-2007 à 14:43:12    

tu peux placer un bouton sur ta feuille ?  
dans ce cas en cliquant dessus tu peux lancer une procédure qui te fait le boulot.
Ca ressemblera à ca (pour les lignes allant des colonnes A à E) :

Code :
  1. Private sub Button_Click()
  2. 'ici on déclare les variables
  3. dim i as integer
  4. dim j as integer
  5. j =1
  6. 'boucle de traitement
  7. for i =  to 13000
  8. 'test si c'est un entier
  9. if IsInt(range("Feuil1!A" & i).value) then
  10. 'alors
  11. range("Feuil1!A" & i & ":E" & i).copy
  12. range("Feuil2!A" & j & ":E" & j).paste
  13. j = j + 1
  14. end if
  15. next i
  16. End Sub


 
Tu as compris l'idée ?

Reply

Marsh Posté le 28-02-2007 à 16:02:41    

Merci pour ta réponse.
Toutefois ca ne marche pas.
 
J'ai corrigé 2 erreurs, mais ca beug en ligne 12
 
1. Private Sub Button_Click()
2. 'ici on déclare les variables
3. Dim i As Integer
4. Dim j As Integer
5. j = 1
6. 'boucle de traitement
7. For i = 1 To 20000
8. 'test si c'est un entier
9. If Int(Range("Feuil1!A" & i).Value) Then
10. 'alors
11. Range("Feuil1!A" & i & ":B" & i).Copy
12. Range("Feuil2!A" & j & ":B" & j).Paste
13. j = j + 1
14. End If
15. Next i
16. End Sub

Reply

Marsh Posté le 01-03-2007 à 18:25:08    

Private Sub Button_Click()
 
Dim i As Integer,j As Integer
 
j = 1
 
For i = 1 To 13000
    If CInt(Sheets(1).Cells(i, 1)) = Sheets(1).Cells(i, 1) Then
        Range(Cells(i, 1), Cells(i, 2)).Copy Sheets(2).Cells(j, 1)
        j = j + 1
    End If
Next i
 
End Sub

Reply

Marsh Posté le 04-03-2007 à 23:07:46    

bonsoir,
 
a mon avis vu qe cint convertit un nombre en entier ca ne vas pas te convenir. j'ai pas trouvé de fonction qui verifier si un nombre est un entier mais y'aurais une petite combine.
 
je t'explique
 
un nombre entier n'as pas de virgule donc il suffirait de faire un test pour voir si le nombre en contient une.
 
la fonction instr permet de trouver la position d'un caractère particulier dans une chaine et si il n'y a pas ce caractère cela renvoie la valeur 0.
 
tu obtiens donc
 
Sub tat()
Dim va As String
nbl = Range("a6555" ).End(xlUp).Row
For l = 1 To nbl Step 1
va = RTrim(LTrim(Cells(l, 1).Value))
pos = InStr(1, va, "," )
If pos = 0 Then
'tu copies où tu veux
End If
Next l
End Sub
 
A+
 
 

Reply

Marsh Posté le 05-03-2007 à 09:22:07    

je reste persuadé d'avoir vu une fonction Isint() quelque part ;)

Reply

Marsh Posté le 05-03-2007 à 14:58:43    

Pour tester si une variable est de type entier :
if is typename(tavaleur)="Integer"

Reply

Marsh Posté le 05-03-2007 à 16:27:47    

j'ai trouvé ca sur un topic et ca marche nickel
 
If CInt(tavaleur) = CDbl(tavaleur) Then
 
A+

Reply

Marsh Posté le 05-03-2007 à 17:10:02    

Pour la petite histoire, mon code marche parfaitement puisque précisément CInt convertit tout nombre en entier, donc si le nombre à tester n'est pas entier, CInt(nombre)<>Nombre...

Reply

Marsh Posté le 06-03-2007 à 08:37:16    

Oui mais pourquoi faire simple quand on peut faire compliqué !!
Je peux aussi affecter dans un tableau chaque caractére à une celulle et puis tenter de faire une opération...une addition serait simple alors optons pour la multiplication... et si une erreur est générée c'est qu'il y a autre chose que du numérique et donc qu'il ne s'agit pas d'un entier.
 
Interessant non ? Et j'en ai d'autre...


Message édité par Paul Hood le 06-03-2007 à 08:37:56
Reply

Marsh Posté le 06-03-2007 à 08:37:16   

Reply

Marsh Posté le 06-03-2007 à 12:55:07    

Paul,  
 
1) ton code est incorrect,  
2)même en corrigeant ce code, "typename" renvoie indefectiblement un "double",
3) si 4 lignes de code c'est compliqué...

Reply

Marsh Posté le 07-03-2007 à 10:27:41    

Que le retour ne soit pas ce qui est attendu, ne veux pas dire que ca ne fonctionne pas.
Ca devient compliqué quand on peut trouvé plus simple.
 
Sur la forme, un peu d'humour ne fait pas de mal ... en tout il n'y avait aucune volonté de blessé qui que ce soit !


Message édité par Paul Hood le 07-03-2007 à 10:28:13
Reply

Marsh Posté le 15-03-2007 à 01:51:43    

Merci à tous pour vos réponses. Le test de la valeur entière fonctionne bien.

Reply

Sujets relatifs:

Leave a Replay

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