Message VBA sur 2 onglets fichier excel [Résolu]

Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
- - Dernière réponse : avyrex1926
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
- 3 déc. 2006 à 15:43
Bonjour à tous,


Je voudrais éffectuer sur mon projet une liste de personnes qui n'ont pas eu de formation. Je vous explique comment je vois ça.


Dans mon document excel, j'ai un onglet Chauffeurs dont la colone A contient tous les noms de chauffeur de camion.


Dans l'onglet Formation des chauffeurs, dans la colone A, se trouve tous les noms de chauffeurs qui ont eu une formation.


Je voudrais faire apparaitre un message en VBA me disant qui n'a pas eu de
formation parmis les chauffeurs (en tenant compte que tous les chauffeurs sont dans l'onglet Chauffeur), soit par un message
d'avertissement ou quelque chose de semblable.


Que me proposez-vous?
Afficher la suite 

20 réponses

Meilleure réponse
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
3
Merci
Merci beaucoup.

C'est formidable.

Tous est parfait.

Merci!!!!!!!!!!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de avyrex1926
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Salut,

La colonne B peut-elle être utilisée (de l'onglet Formation) ?
Si oui, je te fais un code.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
Salut,
Dans la colone B il y à le type de formation, la colone C = la date de formation et D= la date de la prochaine formation. Je peux toujours modifier mon tableau aussi.
Commenter la réponse de avyrex1926
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Heu je me suis trompé, quelle colonne je peux utiliser mais de l'onglet Chauffeurs (j'ai bientôt fini, j'adapterai au besoin)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
Dans l'onglet Chauffeur, il y a à partir de la colone L qui est libre.
Commenter la réponse de avyrex1926
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Alors essaie cette procédure, à stocker dans un module :

Sub Tri()
        Dim DerLi1 As Integer, DerLi2 As Integer, i As Integer, j As Integer
        Dim sName As String, sResultat As Boolean
        
    Sheets("Formation").Select: Range("A1").Select
    DerLi2 =  PLVide(1) - 1
    
    Sheets("Chauffeurs").Select: Range("A1").Select
    DerLi1 = PLVide(1) - 1
    
    For i = 2 To DerLi1 'je pars du principe que tes données partent de la 2eme ligne
        sResultat = False
        sName = Cells(i, 1).Text
        
        For j = 2 To DerLi2
            If Sheets("Formation").Cells(j, 1).Text = sName Then _
                sResultat = True: Exit For
        Next j
        
        Cells(i, 12).Value = CStr(sResultat)
    Next i
    
    sName = vbNullString
    
    For i = 2 To DerLi1
        If Cells(i, 12).Value = False Then sName = sName & Cells(i, 1).Value & vbCrLf
    Next i
    
    MsgBox sName
End Sub

Function PLVide(ByVal colonne As Byte) As Integer
    PLVide = Columns(colonne).Find("", Cells(1, colonne), , , xlByRows, xlNext).Row
End Function

~ <small> Mortalino </small> ~


Vérifie mon commentaire, et vérifie les noms de feuilles.

@++





<hr width ="100%" size="2" />

  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
Dans l'onglet Chauffeurs, Les nom commence à A7.

Dans l'onglet Formation, les noms commence à A29.

Dois-je modifier quelque chose?

Private Sub CommandButton6_Click()
Dim DerLi1 As Integer, DerLi2 As Integer, i As Integer, j As Integer
        Dim sName As String, sResultat As Boolean
       
    Sheets("Formation employé").Select: Range("A29").Select
    DerLi2 = PLVide(1) - 1
   
    Sheets("Chauffeurs").Select: Range("A7").Select
    DerLi1 = PLVide(1) - 1
   
    For i = 2 To DerLi1 'je pars du principe que tes données partent de la 2eme ligne
        sResultat = False
        sName = Cells(i, 1).Text
       
        For j = 2 To DerLi2
            If Sheets("Formation employé").Cells(j, 1).Text = sName Then _
                sResultat = True: Exit For
        Next j
       
        Cells(i, 12).Value = CStr(sResultat)
    Next i
   
    sName = vbNullString
   
    For i = 2 To DerLi1        If Cells(i, 12).Value False Then sName sName & Cells(i, 1).Value & vbCrLf
    Next i
   
    MsgBox sName
End Sub

Function PLVide(ByVal colonne As Byte) As Integer
    PLVide = Columns(colonne).Find("", Cells(1, colonne), , , xlByRows, xlNext).Row
End Function
Commenter la réponse de avyrex1926
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Ok, ok, alors voici le code modifié :

Sub Tri()
        Dim DerLi1 As Integer, DerLi2 As Integer, i As Integer, j As Integer
        Dim sName As String, sResultat As
Boolean
        
    Sheets("Formation").Select: Range("A29").Select '** modif
    DerLi2 =  PLVide(1) - 1
    
    Sheets("Chauffeurs").Select: Range("A7").Select '** modif
    DerLi1 = PLVide(1) - 1
    
    For i = 7 To DerLi1 '**
modif
        sResultat = False
        sName = Cells(i, 1).Text
        
        For j = 29 To DerLi2 '**
modif
            If Sheets("Formation").Cells(j, 1).Text = sName Then _
                sResultat = True: Exit For
        Next j
        
        Cells(i, 12).Value = CStr(sResultat)
    Next i
    
    sName = vbNullString
    
    For i = 7 To DerLi1 '**
modif
        If Cells(i, 12).Value = False Then sName = sName & Cells(i, 1).Value &
vbCrLf
    Next i
    
    MsgBox sName
End Sub

Function PLVide(ByVal colonne As Byte) As
Integer
         '** modif
    PLVide = Columns(colonne).Find("", Cells(65536, colonne), , , xlByRows, xlPrevious).Row
End Function

~ <small> [code.aspx?ID=39466 Mortalino] </small>
~

@++

<hr size ="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
Merci infiniment cher ami,

tous fonctionne à merveille.

Merci beaucoup
Commenter la réponse de avyrex1926
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
De rien. Pense à accepter la réponse
Bonne soirée

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
Derniere petite question,

J'ai une liste des formations qui se trouve sur la colone A1 à A22 de l'onglet Formation.

Est-ce possible d'inscrire la formation qui manque à ses chauffeurs à coté de leurs nom?
Commenter la réponse de avyrex1926
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Oui, tout est possible, mais comment fais-tu pour savoir, sur les 22 formations, laquelles ils ont déjà faites, où sont elles inscrites ?

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
Dans l'onglet Formation, colone Bà partir de la ligne 29 en déscendant représente la formation.

La colone C représente la date de la formation et la colone D représente la prochaine date de formation.
Commenter la réponse de avyrex1926
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Heu j'ai cherché, mais je comprends plus rien,

Peux tu donner tout les détails, je n'arrive pas à m'imaginer le truc.
Rapport des noms A1 A29, B29:B derniere ligne, et comment je fais pour savoir quelle formation il doit faire.
J'ai essayé de faire un code mais tout se mélange.
Si tu peux faire aussi une impécr de l'onglet, que tu laisses sur un serveur, ce serait pas mal, sinon, tant pis.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
Bien sure,

Dans l'onglet Formation, Sur les cellules A1 à A22, ce trouve le nom de chaques formations qu'ils doivent suivre.

À partir de A29 en déscendant, ce trouve le nom de chaque employé ayant recu une formation. Dans la cellule B29 en déscendant, se trouve le nom de la formation que l'employé à recu. Exemple Sur la ligne 29 de la colone A se trouve Mr.X et toujours sur la ligne 29 mais sur la colone B se trouve la formation qu'il a recu. Sur la colone C se trouve la date de la formation et sur la colone D se trouve la date du renouvellement de la formation.
Commenter la réponse de avyrex1926
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Ok, alors j'abuse avec une dernière question.

Donc de A1 à A22, ce sont les formations à suivre. Donc il y en a 22.

Je reprends ton exemple.
Mr X, (cellule A29), a fait la Formation   F   (cellule B29).

Est ce qu'après la Formation   F   (cellule A10, par exemple), c'est la Formation de la ligne suivante ? (donc A11, pour l'exemple)
En fait c'est ça qui me manque, et après c'est bon.

Et si je te mets le résultat dans la colonne E, c'est bon ?
Merci

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
Si je comprent bien ta question, Il n'y a pas vraiment d'ordre dans les formations.

Les employés sont enregistés dans se tableau au fure et à mesure qu'ils ont une formations.

Donc dans la cellule A29 peut se trouver Mr.X avec la formation F dans la cellule B29.
Et dans la cellule A43 se retrouve encore Mr.X avec une autre formation.

Les formations ne sont pas données dans l'ordre qu'ils sont écritent dans les cellules A1 à A22.

@++
Commenter la réponse de avyrex1926
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Je t'envoi un MP

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
0
Merci
Merci pour ton aide, je t'envoie le fichier.

Merci encore!
Commenter la réponse de avyrex1926
Messages postés
6789
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
16
0
Merci
Salut,

pour que les autres puissent suivre, j'ai bien reçu le fichier.

J'ai créé un UserForm, contenant un ComboBox (nommé cboListe), et 2 ListBoxes (nommées lstFait & lstAFaire).

Voici le code :

Private Sub cboListe_Change()
        Dim DerLi   As Integer
        Dim i       As Integer
        Dim j       As Integer
        Dim bVerif  As Boolean
        
    lstFait.Clear: lstAFaire.Clear
    
    DerLi =  PLVide(1) - 1
    For i = 29 To DerLi
        If Cells(i, 1).Value = cboListe.Text Then lstFait.AddItem CStr(Cells(i, 2).Value)
    Next i
    
    For i = 2 To 22
        For j = 0 To lstFait.ListCount - 1
            If Cells(i, 1).Value = lstFait.List(j) Then bVerif = True: Exit For
        Next j
        If bVerif = False Then Me.lstAFaire.AddItem CStr(Cells(i, 1).Value) Else bVerif = False
    Next i
End Sub

Private Sub UserForm_Initialize()
        Dim DerLi As Integer
        
    Sheets("chauffeurs").Select
    DerLi = PLVide(1) - 1
    Me.cboListe.RowSource = "chauffeurs!A7:A" & DerLi
    Sheets("Formation employé").Select
End Sub

~ <small> Mortalino </small> ~

La fonction DLVide (Dernière Ligne Vide) a été placé dans un module.

@++

<hr width ="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Commenter la réponse de mortalino