[VBA Excel macro]réutilisation de variable + comparaisons auto

réutilisation de variable + comparaisons auto [VBA Excel macro] - VB/VBA/VBS - Programmation

Marsh Posté le 25-05-2005 à 10:41:16    

Je poste ici car je pense que ce que je cherche est un peu compliqué pour WS&R
Dans le cadre de l'automatisation de traitements de fichiers Excel (exportés par une appli en VB à partir d'une base access, pour poser le contexte ; je n'ai accès ni à la base ni à l'appli), je cherche en fait à faire deux choses différentes.
 
La première, c'est la réutilisation d'une variable.  
A l'ouverture d'un fichier qu'on va appeler fichier.xls, je lance une macro (que j'ai déjà faite) pour rendre les données exploitables. Ce que je voudrais, c'est qu'au lancement de la macro s'ouvre une inputbox, qui me permette de rentrer une variable, qu'on va appeler mois. Ensuite, une fois le traitement terminé, je voudrais que la macro enregistre fichier.xls sous mois.xls (donc réutiliser la variable comme nom de fichier). Une fois le fichier enregistré sous mois.xls, la macro ouvre un autre fichier excel, fichier2.xls. Dans ce fichier, la macro doit créer un nouvel onglet intitulé mois (du nom de la variable, donc), et doit une nouvelle fois réutiliser la variable pour faire un rechercher/remplacer, après un copier coller d'un onglet précédent vers l'onglet mois : cet onglet vient chercher ses données dans mois.xls.
Je ne pense pas que ce soit sorcier, mais faire ce genre de choses n'est pas spécifiquement dans mes compétences, et je n'ai pas de bouquins à disposition ni de connexion internet qui me permet de rechercher efficacement (i.e. ne pas mettre 3 h à afficher une page).
 
La deuxième est plus compliquée (enfin je pense), je ne sais meme pas si c'est faisable.
On parle d'un autre fichier, toujours extrait de la meme base.
Ce fichier reprend des produits, classés par marque, famille, sous-famille... Il comprend entre autres deux colonnes sur lesquelles je voudrais travailler : marge locale & marge consolidée.
Dans le cadre du traitement du fichier brut en quelque chose d'utilisable, je voudrais deux choses :
[-] en fonction de la sous famille, je voudrais que la macro identifie un taux de marge inférieur à la normale. Par exemple, si le taux de marge attendu pour la sous-famille 1 est d'au moins 20%, je voudrais que la macro détecte les produits de cette sous famille ayant une marge inférieure.
[-] je souhaiterais aussi que la macro identifie les produits dont la marge consolidée est inférieure à la marge locale, car c'est une anomalie.
Les lignes concernant ces produits seraient alors copiées dans un onglet "anomalies".
 
Merci pour toute aide.

Reply

Marsh Posté le 25-05-2005 à 10:41:16   

Reply

Marsh Posté le 25-05-2005 à 11:11:36    

pour la premiere question je peux te passer un bout de code qui permet de sauvegarder des onglet dans un nouveau fichier excel :

Code :
  1. Dim Newbook As Workbook
  2. Dim MyBook As Workbook
  3.     Set MyBook = ThisWorkbook
  4.     Set Newbook = Workbooks.Add(xlWBATWorksheet) 'Creer un nouveau fichier Excel avec une seule feuille dedans'
  5.    
  6.     Newbook.SaveAs Filename:=fName
  7.    
  8.     Workbooks(MyBook.Name).Sheets("Détail" ).Copy After:=Workbooks(Newbook.Name).Sheets(1)
  9.     Workbooks(MyBook.Name).Sheets("Moyenne Jour" ).Copy After:=Workbooks(Newbook.Name).Sheets(2)
  10.     Workbooks(MyBook.Name).Sheets("Moyenne Mois" ).Copy After:=Workbooks(Newbook.Name).Sheets(3)
  11.     Workbooks(MyBook.Name).Sheets("Journal d'erreur" ).Copy After:=Workbooks(Newbook.Name).Sheets(4)
  12.    
  13.     Application.DisplayAlerts = False 'Désactive le message d'alerte
  14.     Workbooks(Newbook.Name).Sheets("Feuil1" ).Delete
  15.     Application.DisplayAlerts = True
  16.    
  17.     Workbooks(Newbook.Name).save
  18.     Workbooks(Newbook.Name).Close


 
tu peux en faire une procedure avec le nom de ton fichier en parametre  
 
 
dim Fname as string
 
   Fname=Inputbox("Nom du fichier" ) & ".xls"
   call CopierOnglet(Fname)
 


Message édité par fusion_sadam le 25-05-2005 à 11:14:58
Reply

Marsh Posté le 26-05-2005 à 09:06:40    

un petit up pour le reste

Reply

Marsh Posté le 26-05-2005 à 15:24:46    

ben c'est un peu vague ce que tu demande, sur quoi tu bloque exactement ?
 
si tu veux rechercher une cellule dans une colonne je crois qu'il ya une fonction pour ca
 
sinon tu peux la programmer toi meme, voici la fonction Place que j'utilise pour trouver la éniéme place d'un élément dans un vecteur
je l'ai un peu modifié pour que ca marche sur des colonnes
 
à placer dans un Module
 

Code :
  1. Public Function PLACE2(ByVal ELT As Integer, _
  2.                        ByVal Lig As Integer, _
  3.                        ByVal Col As Integer) As Integer
  4. Dim I         As Integer  'Compteur
  5. Dim P         As Integer  'Place de l'élement trouvé ( =0 Si non Trouvé)
  6. Dim MaCellule As Range    'Cellule à comparer
  7. 'Initialisation
  8. I = Lig
  9. P = 0
  10. Set MaCellule = Cells(I, Col)
  11. 'Boucle de recherche, s'arrete si l'élément recherché est trouvé
  12. 'où à la premiere cellule vide trouvé
  13. While MaCellule.Value <> "" And P = 0
  14.     If MaCellule.Value = ELT Then
  15.         P = I
  16.        Else
  17.         I = I + 1
  18.         Set MaCellule = Cells(I, Col)
  19.     End If
  20.    
  21. Wend
  22. PLACE = P
  23. End Function


 
 
Exemple pour y faire appel
 
'Recherche la valeur 3 dans la premiére colonne  
'à partir de la premiere cellule
 
MsgBox (PLACE(3, 1, 1))

Reply

Marsh Posté le 28-05-2005 à 02:08:22    

je ne bloque sur rien, je ne sais même pas par quoi commencer.
 
je ne veux pas rechercher une cellule dans une colonne, je veux :
- trouver toutes les cellules d'une colonne inférieures à une valeur définie, et si possible que cette valeur puisse varier en fonction d'un critère présent sur les lignes (ie une sous famille)
- avoir une comparaison systématique par ligne des valeurs de deux colonnes, sachant que si sur la ligne x la colonne B est inférieure à la colonne A, ce n'est pas normal, et je dois donc le savoir.
 
je ne sais pas si excel est capable de faire ça, c'est pour ça que je demande.
si ce n'est pas possible, je m'en remettrai ; si c'est possible et que quelqu'un sait à peu près comment faire, eh bien je veux bien qu'il me dise.


Message édité par corran le 28-05-2005 à 02:09:53
Reply

Marsh Posté le 28-05-2005 à 06:17:52    

bonjour,
A vue de nez, parce que la présentation est quand même assez vague...
Le format conditionnel pourrait sans doute répondre au moins partiellement (pour le point 2) à ta préoccupation.
Format / Mise en Forme Conditionnelle...
La Valeur de la cellule est ....supérieure à ...la cellule d'à coté
Alors -> Mise en forme Format Rouge (par exemple)
Pour le point 1 c'est trop vague pour répondre.
Tu pourrais mettre un petit fichier joint explicatif sur  
http://cjoint.com/index.php
A+

Reply

Marsh Posté le 30-05-2005 à 11:45:57    

corran a écrit :

je ne veux pas rechercher une cellule dans une colonne, je veux :
- trouver toutes les cellules d'une colonne inférieures à une valeur définie, et si possible que cette valeur puisse varier en fonction d'un critère présent sur les lignes (ie une sous famille)


 
Pour trouver toute les cellules faut deja savoir en trouver une, et les criteres sont a mettre dans la fonction de je t'ai donnée
 
Mais comme galopin je pense que le format confitionnel pourrais deja beaucoup t'avancer.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed