Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1591 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Besoin d'aide pour macro

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] Besoin d'aide pour macro

n°1919824
Nameless'
Posté le 31-08-2009 à 12:08:57  profilanswer
 

Bonjour,
 
J'ai actuellement un fichier excel qui contient plusieures lignes de noms (environ 1500). Certains noms apparaissent plusieurs fois.
 
Mon but est de créer un nouveau document Excel qui contiendrait cette liste de nom une seule fois, puis les colones apparentées à côté (une sorte de matrice en gros)
 
Ce n'est pas très clair comme ça, je pense que le mieux serait de regarder le fichier joint :D
 
La base est dans la "Sheet 1", tandis que le résultat que je souhaite obtenir est dans l'onglet "Résultat" :)
 
Fichier joint : http://cjoint.com/?iFmiDpzB0e
 
Si quelqu'un pouvait m'aider à développer une macro pour ça, cela m'éviterais un long travail fastidieux :(
 
N'ayant pas de connaissances en VBA, et ne sachant pas quoi taper comme recherche dans google, je m'en remet à vous :D
 
Merci !

mood
Publicité
Posté le 31-08-2009 à 12:08:57  profilanswer
 

n°1920227
Wysi
Posté le 01-09-2009 à 12:00:08  profilanswer
 

A mon avis, le plus simple c'est de réorganiser ta feuille de données en ajoutant une colonne acces et en supprimant les lignes intermédiaires qui répetent les entêtes.
 
Ensuite tu selectionnes tout ton tableau, tu vas dans données/Rapport de tableaux croisés dynamique. suivant, suivant. Ensuite tu cliques sur disposition.
Tu fais glisser Nom, num carte, date création, date expiration, société sur Ligne, acces sur colonne et encore une fois acces sur Données.
 
Tu double cliques sur tous les champs de ligne un par un et tu coches "Aucun" pour sous totaux. Tu double cliques sur acces que tu as mis dans données et tu sélectionnes "Nombre" au lieu de "Sommes".
 
Ok, Terminer et voilà. Bon tu as des "1" au lieu des X et pas de case rouge mais une petite mise en forme conditionnelle t'arrangera ça.
 
Je te mets le fichier comme je l'ai traité ici :
 
http://cjoint.com/data/jbl0kjar3F.htm
 
(Pas sur que ça soit super clair mais les TCD ça a beau être de la merde pour ton cas ça me parait ce qu'il y a de plus simple.

n°1920360
Nameless'
Posté le 01-09-2009 à 15:44:03  profilanswer
 

Merci Wysi, ça marche impeccable :)

n°1923592
chrysler99
Posté le 12-09-2009 à 14:35:34  profilanswer
 

Bonjour à tous,
 
Je me permets de solliciter votre aide à mon tour.
 
Voilà je suis un vrai novice en VBA et je dois faire une macro en VBA sous excel mais je n'y arrive pas et ça fait deux jours que je galère dessus.
 
Je vous explique mon problème:
 
J'ai un tableau avec quatre colonnes : Date, Progress, Lead time before meeting, Level of risk.
J'ai une date de meeting pour chaque étape.
 
Le but de ma manœuvre est la suivante: en fonction du temps restant avant le meeting ( date - date de meeting ) (ça correspond au Lead time before meeting) et de mon niveau de progression(progress) , je voudrais évaluer le niveau de risk (Level of risk).
 
Progress: valeur rentrée à la main
Date: valeur rentrée à la main
Lead time before meeting = date - date de meeting
 
Si la valeur dans Lead Time before meeting est inférieure -14 (inclus) et la valeur Progress comprise entre 0 (exclu) et 100 (exclu)
     Alors écrire "maitrisé" dans la colonne level.
Si la valeur dans Lead Time before meeting est inférieure à -14 (inclus) et la valeur Progress égale à 100
     Alors écrire "nul" dans la colonne level (sinon rien écrire dans level).
 
Si la valeur dans Lead time before meeting est comprise entre -14 (exclu) et -7 (exclu) et la valeur Progress comprise entre 0 (exclu) et 50 (inclus)
    Alors écrire "maitrisé" dans la colonne level.
Si la valeur dans Lead time before meeting est comprise entre -14 (exclu) et -7 (exclu) et la valeur Progress comprise entre 50 (exclu) et 100 (exclu)
    Alors écrire "bas" dans la colonne level.
Si la valeur dans Lead time before meeting est comprise entre -14 (exclu) et -7 (exclu) et la valeur Progress égale à 100.
    Alors écrire "nul" dans la colonne level (sinon rien écrire dans level).
 
Si la valeur dans Lead time before meeting est comprise entre -7 (inclu) et 0 (exclu) et la valeur Progress comprise entre 0 (exclu) et 50 (inclus)
    Alors écrire "très élevé" dans la colonne level.
Si la valeur dans Lead time before meeting est comprise entre -7 (inclu) et 0 (exclu) et la valeur Progress comprise entre 50 (exclu) et 75 (inclus)
    Alors écrire "élevé" dans la colonne level.
Si la valeur dans Lead time before meeting est comprise entre -7 (inclu) et 0 (exclu) et la valeur Progress comprise entre 75 (exclu) et 100 (exclu)
    Alors écrire "maitrisé" dans la colonne level.
Si la valeur dans Lead time before meeting est comprise entre -7 (inclu) et 0 (exclu) et la valeur Progress est égale à 100
    Alors écrire "nul" dans la colonne level (sinon rien écrire dans level).
 
Si la valeur dans Lead time before meeting est égale à 0 et la valeur Progress comprise entre 0 (exclu) et 100 (exclu)
    Alors écrire "overdue" dans la colonne level.
Si la valeur dans Lead time before meeting est égale à 0 et la valeur Progress est égale à 100
    Alors écrire "maitrisé" dans la colonne level (sinon rien écrire dans level).
 
Si la valeur dans Lead time before meeting est supérieure à  0 (exclu) et la valeur Progress est différente de " " (valeur vide)
    Alors écrire "overdue" dans la colonne level (sinon rien écrire dans level).
 
Je sais pas si cela, vous paraît clair. Je vous envoie le tableau que j'ai réalisé: http://cjoint.com/?jmnSktCYp8.
 
Sur le tableau, j'ai fait ce que je viens d'écrire mais avec la fonction "si" d'excel, uniquement. Mais comme je ne peux mettre plus de 7 fonctions "si" à la suite dans excel, j'ai dissocié les conditions pour Lead time before meeting variant de :
- l'infini à -14(inclus)
de -14 (exlu) à -7(inclus)
de -7(exclu) à 0(exclus)
pour = à 0
pour supérieur à 0 .
 
Mon but est de faire une seule macro qui pourrait réaliser ces différents tests et mettre le résultat de ces tests (nul, bas, maitrisé, élevé et très élevé) dans la colonne Level of risk.
 
La macro que j'ai développé est celle-ci mais elle ne marche pas.  
 
Vous pouvez me la corriger pour la faire fonctionner, s'il vous plaît. Merci.
 
 
Je vous colle la macro ici:
 
 
Sub macro()
 
 
 
'Pour Lead time before meeting inférieur ou égale à -14(inclus)
 
If ActiveSheet.Range("G23" ).Value <= -14 Then
    If ActiveSheet.Range("F23" )>0 And ActiveSheet.Range("F23" ) < 100 Then ActiveSheet.Range("H23" ).Value = "maitrisé"
Else
        If ActiveSheet.Range("F23" ) = 100 Then ActiveSheet.Range("H23" ).Value = "nul" Else ActiveSheet.Range("H23" ).Value = " "
End If
 
 
'Pour Lead time before meeting compris entre -14 (exclu) et -7 (exclu)
 
If ActiveSheet.Range("G23" ).Value > -14 And ActiveSheet.Range("G23" ).Value < -7 Then
    If ActiveSheet.Range("F23" ).Value > 0 And ActiveSheet.Range("F23" ).Value <= 50 Then ActiveSheet.Range("H23" ).Value = "maitrisé"
Else
        If ActiveSheet.Range("F23" ).Value > 50 And ActiveSheet.Range("F23" ).Value < 100 Then  ActiveSheet.Range(H23" ).Value = "bas"
            If ActiveSheet.Range("F23" ).Value = 100 Then ActiveSheet.Range("H23" ).Value = "nul" Else ActiveSheet.Range(H23" ).Value = " "
End If
 
 
'Pour Lead time before meeting compris entre -7 (inclus) et 0(exclu)
 
If ActiveSheet.Range("G23" ).Value > -7 And ActiveSheet.Range("G23" ).Value < 0 Then
    If ActiveSheet.Range("F23" ).Value > 0 And ActiveSheet.Range("F23" ).Value <= 50 Then ActiveSheet.Range("H23" ).Value = "très élevé"
Else
        If ActiveSheet.Range("F23" ).Value > 50 And ActiveSheet.Range("F23" ).Value <= 75 Then ActiveSheet.Range("H23" ).Value = "élevé"
            If ActiveSheet.Range("F23" ).Value > 75 And ActiveSheet.Range("F23" ).Value < 100 Then ActiveSheet.Range("H23" ).Value = "maitrisé"
                If ActiveSheet.Range("F23" ).Value = 100 Then ActiveSheet.Range("H23" ).Value = "nul" Else ActiveSheet.Range("H23" ).Value = " "
End If
 
 
'Pour Lead time before meeting égale à 0
 
If ActiveSheet.Range("G23" ).Value = 0 Then
    If ActiveSheet.Range("F23" ).Value > 0 And ActiveSheet.Range("F23" ).Value < 100 Then ActiveSheet.Range("H23" ).Value = "overdue"
Else
        If ActiveSheet.Range("F23" ).Value = 100 Then ActiveSheet.Range("H23" ).Value = "maitrisé" Else ActiveSheet.Range("H23" ).Value = " "
End If
 
 
'Pour Lead time before meeting supérieur à 0 (exclu)
 
If ActiveSheet.Range("G23" ).Value > 0 Then
    If ActiveSheet.Range("F23" ).Value <> " " Then ActiveSheet.Range("H23" ).Value = "overdue" Else ActiveSheet.Range("H23" ).Value = " "
End If
 
 
End Sub
 
http://cjoint.com/?jmnSktCYp8
 
Merci pour votre aide


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Besoin d'aide pour macro

 

Sujets relatifs
VBA - Macro d'enregistrement de Fichier ac date du jour / automatiqueGestion des sauts de pages en VBA !
VBA :Garder les arrondi avec les pourcentagesdouble click "copier/coller" en VBA
PHP ajout page automatique video AIDE SVP :) !!![VBA] Problème sur creation graphique à 2 axes
[VBA] une vidéo sous word???Constructeur Tableau - Merci pour votre aide ! :-)
[VBA] Programmer un indicateur coloré en fonction d'une valeurBesoin d aide pour une macro excel / VBA svp
Plus de sujets relatifs à : [VBA] Besoin d'aide pour macro


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR