Fonction si et boucle vBA

Résolu
loulou411 Messages postés 17 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 octobre 2008 - 30 sept. 2008 à 14:40
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 2 oct. 2008 à 16:17
Bonjour,<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>








 Je débute en vba et je voudrais réaliser une fonction si, ce doit être certes très simple mais après plusieurs tentative rien ne marche et je ne comprends rien !!!






 






Donc en fait je voudrai faire :






 






Si ma cellule Z1 est égale à « yes » alors toute la ligne doit etre collée sinon on ne la copie colle pas.





Et je voudrai que cela s’effectue en boucle pour toutes les lignes.






 






(en fait je veux copier coller toutes les lignes d'un fichier qui on "yes" dans la colonne z;

Merci pour votre aide !!!

19 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
2 oct. 2008 à 14:51
Salut,
Dans ce cas place le bouton puis double clique dessus.

Il ne te resteras plus qu'a coller ton code dans l'événement Click du bouton.

@+: Ju£i€n
Pensez: Réponse acceptée
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
30 sept. 2008 à 14:50
Salut,

Regarde ceci

Dim i As Integer
'ATTENTION BOUCLE SUR TOUTE LES
'LIGNES DE LA COLONNES Z de 1 à 250
For i = 1 To 250
   'sil elle n'est pas vide
   If Not IsEmpty(Range("Z" & CStr(i))) Then
       If UCase$(Range("Z" & CStr(i)).Value) = "YES" Then ce.EntireRow.Copy('DEstination)
       'copier coller OUI mais ou????
   End If
Next, ----
[../code.aspx?ID=41455 By Renfield]

@+: Ju£i€n
Pensez: Réponse acceptée
0
loulou411 Messages postés 17 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 octobre 2008
30 sept. 2008 à 15:19
Merci bcp jrivet !!!


 


coller sur une autre feuille du classeur : qui s'appelle RFQ 
moi je le collais comme ca :
    Sheets("RFQ").Select
    Range("A1").Select
    ActiveSheet.Paste


et de cette manière tu ne crois pas que ca risque d'etre très long et d'alourdir le code ?
ne vaudrait il pas mieux faire :
coller tous sauf colonne z different de yes ?

désolé de ne pas avoir demander avnt mais  je viens d'y penser ....
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
30 sept. 2008 à 15:33
Re, Regarde plutôt le paramètre destination de la méthode Copy de l'objet Range

@+: Ju£i€n
Pensez: Réponse acceptée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
30 sept. 2008 à 15:34
Salut,
Teste ton idée!!! Tu as toutes les pistes pour le faire...
Et surtout si tu trouve n'oubli pas de valider la ou les réponses qui t'ont aidés. et de mettre la solution bien évidemment.

S.L.B.
<hr />-- Le règlement tu liras -- Des recherches tu feras -- Le style SMS tu banniras --
-- De la validation pertinente tu feras -- Du respect tu auras -- Le bon t
0
loulou411 Messages postés 17 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 octobre 2008
30 sept. 2008 à 17:06
je teste ce script mais à chaque fois cela me marque "erreur de compilation next sans for" ....
je ne comprends vraiment pas puisque j'ai un For j'ai essayé de changer de place le next ou de changer de module et tout recommencer mais rien à faire ce message revient toujours... 
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
30 sept. 2008 à 18:11
Re,
Redonne EXACTEMENT le code que tu utilises, je suppose qu'un If n'est pas fermé, ou quelques chose dans le genre.

@+: Ju£i€n
Pensez: Réponse acceptée
0
loulou411 Messages postés 17 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 octobre 2008
1 oct. 2008 à 13:14
re,

voila le code:

sub macro1()

Dim i As Integer
For i = 1 To 450
  
   If Not IsEmpty(Range( "Z" & CStr(i))) Then
       If UCase$(Range("Z" & CStr(i)).Value) = "YES" Then
ce.EntireRow.Copy("feuil3")
      
   End If
Next

end sub
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
1 oct. 2008 à 13:18
salut,

bien vu

[../auteur/JRIVET/89254.aspx jrivet]

^^



[../auteur/LOULOU411/1273472.aspx loulou411]

tu pourrais te relire quand même

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
1 oct. 2008 à 13:49
Re,
> [../auteur/PCPT/401740.aspx PCPT]: Merki. je me suis dis qu'il avais utilisé mon code... donc.
> : por ton problème essaie ceci. mais cela ne changera pas grand chose dans le sens ou il faut mettre qqchose pour copier

Dim i As Integer
For i = 1 To 450
  
   If Not IsEmpty(Range( "Z" & CStr(i))) Then
       If UCase$(Range("Z" & CStr(i)).Value) = "YES" Then
ce.EntireRow.Copy("feuil3")
       End If
   End If
Next
@+: Ju£i€n
Pensez: Réponse acceptée
0
loulou411 Messages postés 17 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 octobre 2008
1 oct. 2008 à 14:04
loulou est une fille !!! pas un homme ... oui je sais mon profil porte a confusion ...
bref ce n'est pas le sujet...
 bon honnetement je te remercie vraiment jrivet mais j'avai deja essayé le deuxieme end if et cela na rien changé au problème j'ai toujours mon erreur de next sans for.

sincerement je comprends rien à vba c'est vraiement la catastrophe je suis obligé de l'utiliser à mon travail mais j'ai aucune formation la dessus et malgré tous les tutoriels que j'ai pu lire , les forums et vba pour les nuls .. je ne comprends toujours pas .. pour moi tous ces codes c'est du chinois !!!

bref je desespère et je suis désolé de ne pas comprendre ce que vous me dites. merci bcp pour votre aide je suis sur que ca en aurait aidé beaucoup mais en fait je crois que je suis vraiement trop nul .....
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
1 oct. 2008 à 14:34
Re,
Oups excuse moi mademoiselle (madame)
Mais il est toujours bon de le savoir.

Alors reprenons, pour essayer d'avancer.

Est ce que tu as compris ce que faisait le petit bout de code que je t'ai donné?

Si vraiment tu as un problème de compréhension, envoie l'excel avec un descriptif DETAILLE de ce que tu souhaites (j'ai un peu de temps, alors je pourrais peu etre essayer de faire qqch pour t'expliquer plus en détails) mail: epsylon9 @ gmail point com

@+: Ju£i€n
Pensez: Réponse acceptée
0
loulou411 Messages postés 17 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 octobre 2008
1 oct. 2008 à 15:07
merci jrivet je contacte sur ton mail pour t'expliquer plus en détail ou j'en suis !!
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
1 oct. 2008 à 15:16
Re,
Bon continuons ici. J'attendais le fichier XLS mais ce n'est pas grave on va d'abord essayer d'avancer sans.

Alors essaie ceci en espérant que ce soit asser commenté.
NOTE: Cstr(i) convertit i (un entier) en chaine de caractère
donc "Z" & CStr(i) <gras>"Z2" si i 2</gras>
Dim i As Integer
'DestLigne = Ligne de destination
'dans la feuille 3
Dim DestLigne As Long
   DestLigne = 1
   'De la ligne 1 à 450
   For i = 1 To 450
       'si la cellule Zi (donc Z1, Z2 .... Z450 n'est pas vide
       If Not IsEmpty(Range("Z" & CStr(i))) Then
           'Si la valeur de la cellule Z1, Z2, .... Z450 est yes (ou yEs, ou yes, ou YeS)
           'bref on n'est pas sensible à la casse
           If UCase$(Range("Z" & CStr(i)).Value) = "YES" Then
               'on copie toute la ligne dans la feuille 3 à la ligne DestLigne
               Call Range("Z" & CStr(i)).EntireRow.Copy(ActiveWorkbook.Worksheets("feuil3").Range("A" & CStr(DestLigne)))
               'On incrément Destligne pour le prochain passage
               DestLigne = DestLigne + 1
           End If
       End If
   Next , ----
[../code.aspx?ID=41455 By Renfield]

@+: Ju£i€n
Pensez: Réponse acceptée
0
loulou411 Messages postés 17 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 octobre 2008
1 oct. 2008 à 18:31
ok merci je comprends bcp mieux ce que je fais ..

bon maintenant cane m'affiche aucune erreur ... ce qui est un bon debut pour moi !
pare contre rien ne se passe , je pense que je ne dois pas me positionner sur la bonne feuille de départ à la base , non ?
parceque moi j'enregistre direcement la macro sur la feuille en question et parès je met le texte , peut etre n'est ce pas suffisant ?
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
1 oct. 2008 à 18:39
Salut,
Il te reste à définir correctement QUAND tu souhaites faire cette copie pour savoir exactement ou mettre le code.

Et ce que tu veux le faire à l'ouverture du classeur, ou bien alors de l'appui sur un bouton etc.

@+: Ju£i€n
Pensez: Réponse acceptée
0
loulou411 Messages postés 17 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 octobre 2008
2 oct. 2008 à 11:36
Salut ,

je voudrais appuyer sur un bouton
0
loulou411 Messages postés 17 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 2 octobre 2008
2 oct. 2008 à 16:10
ca marche !!!! merci bcp pour ton aide précieuse et ta  patience  jrivet !!!

@@+++
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
2 oct. 2008 à 16:17
Re,
pas de quoi. @+ sur le forum: Ju£i€n
Pensez: Réponse acceptée
0
Rejoignez-nous