remonter des lignes d'un tableau

Michael78

XLDnaute Nouveau
Bonjour,

J'ai de nouveau besoin d'une aide...
j'ai un listing téléphonique qui se créer grâce à une macro qui va chercher ces infos sur les différentes feuilles de mon classeur.

le listing généré est classé par ordre alphabétique. Or je voudrais "remonter" 3 noms en particuliers en tête de mon listing (pour être précis, mon tableau débute en ligne 5). Les 3 noms sont définis, mais ne sont pas forcément toujours a la même ligne (puisque classé automatiquement par ordre alphabétique).

Je met un fichier en exemple....

Merci d'avance
 

Pièces jointes

  • Test listing.xlsx
    15.8 KB · Affichages: 15

Michael78

XLDnaute Nouveau
Bonjour Chris,

Je comprends. Je pensais ajouter un bout de code en fin de macro afin qu'il me classe mes lignes. Mais il y a surement plus simples, du coup je met le fichier avec l'ensemble des macros...

Pour expliquer rapidement mon fichier:

Le fichier me permet de gérer les données du personnel (état civile, Spécialité, Date d'entrée dans la profession, visite médicale....).
1er étape: via la feuille 01.Création Recherche je crée un nouveau dossier (feuille) qui se classe automatique par ordre alphabétique (le nom de la feuille étant le nom de l'agent)
2ème étape: je rempli les informations de l'agent
3ème étape: via la feuille 01.Création Recherche je peux sois faire une recherche d'agent, une recherche de spécialité soit mettre à jour le listing des numéro de téléphone.

Merci encore pour l'aide apporter....
 

Pièces jointes

  • Fichier agent vierge.xlsm
    451.6 KB · Affichages: 7

chris

XLDnaute Barbatruc
Bonjour

Remarques : pourquoi répéter l'en-tête dans la feuille alors que tu pourrais la répéter seulement à l'impression en déclarant comme lignes à répéter les 4 premières ?

J'ai créé 2 tableaux de paramètres dans un onglet que tu peux masquer.

L'un pour lister les noms à placer en haut dans l'ordre voulu, le second pour ne pas traiter des onglets qui n'ont rien à voir avec les fiches.

Je trouve cela plus propre, plus sûr et plus évolutif que de supprimer les lignes à la fin...
Une seule variable de numéro de ligne suffit puisque qu'on écrit les infos sur une même ligne

J'ai modifié la partie qui listes les numéros mais n'ai pas touché au reste du code.
 

Pièces jointes

  • Agents_tel.xlsm
    415.6 KB · Affichages: 13

Michael78

XLDnaute Nouveau
Merci Chris,

Je comprends ta remarque et j'avoue que je trouve effectivement cela un peu "bidouille"... mais actuellement c'est tout ce que je suis en VBA... alors je continue a apprendre.
Je ne connais pas encore la fonction dont tu me parles, je vais chercher... Merci pour l'info.

Pour le code nickel, j'ai replacé les tableaux dans la feuille masquée "05.base de données", histoire de simplifié.

Par contre je ne comprends pas le code!! Mes macros sont souvent des recopies soit de code trouvé sur le net, soit de solution "clé en main" donné suite à des demandes sur le site... après j'essaie d'adapter l'ensemble.

j'abuse si je te demande une explication des lignes que tu a crée? cela me permets de continuer a comprendre et apprendre....

Merci encore!!
 

chris

XLDnaute Barbatruc
Re

Voici la partie du code modifié commentée dont les variables ajoutées
Code:
Sub Numéro_téléphone()
     
'Activation de la feuille 03.Numéro de téléphone
    Sheets("03.Numéro de téléphone").Select
   
'Effacement des ancciennes données
    Rows("5:107").Select
    Selection.ClearContents
    Selection.Delete Shift:=xlUp
    
'Déclaration des variables
Dim lig As Integer
Dim colPortable As Integer
Dim ligGrade As Long
Dim colPrenom As Integer
Dim LigHaut As Long 'Repère des lignes du haut pour les noms prévus en haut
Dim NbHaut As Long 'Compte les noms du tableau T_Haut (onglet paramètres) pour commencer plus bas que la ligne 5
Dim Traite As Long 'Nombre de noms à placer en haut déjà traités
Dim NbOnglets As Integer, NbOnglets2 As Integer 'compteurs d'onglets à ne pas traiter
Dim NextWk As Boolean 'Permet de passer à l'onglet suivant si celui en cours ne doit pas être traité


NbHaut = Range("T_Haut").ListObject.DataBodyRange.Rows.Count 
ligGrade = 5 + NbHaut
colGrade = 1
colNom = 2
colPrenom = 3
colStatut = 4
colFixe = 5
colPortable = 6
Traite = 0

NbOnglets = Range("T_Onglets").ListObject.DataBodyRange.Rows.Count ' Compte le nombre d'onglets à ne pas traiter dans le tableau T_Onglets de l'onglet paramètres

For Each wk In Worksheets
    If NbOnglets2 < NbOnglets Then 'Tant qu'on est pas déjà passé sur tous les onglets à ne pas traiter
        For i = 1 To NbOnglets
            With Range("T_Onglets").ListObject.DataBodyRange
                If wk.Name = .Cells(i, 1) Then NextWk = True: NbOnglets2 = NbOnglets2 + 1: Exit For 'On ne doit pas traiter cet onglet
            End With
        Next i
    End If
   
    If NextWk = False Then 'si wk n'est pas un onglet à ne pas traiter
        'Si on n'a pas encore traité tous les noms on teste si l'onglet correspond à un des noms du tableau T_Haut (onglet paramètres)
        If Traite < NbHaut Then
            For i = 1 To NbHaut
                With Range("T_Haut").ListObject.DataBodyRange
                    If wk.Name = .Cells(i, 1) Then LigHaut = i + 4: Traite = Traite + 1
                End With
            Next i
        End If
       
        'le numéro de la ligne est soit ligGrade, soit une des n lignes du haut selon sa position dans le tableau T_Haut (onglet paramètres)
       
        'Affichage du grade:
        Sheets("03.Numéro de téléphone").Cells(IIf(LigHaut = 0, ligGrade, LigHaut), colGrade) = wk.Range("B18")
       
        'Affichage du nom:
        Sheets("03.Numéro de téléphone").Cells(IIf(LigHaut = 0, ligGrade, LigHaut), colNom) = wk.Range("F11")
       
        'Affichage du Prénom:
        Sheets("03.Numéro de téléphone").Cells(IIf(LigHaut = 0, ligGrade, LigHaut), colPrenom) = wk.Range("F13")
       
        'Affichage du statut:
        Sheets("03.Numéro de téléphone").Cells(IIf(LigHaut = 0, ligGrade, LigHaut), colStatut) = wk.Range("B21")
      
        'Affichage du téléphone fixe:
        Sheets("03.Numéro de téléphone").Cells(IIf(LigHaut = 0, ligGrade, LigHaut), colFixe) = wk.Range("F29")
       
        'Affihage du téléphone portable:
        Sheets("03.Numéro de téléphone").Cells(IIf(LigHaut = 0, ligGrade, LigHaut), colPortable) = wk.Range("F27")
   
        'Soit on remet ligHaut à 0 soit on fait tourner le compteur des lignes
        If LigHaut = 0 Then ligGrade = ligGrade + 1 Else LigHaut = 0
    End If
   
    NextWk = False

Next wk
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87