FORUM Tom's Hardware » Programmation » Autre » Excel 2003 : traitement des données
 

Excel 2003 : traitement des données

Il y a 160 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Excel 2003 : traitement des données
 
Plus d'informations

Coucou,
 
J'ai besoin d'automatiser le traitement des données sur un fichier au format toujours identique.  
J'ai besoin de réaliser les opérations suivantes :

  • si pour la colonne 'numéro de contrat' la valeur est comprise entre A et C, alors effacer la ligne
  • si pour la colonne 'num contrat' la valeur est de FR et que pour la colone 'colonne 2' la valeur est 'IA' alors effacer la ligne.

Quelqu'un saurait-il me sauver de ces traitements que je dois effectuer tous les jours à la main ?
 
Merci !!!!!

zeb
Profil : Modérateur libre
Plus d'informations

Et bien si tu as un traitement à faire à la main, enregistre-le dans une macro, et rappelle cette macro à chaque fois que tu en as besoin.

Plus d'informations

Salut,
Merci pour l'aide. Le problème c'est que le nombre de lignes concernées pour chaque critère est variable. Or dans ma macro, j'élimine un nombre fixé et invariable de lignes. Genre : supprimer les lignes 120 à 135. Mais si demain, le nb est plus grand, seules celles de 120 à 135 seront éliminées.
Que ferais-tu ?

zeb
Profil : Modérateur libre
Plus d'informations

Ta macro est enregistrée. C'est bien.
 
Maintenant il faut l'adapter :
- Virer les Activate, Select et autre Selection, à bon escient.
- Utiliser des If pour vérifier si les conditions sont respectées.

Plus d'informations

Merci pour tes encouragements.
si je souhaite faire un test sur le premier caractère du contenu d'un cellule, comment je dois procéder ?
Exemple de ce que je souhaite implémenter :
If left(Cells(i, 4);1) < "3" Then Rows(i).Delete
Mais la fonction left n'existe pas apparemment.
Merci pour tes lumières !

Plus d'informations

Pour plus de clarté voici  mon code  
 

Code :
  1. Sub Mise_en_FormeGL()
  2. '
  3. ' TESTESTTEST Macro
  4. ' Macro recorded 10/07/2006 by MILLIPORE
  5. '
  6.    
  7. For i = 16000 To 2 Step -1
  8. If Cells(i, 3) = "465" And Cells(i, 1) = "EI" Then Rows(i).Delete
  9. If (Cells(i, 2) = "9413" Or Cells(i, 2) = "9430" ) And (Cells(i, 1) = "US" Or Cells(i, 1) = "CL" ) Then Rows(i).Delete
  10. If Cells(i, 4) = "16A100" Then Rows(i).Delete
  11. If Cells(i, 4) <= "300000" Then Rows(i).Delete  'et c est ici que ça bogue
  12. Next i
  13. End Sub

Plus d'informations

Au temps pour moi Zeb, je viens de trouver mon erreur. Elle provient du fait, que cela fonctionne parfaitement, seulement, cela prend bcp de temps.
Je pense que la longueur du traitement m'a fait pensé que cela boguait.
Problème résolu.

zeb
Profil : Modérateur libre
Plus d'informations

Citation :

Mais la fonction left n'existe pas apparemment.

Rhoo... Problème de référence. --> Outils/Références/[x] VisualBasic Pour Application
 
Quelque chose ne va pas dans ton code :

Code :
  1. If Truc1 Then Rows(i).Delete
  2. If Truc2 Then Rows(i).Delete


Et si Truc1 est vrai et que Truc2 l'est aussi ?
Et bien tu supprimes légitimement la ligne i puis illégitimement la ligne i+1 qui entre temps et devenue la ligne i.
 
Que faire ? Une variable Boolean ou une belle et grosse condition, pleine de parenthèses et de Or. Au choix :

Code :
  1. Dim a_supprimer As Boolean
  2. For i = ....
  3.     a_supprimer = Cells(i, 3).Value = "465" And Cells(i, 1).Value = "EI"
  4.     a_supprimer = a_supprimer Or ((Cells(i, 2).Value = "9413" Or Cells(i, 2).Value = "9430" ) And (Cells(i, 1).Value = "US" Or Cells(i, 1).Value = "CL" ))
  5.     a_supprimer = a_supprimer Or Cells(i, 4).Value = "16A100"
  6.     a_supprimer = a_supprimer Or Left(Cells(i, 4).Value ,1) <= "3"
  7.     If a_supprimer Then Rows(i).Delete
  8. Next i
Code :
  1. For i = ....
  2.     If (Cells(i, 3).Value = "465" And Cells(i, 1).Value = "EI" ) Or _
  3.        ((Cells(i, 2).Value = "9413" Or Cells(i, 2).Value = "9430" ) And (Cells(i, 1).Value = "US" Or Cells(i, 1).Value = "CL" )) Or _
  4.        (Cells(i, 4).Value = "16A100" ) Or _
  5.        (Left(Cells(i, 4).Value ,1) <= "3" ) Then
  6.         Rows(i).Delete
  7.     End If
  8. Next i

zeb
Profil : Modérateur libre
Plus d'informations

Eh, eh, le temps que j'écrive une réponse et M. Stephanosse a trouvé la solution. Les remarques restent pertinentes.
 
Enjoy!

Plus d'informations

Et il te remercie pour la vigileance dont tu as fais preuve car effectivement, je me serais fait avoir. Merci beaucoup Zeb.


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » Autre » Excel 2003 : traitement des données
 

Annonces Google
Publicité