IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Validation de compétence


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    responsable SMI
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : responsable SMI
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Par défaut Validation de compétence
    Bonjour

    Avant tout, je travaille sur office 2007 et avec windows seven, et c'est mon tout premier post sur ce forum
    Je pense y revenir fréquemment, car mon poste au taf nécessite une polyvalence certaine et j'ai besoin de savoir programmer quelques outils de base avec VBA pour commencer.

    J'aimerais créer une macro sur [/contents/1103-introduction-a-la-notion-de-tableur excel] qui permettrait de transposer des données des feuilles 1 2 et 3 vers la feuille4 en fonction de l'acquisition ou non de compétences au travail.

    Pour faire simple, sur la feuille 1 qui correspond a l'activité "peinture" , il y'a une liste de compétences précises en colonne A. En colonne Y, une personne remplira soit 0 (non acquis), soit 1 (=acquis). Pareil pour les feuilles 2 et 3 qui correspondent a d'autres activités.

    Le but de la manoeuvre est de copier-coller sur la feuille 4 toutes les compétences (colonne A) des feuilles 1 2 et 3 dont on retrouve "1" en colonne Y. Il faut que le nom de l'activité apparaisse au dessus des compétences collées, qui s'organisent en liste avant d'être imprimées au sein d'une feuille finale avec une phrase d'intro standardisée, la fameuse liste de compétence, puis la formule de [/contents/129-charte-d-utilisation-de-commentcamarche-net-respect-d-autrui politesse] standardisée.

    Je suis débutant en VBA, je pourrai je pense m'en sortir en tapant un code ligne par ligne pour dire de faire un copypaste de l'item en colA si en colY on retrouve "1", mais ca me parait extrêmement lourd.... de plus je suis totalement incapable de bien réorganiser la feuille 4 pour avoir une liste (ou un tableau) bien propre, car c'est le but : cette liste doit être bien propre pour s'inserer dans une feuille officielle.

    Je demande aide a la communauté

    merci a vous

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour et bienvenu!

    Nous avons tous été débutants et le sommes tous, il suffit de choisir la matière.
    VBA est un vrai language, qui n'a de basique que le nom, donc il nécessite de l'apprentissage et du travail
    Deux bonnes manières de commencer selon moi:
    1. Bosser les différents supports présents sur ce site (perso, c'est ce que j'ai fait)
    2. Enregistrer une macro de ce que vous voulez faire

    Après, on pourra regarder, autrement, quel est l'intérêt de vous livrer un code clé en main?
    Ca n'engage que moi .....

  3. #3
    Membre régulier
    Homme Profil pro
    responsable SMI
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : responsable SMI
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Par défaut
    Bonjour et merci pour votre reponse rapide !

    j'ai deja commencer a m'autoformer grace a ce site: Tutoriels et cours de formation Excel



    et j'ai deja tapé une macro que je peux vous fournir pour évaluer mon niveau. Il est faible, j'ai pas tout saisi de ce que j'ai fait car j'ai pris des bouts de code tout fait : il ya meme un endroit de ma macro que je ne comprends absolument pas au niveau du language, meme si je sais ce que cela produit dans mon fichier (c'est une fonction pour trier une colonne).

    J'ai réussi en revanche a faire entrer une variable grace a msgbox, et dim as integer, a faire du copypaste, de l'activate et open workbooks....

    Je comprends assez vite les choses, et ce language me parle relativement.
    Malgré tout je suis réaliste : je suis encore une belle buse et je veux progresser

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Merci,

    Personnellement, ma bible d'autodidacte est sur ce site: http://bidou.developpez.com/article/VBA/
    et c'est ce qui m'a incité après à contribuer également ....

    et j'ai deja tapé une macro que je peux vous fournir pour évaluer mon niveau. Il est faible, j'ai pas tout saisi de ce que j'ai fait car j'ai pris des bouts de code tout fait : il ya meme un endroit de ma macro que je ne comprends absolument pas au niveau du language, meme si je sais ce que cela produit dans mon fichier (c'est une fonction pour trier une colonne).

    J'ai réussi en revanche a faire entrer une variable grace a msgbox, et dim as integer, a faire du copypaste, de l'activate et open workbooks....
    => il y a bien pire comme démarrage!
    => Je le redis: vous pouvez également passer par l'enregistreur de Macro, c'est aussi un bon démarrage car:
    - le code est en génèral compréhensible, puisque il est l'image de fonctions excel
    - il est tellement peu optimisé qu'il en est presque risible .... mais ça permet de vous faire la main aussi

    Vous pouvez fournir votre code si besoin .....

  5. #5
    Membre régulier
    Homme Profil pro
    responsable SMI
    Inscrit en
    Février 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : responsable SMI
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 10
    Par défaut
    Oui voici mon code.

    vous allez halluciner en voyant le nombre de fois ou mes fichiers s'activent et se desactivent, tout ça pour faire du copypaste : en effet, j'ai utilisé l'enregistreur pour taper une partie du programme !!
    Le problème que vous allez voir dans cette macro, je ne veux pas le retrouver dans celle que je dois faire aujourd'hui, a savoir avoir besoin d'activer/désactiver 10000 fois des feuilles ou fichiers pour simplement faire du copypaste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    Attribute VB_Name = "Module1"
    Sub envoi_en_planification()
     
     
    '
    On Error Resume Next
    Workbooks("PLANNING GENERAL DES TRAVAUX DU BLABLA.xls").Activate
    ' Si une erreur est renvoyée, fichier non ouvert
    If Err.Number <> 0 Then
      'j'ouvre le fichier 2
     Application.Workbooks.Open "\\srv-sauvoy\sauvoy\les travaux du grand sauvoy\PLANNING GENERAL DES TRAVAUX DU BLABLA.xls"
        End If
    On Error GoTo 0
     
    Windows("CUISINE CENTRALE.xls").Activate
     
     
    Dim Lp As Byte
    Lp = Application.InputBox("Quelle ligne vous voulez envoyez en planification ?", Type:=1 + 4)
    Do While Lp < 2 Or Lp > 21
    If Lp = False Then
        Excel.Run ("fermer_sans_sauver")
        GoTo slam
     End If
     
        MsgBox ("valeur incorrecte")
        Lp = Application.InputBox("Quelle ligne vous voulez envoyez en planification ?", Type:=1 + 4)
    Loop
     
     
    Workbooks("PLANNING GENERAL DES TRAVAUX DU BLABLA.xls").Activate
        Rows("4:4").Select
        Selection.Insert Shift:=xlDown
        Windows("CUISINE CENTRALE.xls").Activate
        Cells(Lp, 2).Select
        Selection.Copy
        Windows("PLANNING GENERAL DES TRAVAUX DU BLABLA.xls").Activate
        Range("C4").Select
        ActiveSheet.Paste
        Windows("CUISINE CENTRALE.xls").Activate
        Cells(Lp, 6).Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("PLANNING GENERAL DES TRAVAUX DU BLABLA.xls").Activate
        Range("D4").Select
        ActiveSheet.Paste
        Windows("CUISINE CENTRALE.xls").Activate
        Cells(Lp, 7).Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("PLANNING GENERAL DES TRAVAUX DU BLABLA.xls").Activate
        Range("B4").Select
        ActiveSheet.Paste
        Windows("CUISINE CENTRALE.xls").Activate
        Cells(Lp, 8).Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("PLANNING GENERAL DES TRAVAUX DU BLABLA.xls").Activate
        Range("E4").Select
        ActiveSheet.Paste
        Range("G4").Value = "Monsieur TARTEMPION"
        Range("A4").Value = "CUISINE CENTRALE"
        Windows("CUISINE CENTRALE.xls").Activate
        Range(Cells(Lp, 1), Cells(Lp, 9)).Select
        Application.CutCopyMode = False
        Selection.ClearContents
        Dim Lg As Integer, Ls As Integer
    Lg = Range("A21").End(xlUp).Row
        Range("a2:j" & Lg).Sort Key1:=Range("a2"), Order1:=xlAscending, _
        Header:=xlNo, OrderCustom:=1, MatchCase:=False
        Windows("PLANNING GENERAL DES TRAVAUX DU BLABLA.xls").Activate
        Ls = Range("B200").End(xlUp).Row
        Range("B2:m" & Ls).Sort Key1:=Range("b2"), Order1:=xlAscending, _
        Header:=xlNo, OrderCustom:=1, MatchCase:=False
        ActiveWindow.Close
    slam:
     
    End Sub
     
    Sub fermer_sans_sauver()
    'Annule toutes les alertes Excel
    Application.DisplayAlerts = False
     Workbooks("PLANNING GENERAL DES TRAVAUX DU BLABLA.xls").Activate
    'Ferme le classeur
    ActiveWorkbook.Close
     
    'Restaure l'affichage des Alertes
    Application.DisplayAlerts = True
     
     
    End Sub
    merci bcp pour votre temps et votre amabilité
    Fichiers attachés Fichiers attachés

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Et bien..... ça marche donc ?

    Mais le code est ..... du code

    Quelques propositions, que j'ai essayé de commenter, au moins pour le début (non testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Option Explicit 'Toujours le mettre en entête de module si ce n'est pas fait: ça vous oblige à déclarer toutes les variables
     
    Sub DevTrial1()
    Dim Lp As Integer
    Dim MsgPrompt As String, Msgtitle As String
     
    Msgtitle = vbNullString
     
    While MsgPrompt = vbNullString
     
        MsgPrompt = "Quelle ligne vous voulez envoyez en planification ? (Esc pour annuler)"
        Lp = Application.InputBox(prompt:=MsgPrompt, Title:=Msgtitle, Type:=1)
     
        If Lp = 0 Then Call fermer_sans_sauver  'a adapter: or Lp < 2 or Lp > 21
     
        If Lp < 2 Or Lp > 21 Then
            Msgtitle = Msgtitle & "/!\ ERREUR: valeur incorrecte"
            MsgPrompt = vbNullString
        End If
     
    Wend
     
    ' Pour le reste, ça marche mais c'est ..... terrible
    ' Il vaut mieux définir au préalable les objets dont vous avez besoin, ici des sheets source et destinataire pour les copies
     
    Dim SrcWsh As Worksheet, DesWsh As Worksheet
    Dim SrcRng As Range
     
    Set SrcWsh = Workbooks("PLANNING GENERAL DES TRAVAUX DU BLABLA.xls").Worksheets(1)  'à modifier le cas échéant
    Set DesWsh = Workbooks("CUISINE CENTRALE.xls").Worksheets(1)
     
    ' Copie simple
    Set SrcRng = SrcWsh.Cells(Lp, 2)
    SrcRng.Copy Destination:=DesWsh.Range("C4")
     
    ' Copie de plusieurs cellules
    Set SrcRng = SrcWsh.Range(Cells(Lp, 2), Cells(Lp, 3))
    Debug.Print SrcRng.Address, SrcRng.Cells.Count  'Fenêtre immédiate pour le debug
     
    SrcRng.Copy Destination:=DesWsh.Range("D4")
    Workbooks("PLANNING GENERAL DES TRAVAUX DU BLABLA.xls").Activate
     
     
    End Sub

Discussions similaires

  1. [Web] Validation de compétence ?
    Par xxkirastarothxx dans le forum Etudes
    Réponses: 4
    Dernier message: 10/03/2009, 14h32
  2. validation d'un XML schema
    Par nicolas_jf dans le forum Valider
    Réponses: 2
    Dernier message: 05/05/2003, 11h25
  3. est ce un XSchema Valide?
    Par Slash dans le forum Valider
    Réponses: 4
    Dernier message: 06/03/2003, 14h01
  4. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54
  5. [VB6] Evenement validate
    Par grosjej dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/09/2002, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo