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 :

Problème_VBA_pas de solution


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut Problème_VBA_pas de solution
    Bonjour,

    Voilà mon souci, je travaille sur la mise en place d'un outil pour suivre des formations que des personnes doivent réaliser.
    Mon code me permets d'afficher les informations nécessaires; avec un menu déroulant, je sélectionne la formation ensuite en cliquant sur un bouton afficher dans un tableau (créer au préalable) j'obtiens les informations nécessaires sauf que ça ne marche pas à tous les coups.
    1) Avec certaines formations tout s'affiche correctement sauf les informations de la colonne 8 (date de dernière réalisation) qui restent vide. code c'est à partir de la ligne
    2) Avec certaines formations, il m'affiche deux à trois personnes et puis il m'affiche l'erreur suivante "Variable objet ou variable de bloc With non définie".( ligne 112 pour l'erreur)
    Voici mon code :
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    Sub etat_formation()   'Etat d'une population par formation
     
    Dim i, j, k, l, p, t, v As Double
     
    Dim intitule As String
    Dim manager As String
    Dim numero_ligne As Double
    Dim numero_ligne2 As Double
    Dim valeur As String
    Dim num_ligne As Double
    Dim num_ligne1 As Double
    Dim num_ligne2 As Double
    Dim num_ligne3 As Double
    Dim num_ligne4 As Double
    Dim num_ligne5 As Double
    Dim num_ligne6 As Double
    Dim num_ligne7 As Double
    Dim code_stage As String
    Dim code_stage2 As String
    Dim validite As String
    Dim val As Double
    Dim test_date As Double
    Dim test_date2 As Double
    Dim test_date3 As Double
    Dim butee_depassee As Double
    Dim butee_limite As Double
    Dim butee_finannee As Double
    Dim butee_finannee_suiv As Double 
     
     
    butee_depassee = 0
    butee_limite = 0
    butee_finannee = 0
    butee_finannee_suiv = 0
     
    i = 2   ' première ligne du tableau effectifs colonne manager
    j = 2   ' premier code stage possible dans l'onglet Codes SAP
    k = 10  ' première ligne vide du tableau etat par formation
    l = 20  ' nombre de lignes disponibles pour lister les agents dans l'onglet état par formation
    v = 10  ' première ligne vide du tableau etat par formation
     
    ActiveWorkbook.Save' Lancement macro affichage
     
    intitule = Sheets("Etat par formation").Cells(6, 2)
    Set formation = Sheets("Formations").Columns("B").Find(what:=intitule)
    num_ligne = formation.Row
    validite = Sheets("Formations").Cells(num_ligne, 4)
    If validite = "P" Then
    aff_formation = "Permanente"
    Else
    aff_formation = validite
    End If
     
    Set formation2 = Sheets("Codes SAP").Columns("A").Find(what:=intitule)
    num_ligne1 = formation2.Row
     
    If Sheets("Etat par formation").Cells(6, 11) = "" Then    'liste des agents redevables au global
     
        Do While Sheets("Effectifs").Cells(i, 2) <> ""
     
            Select Case Sheets("Effectifs").Cells(i, 6).Value
            Case "CME"
            t = 5
            Case "EIR"
            t = 6
            Case "MAN"
            t = 7
            Case "CAB"
            t = 8
            End Select
            If Sheets("Formations").Cells(num_ligne, t) = "x" Then
            Sheets("Etat par formation").Cells(k, 1) = Sheets("Effectifs").Cells(i, 4)
            Sheets("Etat par formation").Cells(k, 3) = Sheets("Effectifs").Cells(i, 5)
            Sheets("Etat par formation").Cells(k, 5) = Sheets("Effectifs").Cells(i, 3)
            Sheets("Etat par formation").Cells(k, 6) = Sheets("Effectifs").Cells(i, 7)
            Sheets("Etat par formation").Cells(k, 7) = Sheets("Effectifs").Cells(i, 6)
            Sheets("Etat par formation").Cells(k, 10) = aff_formation
            matricule = Sheets("Effectifs").Cells(i, 3)
            k = k + 1
     
                If k > 38 Then   'insertion de lignes si nb agents > nb lignes dispos
                p = k + 1
                Range(Cells(p, 1), Cells(p, 12)).Select
                Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
                Range(Cells(p, 1), Cells(p, 2)).Select
                With Selection
                    .HorizontalAlignment = xlLeft
                    .MergeCells = True
                End With
                Range(Cells(p, 3), Cells(p, 4)).Select
                With Selection
                    .HorizontalAlignment = xlLeft
                    .MergeCells = True
                End With
                Range(Cells(p, 8), Cells(p, 9)).Select
                With Selection
                    .HorizontalAlignment = xlCenter
                    .MergeCells = True
                End With
                Range(Cells(p, 11), Cells(p, 12)).Select
                With Selection
                    .HorizontalAlignment = xlCenter
                    .MergeCells = True
                End With
                End If
     
           ' (cette partie qui ne m'affiche pas la date de formation)
                Do While Sheets("Codes SAP").Cells(num_ligne1, j) <> ""
     
                code_stage = Sheets("Codes SAP").Cells(num_ligne1, j)
                Set Stage = Sheets("Histo").Columns("C").Find(what:=matricule)
                num_ligne2 = Stage.Row
                If Sheets("Histo").Cells(num_ligne2, 4) = code_stage Then
                date_session = Sheets("Histo").Cells(num_ligne2, 8)
                End If
                    Do While num_ligne3 <> num_ligne2
                    Set Stage = Sheets("Histo").Columns("C").FindNext(Stage)
                    num_ligne3 = Stage.Row
                    If Sheets("Histo").Cells(num_ligne3, 4) = code_stage Then
                    date_session2 = Sheets("Histo").Cells(num_ligne3, 8)
                    End If
                    If date_session2 > date_session Then
                            If date_session2 > date_session_finale Then
                            date_session_finale = date_session2
                            End If
                    Else
                            If date_session > date_session_finale Then
                            date_session_finale = date_session
                            End If
                    End If
                    Loop
                    If date_session_finale <> "" Then
                        If Sheets("Etat par formation").Cells(k - 1, 8) < date_session_finale Then
                        Sheets("Etat par formation").Cells(k - 1, 8) = date_session_finale
                        End If
                    End If
                date_session_finale = 0
                date_session = 0
                date_session2 = 0
                num_ligne2 = 0
                num_ligne3 = 0
                j = j + 1
                Loop
            j = 2
            End If
     
        i = i + 1
        Loop
    J’espère que je trouverais quelqu'un qui pourrait m'aider.
    Par avance merci.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    cela provient du non contrôle de l'objet renvoyé par la ligne n°111,
    juste consulter l'aide VBA de la méthode Find et appliquer son exemple …


    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

Discussions similaires

  1. [XSLT][JSP] solution technique pour cas typique
    Par Alix_10 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/09/2006, 13h09
  2. Réponses: 21
    Dernier message: 30/08/2004, 17h07
  3. 1 SOLUTION : plusieurs anim dans un fichier x
    Par heidi79 dans le forum DirectX
    Réponses: 1
    Dernier message: 28/08/2003, 09h19
  4. [Kylix] solution
    Par raggadoll dans le forum EDI
    Réponses: 1
    Dernier message: 27/05/2003, 11h43
  5. Les Cookies 4° ! : LA SOLUTION
    Par Ph. B. dans le forum XMLRAD
    Réponses: 2
    Dernier message: 31/01/2003, 16h46

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