Parcourir tte les lignes d'une feuille excel en vba [Résolu]

cs_hasen 246 Messages postés mercredi 14 avril 2004Date d'inscription 29 décembre 2008 Dernière intervention - 5 juil. 2005 à 22:46 - Dernière réponse : ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention
- 14 juil. 2005 à 02:00
Bonjour,

Je voudrais parcourir toutes les lignes d'une feuille excel, verifier si le champs A est egal a ma variable ch et si c'est le cas, mettre la ligne dans une autre feuille excel.

Quelqu'un pourrait-il m'aider?

Merci d'avance.

Hasen
Afficher la suite 

18 réponses

ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 14 juil. 2005 à 02:00
+3
Utile
Désolé pour le retard dans cette réponse...



Seul l'auteur du post original est habilité à accepter une réponse !
Autrement dit, ici, seul Hasen le peut et entre nous, ça m'étonnerait
bien qu'il le fasse à un seul vu qu'il n'a jamais réagit à nos
nombreuses réponses à son post !!!

Donc, c'est tout à fait normal que tu ne vois pas ce fameux bouton! Si
tu déposes un post sur le forum (et que donc, tu deviens auteur
originel), tu aurras la possibilité d'accepter n'importe quelle
réponses y compris les tiennes.



Pour trier une comboBox, je pense que depuis le temps tu as dû trouver
tout seul mais au cas où... : regarde la propriété "Sorted"

Sinon, dépose une nouvelle question sur le forum !!! Comme ça, non
seulement tu pourras tester ce fameux bouton "Réponse accéptée" mais en
plus on ne saturera pas ce post et le nouveau pourra être trouvé par
ceux qui ont (où ont eut!) le même problème...


Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )
Cette réponse vous a-t-elle aidé ?  
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 6 juil. 2005 à 06:51
0
Utile
En supposant qu'on travail sur la Feuille "Feuil1" et
que toutes les lignes sont remplies sont consécutives (qu'il n'y ait
pas de ligne vide dans la liste parcourue parce que sinon ça arrêterait
le processsus...) :



A placer dans la procédure prévue pour lancer cette opération (un click
de bouton par exemple [Private Sub monBouton_Click()], ...)



Dim
varTxt As String

Dim varTour As Long

varTour = 1

Do

varTxt = ThisWorkbook.Worksheets(" Feuil1 ").Range("A" & CStr(varTour)).Value

'Quitte la routine à la 1ère cellule vide rencontrée!!!

If varTxt = "" Then Exit Do

If varTxt = ch Then ... Else ...

varTour = varTour + 1

Loop


Comprends-tu tout et est-ce que cela répond à ta question ???


Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )
cs_nemox 8 Messages postés mercredi 6 juillet 2005Date d'inscription 8 juillet 2005 Dernière intervention - 6 juil. 2005 à 10:04
0
Utile
perso je ne comprends pas vmt, mais c'est pas très grave. Avec cette formule, comment peut-on copier toutes les lignes pour lesquels le champs est correct et les coller sur une autre feuille?
ricomiracle 195 Messages postés vendredi 19 novembre 2004Date d'inscription 30 novembre 2009 Dernière intervention - 6 juil. 2005 à 10:18
0
Utile
Si tu veux faire toutes les lignes même si il y en a une de vide:



dim cellule as range

For each cellule in ThisWorkbook.Worksheets("Feuil1").Range("A1").entirecolumn

if cellule.value= <la tu met la valeur
lorsque tu dois copier la ligne (= "ch" si j'ai bien compris)> then

cellule.entirerow.copy
'copi la ligne
en question

ThisWorkbook.Worksheets("Feuil2").Range("A1").pastespecial 'tu colle ds "feuil2"

end if

next





si tu peu te veut tu peut aussi t'arrêter dès que tu rencontres une cellule vide en prenant le code de ScSami.

à la place de Then ... Else ...

tu fais



then

cellule.entirerow.copy 'copi la ligne en question

ThisWorkbook.Worksheets("Feuil2").Range("A1").pastespecial 'tu colle ds "feuil2"

END IF



eN ESPERANT AVOIR R2PONDU A TA KESTION
cs_nemox 8 Messages postés mercredi 6 juillet 2005Date d'inscription 8 juillet 2005 Dernière intervention - 6 juil. 2005 à 10:41
0
Utile
merci çà répond à ma question, mais qd je vais pour faire tourner le prog, la ligne
if cellule.value = ch then
est considérée comme fausse.
Sachant qu'avant d'écrire ta formule, j'ai initialisée ch de la manière suivante:
ch = combobox1 (puisque ch est la valeur sélectionnée ds ma liste modifiable de mon userform)
Quel est le pb?
merci d'avance et en espèrant que ce soit mon dernier pb.
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 6 juil. 2005 à 19:40
0
Utile
Question con, t'es sûr qu'il faut pas mettre plutot un truc du style :



ch = combobox1.Selected (ou un truc du genre comme "List" ou "ListIndex")



???


Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )
cs_nemox 8 Messages postés mercredi 6 juillet 2005Date d'inscription 8 juillet 2005 Dernière intervention - 6 juil. 2005 à 20:05
0
Utile
ouai j'ai mis .list
mais mon pb sur if cellule.value = ch persiste.
????
ricomiracle 195 Messages postés vendredi 19 novembre 2004Date d'inscription 30 novembre 2009 Dernière intervention - 6 juil. 2005 à 20:14
0
Utile
Je suppose que ch est l'élément de la combo qui est sélectionner.

Dans ce cas tu dois faire:

ch = combobox1.list (listindex)



combo.list te retourne la liste entière des élements de la combo.

Si tu fais list(i) ca te retourne l'élément qui se trouve à la position i.

listindex est un entier qui contient l'index de lélément sélectionné.

Donc list(listindex) te retourne l'élément sélectionner.

Place le curseur de la souris sur "list" et fait F1 pour avoir + d'info.
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 6 juil. 2005 à 21:12
0
Utile
Oui, en effet, c'est ça!



Ceci dit, par mesur de sécurité je te conseillerais de mettre plutôt :



ch = ComboBox1.List(
ComboBox1.ListIndex)



Bon, je t'accorde que dans l'aide c'est pas forcément très clair pour
les débutants mais justement, il faut s'entrainer à lire les aides de
Microsoft (parce que c'est un art nécéssaire [comme certains mals
d'ailleurs ;-]).


Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )
cs_nemox 8 Messages postés mercredi 6 juillet 2005Date d'inscription 8 juillet 2005 Dernière intervention - 7 juil. 2005 à 09:11
0
Utile
merci, merci.
L' initialisation de ma est à présent faite. Mais j'ai tjs ce même pb avec cette ligne de malheur. Qu'est-ce qui ne va pas?
ricomiracle 195 Messages postés vendredi 19 novembre 2004Date d'inscription 30 novembre 2009 Dernière intervention - 7 juil. 2005 à 09:47
0
Utile
Tu as bien fais ch = ComboBox1.List(
ComboBox1.ListIndex) comme l'a dit Scami?

Sioui c'est quoi le message de cette erreur??
cs_nemox 8 Messages postés mercredi 6 juillet 2005Date d'inscription 8 juillet 2005 Dernière intervention - 7 juil. 2005 à 10:25
0
Utile
ouai ouai c'est bon j'ai bien mis ce qu'il m'a dit.
en fait il me surligne en jaune la ligne: if cellule.value = ch then
Je ne vois pas ce qui cloche avec cette ligne. Est-ce en rapport avec une autre ligne du code?
ricomiracle 195 Messages postés vendredi 19 novembre 2004Date d'inscription 30 novembre 2009 Dernière intervention - 7 juil. 2005 à 11:19
0
Utile
Oui il te la surligne lorsque tu fais debugger quand un message d'erreur apparait.

C'est pour te permettre de modifier la ligne pendant l'execution de ton prog.

Dis nous quel est ce message???
cs_nemox 8 Messages postés mercredi 6 juillet 2005Date d'inscription 8 juillet 2005 Dernière intervention - 7 juil. 2005 à 11:22
0
Utile
Erreur d'exécution '13':
Incompatibilité de type
dsl mais n'étant pas un expert, çà devient très vite du chinois pour moi!!!
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 7 juil. 2005 à 19:23
0
Utile
Wai, en fait, tu sais pas du tout programmer c'est ça ???



'Déclaration des variables

Dim
varTxt As String
Dim varTour As Long

Dim ch



'Ca, je sais pas où tu veux ou où tu l'as mis mais en le mettant ici ça devrait fonctionner!

ch = ComboBox1.List(ComboBox1.ListIndex)



varTour = 1
Do
varTxt = ThisWorkbook.Worksheets(" Feuil1 ").Range("A" & CStr(varTour)).Value
'Quitte la routine à la 1ère cellule vide rencontrée!!!
If varTxt = "" Then Exit Do
If varTxt = ch Then

'Copie la ligne en question

ThisWorkbook.Worksheets(" Feuil1 ")..Range("A" & CStr(varTour)).EntireRow.copy
'Colle la ligne dans la feuille nommée "Feuil2" dans la cellule "A1"

'Mais a toi de la mettre dans la cellule que tu veux!!!

ThisWorkbook.Worksheets("Feuil2").Range("A1").PasteSpecial 'Ou simplement Past je pense

End If
varTour = varTour + 1
Loop



Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )
cs_nemox 8 Messages postés mercredi 6 juillet 2005Date d'inscription 8 juillet 2005 Dernière intervention - 7 juil. 2005 à 20:10
0
Utile
bon pour ce qui est de mes talents de programmation je fais ce que je peux.
sinon j'ai pris ton code, le pb c'est que la ligneThisWorkbook.Worksheets("Feuil2").Range("A1").PasteSpecial n'est pas bonne. Apparemment il y a un problème de dimension entre ce que je copie et là où çà doit ce coller. Je suppose donc que çà vient du fait que je copie une ligne pour la coller dans une cellule. Il faudrait donc que je lui dise de me coller la ligne sur une ligne.
Ai-je bien raison?
Et si oui je fais comment?
merci bcp
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 7 juil. 2005 à 21:02
0
Utile
Juste un mot avant... J'espère que tu as dû remarquer
qu'a la ligne avant celle dont tu parles une toute petite mais fatale
erreur s'est glissée!!! En effet, avant Range il n'y qu'un seul point!!!



Tu as en effet bien analysé le problème! Sauf que le problème c'est
qu'il n'y en a pas!!! Du moins, sous Excel 2000. J'ai moi même fait
tous les tests et ça fonctionne qu'il y ait déjà du texte sur la ligne
de la Feuil2 ou non !!!



Donc, tu peux quand même, éventuellement, tenter de faire un truc du genre :

'Efface la 1ère ligne

ThisWorkbook.Worksheets("Feuil2").Rows(1).Delete

ThisWorkbook.Worksheets("Feuil1").Range("A" & CStr(varTour)).EntireRow.Copy

ThisWorkbook.Worksheets("Feuil2").Range("A1").PasteSpecial



(Code a remplacer, bien sûr! Pas à ajouter!!!)


Enjoy

( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )
cs_nemox 8 Messages postés mercredi 6 juillet 2005Date d'inscription 8 juillet 2005 Dernière intervention - 8 juil. 2005 à 17:46
0
Utile
Mais où est ce bouton "Réponse acceptée"????????????????????
merci à tout le monde mon prog est quasi fini.
Encore une toute petite question: comment trie-t-on par ordre alphabétique dans une combobox?
merci bcp tcho

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.