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
Publicité
Posté le 28-02-2007 à 14:26:54
jpcheck
Pioupiou
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 :
Private sub Button_Click()
'ici on déclare les variables
dim i as integer
dim j as integer
j =1
'boucle de traitement
for i = to 13000
'test si c'est un entier
if IsInt(range("Feuil1!A" & i).value) then
'alors
range("Feuil1!A" & i & ":E" & i).copy
range("Feuil2!A" & j & ":E" & j).paste
j = j + 1
end if
next i
End Sub
Tu as compris l'idée ?
Dupuis_free
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
aprilthe5ith
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
ingenieurcesi
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+
jpcheck
Pioupiou
Posté le 05-03-2007 à 09:22:07
je reste persuadé d'avoir vu une fonction Isint() quelque part
Paul Hood
Posté le 05-03-2007 à 14:58:43
Pour tester si une variable est de type entier :
if is typename(tavaleur)="Integer"
ingenieurcesi
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+
aprilthe5ith
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...
Paul Hood
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
Publicité
Posté le 06-03-2007 à 08:37:16
aprilthe5ith
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é...
Paul Hood
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
Dupuis_free
Posté le 15-03-2007 à 01:51:43
Merci à tous pour vos réponses. Le test de la valeur entière fonctionne bien.