Une erreur dans la macro

Bonjour

je sollicite votre aide car la macro que j'ai écrite ne me renvoi rien.

J'ai bien mes données dans le fichier source (Secteur1)

il s'agit seulement d'une partie de la macro.

je synthétise un ensemble de feuilles sur un tableau.

Pouvez-vous me dire ce qu'il manque?

Merci

Option Explicit

Dim f, i, j, k, l, lgn

Sub nomsdepart2019()

'Range("d2").CurrentRegion.Offset(3, 0).ClearContents

For Each f In Worksheets

If f.Name = "Secteur1" And Range("AH4") = "poste à pourvoir" Then

For i = 16 To 33 'ligne 16 à 33

For j = 34 To 34 'colonne 34

If Cells(i, j).Value = 1 Then

lgn = Cells(5, j - 31).End(xlDown)(2).Row 'correspond ligne 5 colonne 3

Cells(lgn, j - 31) = Range("D" & i)

Cells(lgn, j - 30) = Range("A" & i) & " " & Range("B" & i)

Cells(lgn, j - 29) = ActiveSheet.Name

Cells(lgn, j - 28) = Range("AG" & i)

Cells(lgn, j - 27) = Range("AI" & i)

Cells(lgn, j - 26) = Range("AK" & i)

Exit For

End If

Next j

Next i

End If

Next f

Range("f61").Select

ActiveCell = Date

Range("d3").Select

End Sub

Bonjour Tseoy,

Tu pourrais donner plus de précisions sur ton problème :< ?

une erreur dans la macro

Tu a un message d'erreur ? Si oui quelle est l'erreur indiquée et la ligne surlignée ?

Une copie de ton fichier aurai été apprécié ^^

Sinon, concernant tes erreur possible en voyant ton code (sans le tester hein, vais pas m'amuser à reproduire ton fichier xD), je dirais que ces lignes peuvent poser problèmes :

lgn = Cells(5, j - 31).End(xlDown)(2).Row 'le (2) sert à quoi ?
For j = 34 To 34 'cette boucle n'a pas de raison d'être la
Exit For 'tu demande à quitter une boucle avec sa, en sachant que ton For 34 To 34 va automatiquement s'arrêter à la fin, la ligne est pas utile 

Encore une fois, avec le fichier nous pourrions te donner une réponse claire

Bonjour,

Tes expressions ne sont pas qualifiées. Elles réfèrent toujours à une même feuille, feuille active au départ...

NB- Prends la peine de mettre ton code sous balises Code ! Qu'on puisse le lire sans se forcer...

bonjour,

je joins une partie du fichier.

la bouton de la macro se trouve dans l'onglet "postes à pourvoir"

merci de votre aide

3testtseoy.xlsm (220.63 Ko)

Je crois que tu devrais étoffer un peu tes explications, car par exemple cette ligne :

lgn = Cells(5, j - 33).End(xlDown).Row

va produire en l'état actuel de ta feuille Secteur A1: lgn = 11 ?

Ce qui ne paraît pas être volontaire... mais on ne sait pas vraiment ce que tu souhaites faire.

oups, mon module ne s'est pas enregistré correctement.

je revois le fichier.

mon but est celui ci si dans l'onglet "secteur a1" entre les lignes 16 a 33

si la colonne 34 à 1 alors je reporte sur l'onglet poste à pourvoir à partir de la ligne c5 un ensemble de données (nom, prénonm, N° poste.)

1testtseoy.xlsm (223.85 Ko)

le bon module

désolé

3testtseoy.xlsm (223.90 Ko)

Bonsoir,

Je répète mes premières remarques . Ton code n'est pas qualifié, et donnera des résultats aléatoires. Tes variables ne sont pas typées, tes méthodes ne sont pas en adéquation avec ton fichier pour fournir des résultats fiables.

De plus tu as zoné "en dur" les emplacements où intervenir, et on constate qu'on manque d'éléments repères pour intervenir en détectant les emplacement au moyen de variable, et on ne peut s'appuyer sur des écarts fixes, ils sont irréguliers. Ce qui va conduire à un code répétitif pour chaque emplacement que tu dois servir !

Je conseille d'abord de bâtir un fichier dans lequel chaque zone spécifique sera aisément identifiable. Cela permettra de code des opérations sur l'ensemble mais pour l'instant c'est du temps perdu, on va passer son temps à reprendre du code mal fagotté.

Cordialement.

bonjour,

ta réponse est celle d'un professionnel et je n'ai pas encore les compétences pour traduire ton langage

j'envoie le module original qui me rapportait les données de manière globale.

Or maintenant je voudrais sectoriser

les lignes des onglets sont proportionnées:

3 étages pour les IDE (17 lignes) 16 à32, 36 à 52, 56 à 72.

3étages pour les AS (24 lignes 83 à 106, 110 à 133, 137 à 160.

le fichier qui doit recevoir la macro 7 lignes.

dois je faire un multiple correspondant aux lignes des trois feuilles?

IDE 21lignes (3*7)

AS 28 lignes(4*7)

onglet macro 7 lignes

Merci de têtre penché sur ce dossier

5testtseoy.xlsm (232.68 Ko)

bonjour à tous

mon avis perso de moi tout seul : pour une appli qui joint des personnes, des postes, des bâtiments, et des dates ne pas prendre Excel !

prendre Access ou autre SGBD (il y en a des gratuits)

dans 2 heures tu auras un logiciel qui fonctionne. Pas beau, mais qui fonctionne Je sais le faire et je ne suis pas le seul !

avec Excel, personne ne peut le faire aussi vite et fonctionnel.

d'ailleurs dans 2 ans tu y seras encore... (prédiction dure, je sais) et tu continueras à faire pas mal de choses en manuel

certes avec VBA on peut y arriver, avec VBA on peut gérer la NASA. Mais ni ton appli ni la NASA ne sont à la portée d'un non expert en VBA.

bon travail

amitiés excelliennes

Bonjour,

Pas le temps de regarder en détail... Cela paraît un peu plus régulier. On a pourtant un écart d'une ligne entre A1 et B1 ! (pas cherché où elle était...). Les désignations sont différentes, on ne s'appuiera donc pas dessus. Le nombre de zones à cibler est le même pour A1 et B1 : en sera-t-il de même pour les feuilles non encore en place ?

Il va certainement falloir créer un système de repères car les dimensions de zones ne seront pas globalement uniformes, et l'utilisation de End(xlDown) dans un tel tableau recèle une majorité de pièges. Donc, un repère fixe que l'on trouvera au même endroit sur toutes les feuilles, et à partir duquel on peut chercher et trouver les autres repères de la feuille. Cela amorce un schéma procédural qui permettra de définir une procédure commune applicable à toutes les feuilles...

Cordialement.

bonjour,

toutes feuilles ont la même structure avec le même nombre de lignes

concernant l'écart de ligne entre A1 et B1 je pense qu'il est réglé.

merci

bonne journée

1testtseoy.xlsm (232.68 Ko)

Bonsoir,

Beaucoup d'entreprises, d'administrations, d'écoles utilisent excel pour faire assez facilement des tableaux bien présentés. Mais leur exploitation ensuite n'est pas toujours très facile...

Ici on a des colonnes qui contiennent des noms ou des métiers (A), des étages ou des prénoms (B). Pour s'y retrouver, la seule chose que je te demanderais est de rajouter l'étage en colonne B en début de liste comme pour les nuits et pas seulement en fin avec total. Peu importe ensuite le nombre de lignes.

Comme à mon habitude, je cherche à créer une base de données. La lecture est rendue plus facile avec une MFC sur les 3 premières colonnes. A mon avis, il serait ensuite judicieux de faire un TCD pour piloter l'évolution des compétences IDE et AS au fil du temps.

8test-tseoy.xlsm (276.41 Ko)

merci steelson,

je vais modifier la structure de mon fichier pour y introduire tes consignes.

merci

thierry

Pour les lecteurs, le code en "direct" :

Option Explicit

Sub BdDdeparts()
Dim f As Worksheet, i%, etage As String, metier As String, ligne%

raz

' indicateur départ en AH
' secteur = ActiveSheet.Name
' étage face à IDE/AS ou à un blanc
' IDE/AS (en début de liste)

ligne = 1
For Each f In Worksheets
    With f
        If .Name <> ActiveSheet.Name Then
            etage = ""
            metier = ""
            For i = 1 To .Cells(Rows.Count, "AH").End(xlUp).Row
                If .Cells(i, "A").Value = "IDE" Or .Cells(i, "A").Value = "AS" Then metier = .Cells(i, "A").Value
                If .Cells(i, "B").Value <> "" And (.Cells(i, "A").Value = "" Or .Cells(i, "A").Value = "IDE" Or .Cells(i, "A").Value = "AS") Then etage = .Cells(i, "B").Value
                If .Cells(i, "AH").Value <> "" And metier <> "" Then
                    ligne = ligne + 1
                    Cells(ligne, 1).Value = metier
                    Cells(ligne, 2).Value = .Name
                    Cells(ligne, 3).Value = etage
                    Cells(ligne, 4).Value = .Range("D" & i).Value
                    Cells(ligne, 5).Value = .Range("A" & i).Value & " " & .Range("B" & i).Value
                    Cells(ligne, 6).Value = .Range("AG" & i).Value
                    Cells(ligne, 7).Value = .Range("AI" & i).Value
                    Cells(ligne, 8).Value = .Range("AK" & i).Value
                End If
            Next
        End If
    End With
Next f

TriListe

End Sub

Sub TriListe()
Range("Tdeparts[#All]").Select
With ActiveSheet.ListObjects("Tdeparts")
    .Sort.SortFields.Clear
    .Sort.SortFields.Add _
        Key:=Range("Tdeparts[IDE/AS]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    .Sort.SortFields.Add _
        Key:=Range("Tdeparts[Secteur]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    .Sort.SortFields.Add _
        Key:=Range("Tdeparts[Etage]"), SortOn:=xlSortOnValues, Order:=xlAscending _
        , DataOption:=xlSortNormal
    With .Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With
End Sub

Sub raz()
'Range("A1").CurrentRegion.Offset(1, 0).ClearContents
Rows("3:" & Application.Max(3, Cells(Rows.Count, 1).End(xlUp).Row)).Delete Shift:=xlUp
Rows("2:2").ClearContents
End Sub

Bonjour steelson,

dans la prolongation de mon fichier, je dois faire des extractions sur les données de l'ensemble des agents (j'en ai 450)

J'ai bien compris qu'il fallait faire un TCD.

Cependant je n'arrive pas à créer le BdD

J'ai essayer de reprendre ton code mais je bugue.

Pour l'instant j'ai mis "si la case G est >0 alors je récupère les données".

Mais ce tableau devrait être en plus être créer en fonction du mois demandé (colonne G à R)

Si tu peux m'aider sur le code que j'ai essayé de débuter

Merci

Cependant je n'arrive pas à créer le BdD

Thierry,

la BdD, elle st créée dans l'onglet postes à pourvoir !

tu peux en créer une autre comme tu l'as fait, c'est pas mal, mais il faut que la structure soit en tableau (comme tu l'as fait ok) mais dans l'onglet où tu as mis le bouton1

Je te renvoie le fichier,

j'ai supprimé le tri car il était spécifique au tableau que j'avais créé

j'ai modifié le reset de la table de façon à ce que bouton1 ne disparaisse pas

tu peux maintenant passer à la construction du TCD

Merci steelson.

La je récupère ce qui correspond la colonne G c'est à dire Janvier.

Que faut il que je rajoute pour que je puisse choisir le mois?

JANVIER colonne G

FEVRIER colonne H

""

Decembre colonne R

Bonne journée

thierry

OK

j'ai ajouté une notion de colonne au lieur de "G"

Rechercher des sujets similaires à "erreur macro"