Erreur d'éxécution 1004 sur VBA

Bonjour

Je fais appel à vos connaissances car j'ai un code VBA mais j'ai une erreur lors de la manipulation du fichier pour changer le chiffre dans la cellule dans la colonne nombre de lignes.

L'erreur est Erreur d'éxécution '1004'

Le déplacement des cellules dans un tableau de votre feuille de calcul n'est pas autorisé

L'erreur sur la macro se situe à la ligne TabMain.ListRows.Add 1 dans la macro ci-dessous :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

End Sub

Le probléme vient peut être du fait que le nombre de ligne est issue d'une formule matricielle qui calcule le nombre de ligne nécessaire

au tableau. Cette formule n'est pas mise dans le fichier exemple car il n'est pas possible d'insérer une formule dans ce tableau.

Les pistes (non exhaustives) que j'ai trouvé sont :

- convertir les tableaux en plage (est-ce que cela peut débloquer la

situation, mais je perdrai les filtres et l'insertion automatique des

formules dans mon tableau) Dans l'exemple je n'ai pas mis de formule

pour simplifier.

- la colonne ligne n'est pas la colonne la plus à gauche dans mon

tableau mais la seconde. Dois-je inverser les 2 colonnes pour que cela

puisse fonctionner. Ce n'est pas le cas dans mon fichier exemple.

Le fichier fonctionne par la table de contrôle (en haut de chaque onglet) qui a l’entête de colonne "Nombre de lignes" avec un commentaire "TabMain" , est exécuté pour chaque feuille activée.

Le principe est que j'aimerai changer le département dans l'onglet inscription club et que les tableaux s'adaptent (en nombre de ligne) automatiquement comme par exemple dans l'onglet classement PSPeur départemental (exemple 94 puis 91). L'idéal serait que celà fonctionne sur les autres onglet qui commence par classement mais vu que je commencai par l'onglet classement PSPeur départemental et que j'ai une erreur je n'ai pas été plus loin.

Je vous joins un fichier exemple mais sur ce fichier l'erreur n'apparait en changeant de département.

Merci pour aide.

GS

25fichier.zip (677.05 Ko)

Bonjour,

ton code est assez curieux ! Pourquoi chercher TabMain ? Je ne suis pas sûr d'avoir bien compris de quoi il s'agissait, mais s'il s'agit bien d'un tableau structuré, tu peux l'identifier par Sh.Listbjects(n) avec n=1 ou 2 ... (généralement je ne mets qu'un seul tableau par feuille) sans donner le nom du tableau. Et pour le remettre à blanc,

if not Sh.Listbjects(1).databodyrange is nothing then Sh.Listbjects(1).databodyrange.delete

Bonjour

Je cherche tabmain dans le cas ou j'ai plusieurs tableau sur le même onglet, ce qui est le cas sur classement parachute départemental. Si je dois faire un onglet par tableau je vais avoir énormément d'onglet car il arrive que j'ai 30 tableaux sur un onglet que je multiplie par 3 niveaux de classement et par 5 épreuves.

En résumé, ce que je cherche à faire est d'avoir les longueurs des tableaux suivant le nombre de personnes concernés par ce tableau. Ce nombre de personnes concernés par un tableau est calculé via une formule matricielle.

Ceci dit, si tu vois une autre méthode pour arrivé à ce résultat ce suis preneur car je ne maîtrise pas très bon en VBA.

Merci

GS

Si tu peux mettre ces tableaux toujours en position 1, ce serait gagné ! ou alors en dernière position, e utilisant Sh.ListObjects.Count et

If Not Sh.ListObjects(Sh.ListObjects.Count).DataBodyRange Is Nothing Then Sh.ListObjects(Sh.ListObjects.Count).DataBodyRange.Delete

Merci pour ta réponse

Comme tu le dis mon tableau de controle que je nomme TABMAIN est toujours le premier sur mon onglet mais il y en a 1 juste à sa gauche (voir classement parachute départemental).

Si c'est possible pour toi, peux-tu faire la modif sur mon THISWORKBOOK dans mon fichier et voir si cela fonctionne bien sur les onglets classements Pspeurs départmental et classement parachute départemental.

Merci pour ton aide

GS

Petite investigation ...

Sub listingTableaux()
Dim f As Worksheet
For Each f In Worksheets
    Debug.Print f.Name
    For i = 1 To f.ListObjects.Count
        Debug.Print "", i, f.ListObjects(i).Name
    Next
    Debug.Print ""
Next
End Sub

Voici la liste des tableaux que tu utilises avec leur indice

Du coup, je n'ai pas compris quel était le tableau dit "principal" (TabMain)

Insciptions clubs
               1            Tableau89

Compétiteurs
               1            matrice_serie_parachute
               2            matrice_serie_trial
               3            Tableau_inscription
               4            participation_parachute
               5            participation_trial

Série parachute affichage
               1            série_parachute_femmes
               2            Tableau4151317

Parachute résultat
               1            chrono_résultats_parachute

Classement parachute départemen
               1            Classement_parachute_1_femmes_départemental
               2            Tableau09710011283235240
               3            Tableau112143236267
               4            Classement_parachute_2_femmes_départemental
               5            Classement_parachute_3_femmes_départemental
               6            Classement_parachute_4_femmes_départemental
               7            Classement_parachute_5_femmes_départemental
               8            Classement_parachute_6_femmes_départemental
               9            Classement_parachute_7_femmes_départemental
               10           Classement_parachute_8_femmes_départemental
               11           Classement_parachute_9_femmes_départemental
               12           Classement_parachute_10_femmes_départemental
               13           Classement_parachute_11_femmes_départemental
               14           Classement_parachute_12_femmes_départemental
               15           Classement_parachute_13_femmes_départemental
               16           Classement_parachute_14_femmes_départemental
               17           Classement_parachute_15_femmes_départemental
               18           Classement_parachute_1_hommes_départemental
               19           Classement_parachute_2_hommes_départemental
               20           Classement_parachute_3_hommes_départemental
               21           Classement_parachute_4_hommes_départemental
               22           Classement_parachute_5_hommes_départemental
               23           Classement_parachute_6_hommes_départemental
               24           Classement_parachute_7_hommes_départemental
               25           Classement_parachute_8_hommes_départemental
               26           Classement_parachute_9_hommes_départemental
               27           Classement_parachute_10_hommes_départemental
               28           Classement_parachute_11_hommes_départemental
               29           Classement_parachute_12_hommes_départemental
               30           Classement_parachute_13_hommes_départemental
               31           Classement_parachute_14_hommes_départemental
               32           Classement_parachute_15_hommes_départemental

Classement PSPeurs départementa
               1            Classement_PSPeurs_départemental
               2            Tableau09293

recapitulatif départemental
               1            Récap_PSPeurs_départemental
               2            Résultats_club_départemental

Paramétres

Merci pour ta recherche

Sur l'onglet Classement PSPeurs départementa le tableau TabMain est le Tableau09293 qui pourrait être renommé si besoin par Matrice_classement_pspeurs_départemental. La colonne tableau donne le nom du tableau et la colonne du nombre de ligne indique le nombre de ligne du tableau. Ce nombre de ligne est calculé par un formule matricielle. Ce nombre doit d'appliquer au tableau dont le nom est situé juste à gauche.

Sur l'onglet Classement parachute départementa le tableau TabMain est le Tableau09710011283235240 qui pourrait être renommé si besoin par Matrice_classement_parachute_départemental. La colonne tableau donne le nom du tableau et la colonne du nombre de ligne indique le nombre de ligne du tableau. Ce nombre de ligne est calculé par un formule matricielle. Ce nombre doit d'appliquer au tableau dont le nom est situé juste à gauche.

Le même principe devrait s'appliquer sur tout les onglets qui ont un nom qui commence par classement. J'ai d'autres onglet sur mon fichier qui ne sont pas visible sur le fichier exemple transmis.

Merci encore pour ton aide

GS

Merci pour ces compléments, je vais reprendre en fin de matinée.

J'ai compris que tu voulais faire un tableau qui compile les autres tableaux.

Cela fonctionne si tu mets ton tableau dans une zone où il n'est pas contraint en nombre de lignes, soit tu le déplaces à droite pour qu'il n'y ait rien en dessous, soit tout en bas.

Il se met alors à jour ... mais c'est long, long, long ... à cause des nombreuses fonctions matricielles.

Pourquoi ne pas utiliser plutôt

  • un TCD
  • des segments
  • des filtres avancés

pour retirer des informations des bases de données, en supprimant quasiment toutes les macros.

Fais simple et maintenable.

Si c'est ensuite une question de présentation, il y a des méthodes pour colorier une ligne sur 2, pour présenter de façon lisible.

6fichier-test.zip (626.91 Ko)

Bonsoir

Merci pour aide mais ce n'est pas exactement ma recherche. En vrai c'est le contraire que je cherche mais peut-être me suis-je mal exprimé.

Je cherche à faire à partir du tableau situé en haut de chaque onglet qui commence par classement, la macro doit chercher sur ce tableau le nom du tableau (situé en dessous) et a appliquer le nombre de ligne à ce tableau.

Je m'explique par exemple si le tableau que tu viens de créer (mais qui en vrai serait dejà créer par la formule matricielle que j'ai créer sur mon fichier sous le nom Tableau09710011283235240) a sur la ligne Classement_parachute_7_hommes_départemental le nombre 7. Le tableau en dessous qui a le nom Classement_parachute_7_hommes_départemental devra avoir 7 lignes.

Si à la ligne de mon tableau de référence a sur la ligne Classement_parachute_10_femmes_départemental le nombre 10. Le tableau en dessous qui a le nom Classement_parachute_10_femmes_départemental devra avoir 10 lignes.

Voici un exemple sur l'onglet Classement parachute départemen

image tableau pspeurs emmersion departemental

Voici un autre exemple sur l'onglet Classement PSPeurs départementa

image tableau pspeurs departemental

A voir si le chiffre est entre 1 et 3 pour avoir 4 afin de ne pas perdre les formules entrées sur chaque ligne, pour éviter de les refaire à chaque fois.

Merci pour ton aide

GS

Bonjour,

ok, mais cela veut dire que chaque tableau doit avoir suffisamment d'espace pour mettre les lignes souhaitées, il faut donc faire des insertions de lignes entre chaque tableau.

Si on revient au besoin "ultime", ces tableaux sont sensés ensuite recevoir de l'information ou bien sont-ils juste des extraits des tableaux des autres onglets ? Tout ceci peut être fait sans formules matricielles ou autres juste par un ou plusieurs filtres avancés.

Au passage, pourquoi y a t'il autant de lignes vides dans les tableaux des onglets Compétiteurs, Résultat parachutage, Série parachutage ?

Bonjour

L'idée est que chaque "pousse" les lignes qui sont en dessous de lui pour pouvoir insérer les lignes.

Tu peux regarder sur l'exemple ci-dessus le principe que je souhaite mettre en place. J'ai bien copié la macro sur mon fichier mais c'est en l'utilisant que j'ai une erreur d’exécution 1004.

Ces tableaux vont recevoir vous recevoir des infos issue des onglets Résultats parachute, Compétiteurs et paramétres.

J'ai beaucoup de ligne sur les onglets compétiteurs, résultats parachute, série parachute mais je suis en train d'essayer de les réduire peut-être en utilisant une macro qui pourrait créer le nombre de ligne nécessaire. Mais ceci se fera dans un second temps. Peut-étre avec le principe que tu vas trouver celà pourrait fonctionner.

Merci pour aide

GS

Ces tableaux vont recevoir vous recevoir des infos issue des onglets Résultats parachute, Compétiteurs et paramétres.

ok, pour ma part je poursuivrai via des filtres avancés en supprimant toutes les fonctions qui vont chercher les infos dans les onglets "source"

je laisse le soin à d'autres de poursuivre dans ta direction (avec un PC suffisamment puissant pour absorber le temps d'exécution car ce n'est pas le cas chez moi)

je tenterai de te montrer une solution d'ici demain matin

edit : désolé, je m'y perds complètement dans ton tableau, il faudrait là aussi nous faire un extrait pertinent et spécifier ce qui ne va pas. Pour le post en question, j'espère avoir répondu au sujet qui était l'erreur 1004.

Tu peux regarder sur l'exemple ci-dessus le principe que je souhaite mettre en place. J'ai bien copié la macro sur mon fichier mais c'est en l'utilisant que j'ai une erreur d’exécution 1004.

et en effet, si tu mets ce tableau au-dessus des autres, tu auras une erreur 1004, ce qui confirme que ce tableau doit être dégagé de contraintes de lignes

capture d ecran 362

Merci effectivement l'erreur disparait. C'est Top !!

Par contre quand le nombre de lignes est le résultat d'une formule, la macro ne fonctionne pas. Si je rentre le chiffre manuellement cela fonctionne.

Comment puis-je modifier le VBA pour que chiffre issu d'une formule modifie le nombre de lignes du tableau. Sur l'exemple que tu as mis dans ton post il s'agit sur tableau sur fond bleu, pour le tableau38 du chiffre 7, pour le tableau24 du chiffre10, pour le tableau13 du chiffre 5.

Merci pour ton aide

GS

Par contre quand le nombre de lignes est le résultat d'une formule, la macro ne fonctionne pas. Si je rentre le chiffre manuellement cela fonctionne.

Comment puis-je modifier le VBA pour que chiffre issu d'une formule modifie le nombre de lignes du tableau.

Les macros événementielles ne sont jamais déclenchées sur le résultat d'une formule, mais sur un changement manuel.

Il faut donc lancer la macro événementielle sur le changement des "inducteurs" de la formule.

  1. Si ceux-ci sont externes à la feuille, pas de soucis puisque tu as un rafraichissement par Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  2. sinon
    1. ajoute un bouton pour relancer la macro Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    2. ou active sur la modification des cellules inductrices de la formule..

Bonsoir

Merci pour l'info, je pensais qu'une macro pouvais fonctionner avec le résultat d'une formule. Cependant je pense que je passerai par le bouton pour relancer la macro en copiant les chiffres et les insérant en tant que valeur dans la colonne nombre de lignes.

Je vais tester pour voir.

Merci

GS

Rechercher des sujets similaires à "erreur execution 1004 vba"