Se connecter avec
S'enregistrer | Connectez-vous

écrire un texte défini dans une case excel dans une condition

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Salut,

Demande à l'enregistreur de macro :
Alors que l'enregistrement est en cours, mets une valeur dans la cellule A12, puis efface les cases de la colonnes A. Arrête l'enregistrement et va regarder le code obtenu. Etudie-le, et surtout arrange-le, parce qu'il est très moche. Je peux t'aider à le faire.

voici mon code

  1. ListBox1.Clear
  2. While fichiers <> ""
  3. ListBox1.AddItem fichiers
  4.  
  5. 'I//écriture du tableau
  6. 'A)Le nom du stagiaire
  7. Range("D3").Select
  8. ActiveCell.FormulaR1C1 = NomStagiaire
  9.  
  10. 'B)Se Présenter première exercice
  11. If fichiers Like "*ValideSePresenter1*" Then
  12. Range("E6").Select
  13. ActiveCell.FormulaR1C1 = "X"
  14. Else
  15. Range("E6").Select
  16. ActiveCell.FormulaR1C1 = ""
  17. End If
  18.  
  19. If fichiers Like "*EnCoursSePresenter1*" Then
  20. Range("F6").Select
  21. ActiveCell.FormulaR1C1 = "X"
  22. Else
  23. Range("F6").Select
  24. ActiveCell.FormulaR1C1 = ""
  25. End If
  26. fichiers = Dir()
  27. Wend


je voulais faire en sorte que :

-pour chacune des valeur de fichiers soit rentré dans la listbox1 ça fonctionne
-si l'une des valeurs de fichier contien ValideSePresenter1 alors on met une croi dans E6 sinon on enlève la croi précédente (et c là que je m'embrouille un pe déjà dans mon algo)

-si l'une des valeurs de fichier contien EnCoursSePresenter1 alors on met la croi dans E7

hum hum je m'embrouille tout seul
Expert Programmation

Mouhais :/ 

Bon, alors première chose, tu me vires tout de suite ces Machin.Select/ActiveCell.Truc. C'est ridicule. Ecris Machin.Truc directement. :spamafote: 
FormulaR1C1, c'est trop long à écrire. Formula, est plus court. Mais au fait, pourquoi entrer une formule alors que ce n'en est pas une ? Utilise Value. :o 
Pis While .. Wend c'est du BASIC 1, de 1985. Utilise Do While .. Loop.

Regarde :
  1. '// Doit manquer un Dir(quelquechose) Ici ??
  2. fichiers = Dir(quelquechose)
  3.  
  4. ListBox1.Clear
  5. Do While fichiers <> ""
  6. ListBox1.AddItem fichiers
  7.  
  8. '// I//écriture du tableau
  9.  
  10. '// A)Le nom du stagiaire
  11. Range("D3" ).Value = NomStagiaire
  12.  
  13. '// B)Se Présenter première exercice
  14. If fichiers Like "*ValideSePresenter1*" Then
  15. Range("E6" ).Value = "X"
  16. Else
  17. Range("E6" ).Value = ""
  18. End If
  19.  
  20. If fichiers Like "*EnCoursSePresenter1*" Then
  21. Range("F6" ).Value = "X"
  22. Else
  23. Range("F6" ).Value = ""
  24. End If
  25. fichiers = Dir()
  26. Loop


Ca à plus de gueule, non ?
Alors on complique, pour simplifier :pt1cable:  (Ne pas trop en abuser) :
  1. Dim fichier As String
  2.  
  3. fichier = Dir(quelquechose)
  4. ListBox1.Clear
  5. Do While fichiers <> ""
  6. ListBox1.AddItem fichier
  7.  
  8. Range("D3" ).Value = NomStagiaire
  9. Range("E6" ).Value = Iif(fichier Like "*ValideSePresenter1*", "X", "")
  10. Range("F6" ).Value = Iif(fichier Like "*EnCoursSePresenter1*", "X", "")
  11.  
  12. fichier = Dir()
  13. Loop


(J'ai mis le nom de la variable au singulier :p  )

Allez, à toi de m'étudier tout ça, pour que ça te soit profitable.

----------------------------

C'est dans le nom du fichier que tu veux trouver ValideSePresenter1 et/ou EnCoursSePresenter1 ?

oui c'est bien dans le nom du fichier mais fichier contient plusieur nom enfaite fichier renvoi les nom de fichiers contenu dans un répertoire

et quelque soit le nom du fichier (si il contient "ValideSepresenter1" ou "EnCourSepresenter2) j'ai toujours un X dans F6 et F7...

  1. Private Sub ListBox2_Click()
  2. Dim NomStagiaire As String
  3.  
  4.  
  5. NomStagiaire = ListBox2.Value
  6. fichiers = Dir("\\squeeze\exo\cours d'anglais\Suivi Stagiaire\" & NomStagiaire & "\")
  7.  
  8. 'MsgBox NomStagiaire & ": "
  9. ListBox1.Clear
  10. Do While fichiers <> ""
  11. ListBox1.AddItem fichiers
  12.  
  13. 'I//écriture du tableau
  14. 'A)Le nom du stagiaire
  15. Range("D3").Value = NomStagiaire
  16.  
  17. 'B)Se Présenter première exercice
  18. If fichiers Like "*ValideSePresenter1*" Then
  19. Range("E6").Value = "X"
  20. Else
  21. Range("E6").Value = ""
  22. End If
  23.  
  24. If fichiers Like "*EnCoursSePresenter1*" Then
  25. Range("F6").Value = "X"
  26. Else
  27. Range("F6").Value = ""
  28. End If
  29. 'C)Se Présenter deuxième exercice
  30. If fichiers Like "*ValideSePresenter2*" Then
  31. Range("E7").Value = "X"
  32. Else
  33. Range("E7").Value = ""
  34. End If
  35.  
  36. If fichiers Like "*EnCoursSePresenter1*" Then
  37. Range("F7").Value = "X"
  38. Else
  39. Range("F7").Value = ""
  40. End If
  41. fichiers = Dir()
  42. Loop
  43. End Sub


PS:
pourquoi tu dit qu'il ne faut pas abuser du If bizar ?
  1. Iif(fichier Like "*ValideSePresenter1*", "X", "" )
Expert Programmation

Euh, non, c'est de compliquer pour simplifier, dont il ne faut pas abuser. Sous UNIX, on a même inventé le principe Pire c'est mieux :D 

Je vois que tu es approximatif dans la déclaration de tes variables (c'est un reproche :o  - sauf si tu ne montres pas tout ton code ce qui n'est plus un reproche :)  ). Utilise l'Option Explicit.

Je ne vois pas le problème pour tes croix. Sauf que la ligne 18 et la ligne 36 sont identiques. Sois plus rigoureux. Raccourcir les lignes de code grâce à Iif() par exemple, et tout mettre comme dans un pseudo tableau (regarde mes lignes 8, 9 et 10, ne dirait-on pas un tableau) permet de vérifier du premier coup d'oeil.

c'est vrai que c'est classe si j'ai bien compri

si on décompose la parenthèse du IIf on a d'abord le If ensuite le then et ensuite le else c'est biens ça ?

sinon voila mon code complet
je pense que le problème vien du faite qu'il y a plusieurs valeurs dans Fichiers
(parcequ'il y a plusieurs fichiers dans le repertoire )
j'ai mis ma construction de tableau là parceque c'est là que la valeurs de fichiers va changer pour chacun des noms de fichier du repertoire concerné

  1. Private Sub CommandButton2_Click()
  2.  
  3. Dim A As Integer
  4. Dim Fs As Object, Files As Object, F As Object
  5. Dim NomDossier As String
  6. Dim Sf As Object, Fx As Object
  7. Dim NomStagiaire As String
  8.  
  9.  
  10. ListBox2.Clear
  11.  
  12. A = 2
  13. Set Fs = CreateObject("Scripting.FileSystemObject")
  14. NomDossier = "\\squeeze\exo\cours d'anglais\Suivi Stagiaire"
  15.  
  16.  
  17. If NomDossier = "" Then Exit Sub
  18. Set Dossier = Fs.GetFolder(NomDossier)
  19. Set Files = Dossier.Files
  20. If Files.Count <> 0 Then
  21. Set F = Fs.GetFolder(NomDossier)
  22. Set Sf = F.SubFolders
  23. For Each Fx In Sf
  24. A = A + 1
  25. ListBox2.AddItem Fx.Name
  26. Next
  27.  
  28. End If
  29.  
  30. End Sub
  31.  
  32.  
  33. Private Sub ListBox2_Click()
  34. Dim NomStagiaire As String
  35.  
  36.  
  37. NomStagiaire = ListBox2.Value
  38. fichiers = Dir("\\squeeze\exo\cours d'anglais\Suivi Stagiaire\" & NomStagiaire & "\")
  39.  
  40. ListBox1.Clear
  41.  
  42. Do While fichiers <> ""
  43. ListBox1.AddItem fichiers
  44.  
  45. 'I//écriture du tableau
  46.  
  47. 'A)Le nom du stagiaire
  48.  
  49. Range("D3").Value = NomStagiaire
  50.  
  51. 'B)Se Présenter
  52.  
  53. Range("E6").Value = IIf(fichier Like "*ValideSePresenter1*", "X", "")
  54. Range("F6").Value = IIf(fichier Like "*EnCoursSePresenter1*", "X", "")
  55. Range("E7").Value = IIf(fichier Like "*ValideSePresenter2*", "X", "")
  56. Range("F7").Value = IIf(fichier Like "*EnCoursSePresenter2*", "X", "")
  57.  
  58. 'C)Les Articles
  59.  
  60. Range("E8").Value = IIf(fichier Like "*ValideLesArticles1*", "X", "")
  61. Range("F8").Value = IIf(fichier Like "*EnCoursLesArticles1*", "X", "")
  62. Range("E9").Value = IIf(fichier Like "*ValideLesArticles2*", "X", "")
  63. Range("F9").Value = IIf(fichier Like "*EnCoursLesArticles2*", "X", "")
  64. Range("E10").Value = IIf(fichier Like "*ValideLesArticles3*", "X", "")
  65. Range("F10").Value = IIf(fichier Like "*EnCoursLesArticles3*", "X", "")
  66.  
  67.  
  68. fichiers = Dir()
  69. Loop
  70. End Sub



mais j'ai aucune croix qui s'affiche :'(  snif

:s effectivement je ne suis pas assé rigoureux c'était des faute de frape dans le nom des "valideSePresenter1"
par contre je voudrais que si il y a 3 fichiers détecté il y ai 3 croix dans le tableau ce qui n'est pas le cas actuellement c'est à cause du ELSE "" mais je ne sais pas par quoi le remplacer

pour l'instant j'ai rajouté avant la boucle
  1. Range("E6,E7,E8,E9,E10,F6,F7,F8,F9,F10").Value = ""


et j'ai remplacé mais IIF par

  1. If fichiers Like "*valideSePresenter1*" Then
  2. Range("E6").Value = "X"
  3. End If


je sais c'est trop moche je me sen honteux ! mais IIF ne peux pas s'écrire sans Else ou je me trompe ?
Lassé par la pub ? Créez un compte