Message VBA sur 2 onglets fichier excel

Résolu
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 à 01:42
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?

20 réponses

avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
3 déc. 2006 à 15:43
Merci beaucoup.

C'est formidable.

Tous est parfait.

Merci!!!!!!!!!!
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 déc. 2006 à 01:45
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"
<!--
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
3 déc. 2006 à 01:48
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.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 déc. 2006 à 01:59
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"
<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
3 déc. 2006 à 02:02
Dans l'onglet Chauffeur, il y a à partir de la colone L qui est libre.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 déc. 2006 à 02:18
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>
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
3 déc. 2006 à 02:32
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
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 déc. 2006 à 02:37
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"
<!--
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
3 déc. 2006 à 02:40
Merci infiniment cher ami,

tous fonctionne à merveille.

Merci beaucoup
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 déc. 2006 à 02:46
De rien. Pense à accepter la réponse
Bonne soirée

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
3 déc. 2006 à 02:52
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?
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 déc. 2006 à 02:57
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"
<!--
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
3 déc. 2006 à 03:00
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.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 déc. 2006 à 03:17
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"
<!--
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
3 déc. 2006 à 03:28
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.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 déc. 2006 à 03:43
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"
<!--
0
avyrex1926 Messages postés 360 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 3 janvier 2012 3
3 déc. 2006 à 03:51
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.

@++
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 déc. 2006 à 04:27
Je t'envoi un MP

@++

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

Merci encore!
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
3 déc. 2006 à 15:22
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>
0
Rejoignez-nous