Explication d'un code VBA

Bonjour, quelqu'un pourrait-il m'expliquer d'où vient le "Rows(Lg - 21)" dans le code ci-dessous, 6eme ligne ?

Sub copie_tableau()
Dim Lg%
    Lg = Range("L65536").End(xlUp)(2).Row
    Application.CutCopyMode = False
    Sheets("Feuil1bis").Rows("42:60").Copy
    Sheets("données_pluriannuelle").Rows(Lg - 21).Insert Shift:=xlDown
    Application.CutCopyMode = False
    Application.Goto Range("a43"), Scroll:=True
End Sub

Quelqu'un du forum avait résolu mon probleme avec ce code, mais mes données ayant changé je dois l'adapter; le nouveau code que j'ai tenté sans succès est visble ci-dessous, peut être une erreur vous sautera aux yeux

Sub Nouveau_quartier()
Dim Lg%
    Lg = Range("L65536").End(xlUp)(2).Row
    Application.CutCopyMode = False
    Sheets("Donnees_vierges").Rows("18:198").Copy
    Sheets("données_pluriannuelle").Rows(Lg - 183).Insert Shift:=xlDown
    Application.CutCopyMode = False
    Application.Goto Range("a43"), Scroll:=True
End Sub

bonjour

a première vu je dirai que c'est peux etre au niveau des nom de la feuille a tu vérifier l'orthographe exacte de tes feuille

sinon que il y a une erreur clic sur débogage et dis nous a quel ligne excel c'est arrêter

Lg = Range("L65536").End(xlUp)(2).Row

lg est ta variable et va a la première ligne en partant du bas

donc Lg-21 je dirai 21 ligne en dessous de ta dernière ligne du bas voir au dessus vu que c'est moins

a voir en mode débogage

la premiere ligne en partant du bas , a tu 83 ligne au dessus ?

car si tu est en ligne par exemple 20 et que tu lui demande de remonter de 83 ligne il te donnera une erreur

idem pour le ligne 65536 si tu lui demande d'aller en ligne 65537 il y aura une erreur

Bonjour,

C'est moi qui avait fait cette macro, je n'ai pas conserver le fichier,

remets-le ici, qu'on fasse la mise au point

Amicalement

Claude

Re,

Voici mon nouveau classeur; je vous explique en trois mots : je dois enregistrer des opérations de logement par quartier. La feuille du classeur joint présente les données (vides) relatives à une Commune. Un quartier rassemble plusieurs opération; les données du quartier sont encadrées par des lignes pleines, et celle de l'opération par des pointillés ...

Lorsque je clic sur mon bouton "enregistrer nouveau quartier" la macro suivante devrait s'executer"

Sub Nouveau_quartier()

Dim Lg%

Lg = Range("L65536").End(xlUp)(2).Row

Application.CutCopyMode = False

Sheets("Données_vierges").Rows("18:198").Copy

Sheets("active.sheet").Rows(Lg - 181).Insert Shift:=xlDown

Application.CutCopyMode = False

Application.Goto Range("a198"), Scroll:=True

End Sub

et lorsque je clic sur "enregistrer nouvelle opération", celle-ci :

Sub Nouvelle_opération()

Dim Lg%

Lg = Range("L65536").End(xlUp)(2).Row

Application.CutCopyMode = False

Sheets("Données_vierges").Rows("39:117").Copy

Sheets("active.sheet").Rows(Lg - 81).Insert Shift:=xlDown

Application.CutCopyMode = False

Application.Goto Range("a117"), Scroll:=True

End Sub

Le but sera de rajouter à la fil tous les enregistrements, rassemblés par quartier.

Voilou, j'avais essayé d'appliquer moi-même les codes (auto-formation et débrouillardise oblige), mais on ne s'improvise pas maitre excel aussi facilement

21classeur10.xlsm (58.70 Ko)

re,

Il faudrait mettre les formules (surtout en colonnes O:P)

là tout est vide, on a pas de repère !

donc Lg sera tourjours = à 2 !!

à te relire

Claude

Bonjour,

Voici, un nouveau classeur avec les infos demandées. N'hésitez pas à me demander plus de précision au besoin.

J'ai rentré les formules, mais étant donnée que mes tableaux ne renvoient pas encore à la Bdd brute, il y a que des messages d'erreurs.

A partir de H124 on passe en somme de toutes les opérations d'un même quartier avec la fonction somprod; je me suis assuré de la justesse de ces formules, tout est ok.

Désolé pour balancer une telle usine à gaz, j'espère que ca ne vous prendra pas trop la tête

N'hésitez pas si je peux vous alléger la tache de qqe manière que ce soit.

Merci

ToM

27classeur10bis.xlsm (168.93 Ko)

Bonsoir Tom, forum,

Ici j'ai nommé les plages à copier, ainsi que les "Top" d'insertion

Vois si çà correspond à ton attente

(pas sûr pour le quartier), qui est toujours en bas à la suite !

Si Ok sur les insertions, on verra pour supprimer les noms précités.

j'ai mis des couleurs, jaune = opération et rouge = quartier pour mieux voir où on insère.

à noter:

On pourrait incrémenter les N° d'opération et de quartier

Bonne soirée

Claude

Salut Claude,

Gagné ! c'est tout à fait ce que je recherchais. Très grand respect 8)

Bonne idée pour l'incrémentation des numéros de Quartier et d'Opération, ça simplifiera encore plus la saisie.

Thanks, gracias, merci

P.S : J'ai juste rajouté une ligne blanche dans la copie de la plage "opération", afin de conserver l'espace de 79 lignes (sans cela, au bout de la deuxième insertion d'opération une ligne disparait et donc ça fait un espace de 78 lignes si tu vois ce que je veux dire...).

Bonjour,

J'ai supprimé les noms "Top"

maintenant le repère de départ est la dernière cellule utilisée en colonne "O"

intitulée "Totaux généraux opération"

J'ai ajouté l'incrémentation des N°

Sub Nouveau_quartier()
Dim Lg%
If ActiveSheet.Name <> "Données_pluriannuelles" Then Exit Sub   'sécurité
    Lg = Range("o65536").End(xlUp).Row                          'dernière ligne colonne "O"
        With Sheets("Données_vierges")
            Application.CutCopyMode = False
            .Range("b21") = "Quartier " & .Range("e2") & " :"   'titre
            .Range("Quartier").Copy
            ActiveSheet.Rows(Lg + 5).Insert Shift:=xlDown       'ligne insertion
            Application.CutCopyMode = False
            .Range("e2") = .Range("e2") + 1                     'incrémente
        End With
    Application.Goto Range("a" & Lg + 5), Scroll:=True
End Sub
Sub Nouvelle_opération()
Dim Lg%
If ActiveSheet.Name <> "Données_pluriannuelles" Then Exit Sub       'sécurité
    Lg = Range("o65536").End(xlUp).Row                              'dernière ligne colonne "O"
        With Sheets("Données_vierges")
            Application.CutCopyMode = False
            .Range("d42") = "NOM OPERATION " & .Range("e1") & " :"  'titre
            .Range("Opération").Copy
            ActiveSheet.Rows(Lg - 72).Insert Shift:=xlDown          'ligne insertion
            Application.CutCopyMode = False
            .Range("e1") = .Range("e1") + 1                         'incrémente
        End With
    Application.Goto Range("a" & Lg - 73), Scroll:=True
End Sub

Nota: les nouvelles opérations sont insérées dans le quartier en cours, normal ?

à tester

Bonne journée

Claude

Re,

Co_ol ! C'est comme je l'avais imaginé ! je l'ai rêvé et tu l'as fais lol ! Vendredi je ferai voir l'état d'avancement de mon travail à ma chef de service, je vais être tout fier

Nota: les nouvelles opérations sont insérées dans le quartier en cours, normal ?

C'est vrai que c'est assez dérangeant, car cela va nous empêcher d'enregistrer deux quartier simultanément. Si tu sais comment faire pour que l'opération se rajoute dans le quartier à partir duquel on a cliqué sur le bouton "enregistrer une nouvelle opération" ça m'intéresse.

En tout cas c'est sympa de m'avoir suivi depuis le début

Amicalement,

ToM

re,

Si on se résume,

  • les quartiers sont toujours insérés à la fin, çà c'est ok ?
  • aujourd'hui les nouvelles opérations sont insérées dans le dernier quartier,
on pourrait imaginer un InputBox qui te demanderait dans quel quartier insérer l'opération.

çà ne va pas mettre le souk dans les formules ? (j'ai pas trop regarder çà !)

Dis-moi si mon résumé est exact et si tu est intéressé pour faire la modif.

(sous réserve de possibilité, faudra voir)

PS: retire le résolu du poste, pour continuer le fil.

Amicalement

Claude

Bonsoir Claude,

Dis-moi si mon résumé est exact et si tu est intéressé pour faire la modif.

(sous réserve de possibilité, faudra voir)

Parfaitement exact. Bonne idée pour l'input box, si ça marche ça m'apprendra une manipulation dont je n'avais même pas connaissance de son existence ^^

çà ne va pas mettre le souk dans les formules ? (j'ai pas trop regarder çà !)

J'ai vérifié plusieurs fois mes SOMPROD qui sont les formules les plus susceptibles de bouger mes tout est ok, même lorsque l'on rajoute des opérations et des quartiers. Je ne pense pas avoir de mauvaises surprises là dessus

bonne soirée, à bientôt

ToM

P.S : comment remercier ton aide lol ?

Bonsoir Tom, forum,

Je regarde la faisabilité pour choix du quartier à l'insertion d'une opération,

çà complique un peu pour incrémenter le N°, mais bon, on va surement trouver une astuce !

------ Questions ------

1) C'est quoi ces chiffres en colonne "C" ? (en police blanche), çà sert à quelque chose ?

j'ai vu qu'en colonne "D" çà sert pour les formules.

2) tu compte mettre combien de quartiers sur un fichier ? (environ ou fourchette)

et combien d'opérations par quartier ? (environ ou fourchette)

c'est pour avoir une idée de l'ensemble.

3) Auras-tu besoin éventuellement, de supprimer des opérations ou des quartiers ?

là, çà deviendrait nettement + complexe !!

y-a-tu penser ?

à te relire

Claude

Bonjour,

1) C'est quoi ces chiffres en colonne "C" ? (en police blanche), çà sert à quelque chose ?

j'ai vu qu'en colonne "D" çà sert pour les formules.

Ahah, ces chiffres ne servent à rien, ils steakachaient (à force de faire des mises à jour de la première version...)

2) tu compte mettre combien de quartiers sur un fichier ? (environ ou fourchette)

et combien d'opérations par quartier ? (environ ou fourchette)

Donc selon la Commune, le nombre de quartier enregistré ira de 7 à une 20ène;

Le nombre d'opération par quartier pourra aller de 1 à une 20ène;

3) Auras-tu besoin éventuellement, de supprimer des opérations ou des quartiers ?

Oui cette situation se rencontrera forcément, mais je pense qu'il sera aisé de le faire manuellement.

çà complique un peu pour incrémenter le N°

Si c'est trop prise de tête, je peux aussi mettre une cellule "N°quartier" à saisir manuellement...

Bonne matinée,

Amicalement,

ToM

Bonsoir à tous,

J'ai du modifié certaines cellules (emplacement et format), voir feuille "Explications"

ceci est indispensable pour repérer les quartiers et opérations.

Nouvelle opération

un InputBox te demande le N° de quartier pour insérer.

à chaque insertion le N° est incrémenté

Nouveau quartier

Toujours inséré à la suite

à chaque insertion le N° est incrémenté

Pour supprimer opération ou quartier, tu feras manuellement,

avec les repères, çà devrait aller.

il faudra surement modifier les N° manuellement

(trop tordu pour automatiser çà !)

Je te laisse tester

Amicalement

Claude

Bonsoir

A partant du fichier de Claude, je me suis "amusé" un peu

Waaaah !

Comment dire... Jsuis dans le couloir de ma résidence à l'affut du meilleur angle pour réceptionner le wifi de mes voisin et que vois-je ?

Vous êtes à deux, arrivés à relever tous les défis dont on avait discuté, parfois même que vous m'aviez pertinemment suggéré ! Vraiment beau cadeau les gars !

J'en suis ébahi, tant sur la performance que sur le plan entre-aide

Vraiment j'apprends beaucoup avec vous, et je pense ne pas être le seul ! Jvais essayé de compiler les deux, voir si j'arrive à faire quelque chose seul quand même héhé

Happy happY haPpy Time !!!!

Bonsoir

Mais rendons à César à ce qui appartient à Claude

Sans lui cette macro n'aurait jamais existé, c'est lui qui à enlevé la poussière et je suis arrivé et je me suis diverti (un challenge pour moi)

Si tu as ce programme c'est d'abord à un grand merci à lui

J'espère qu'il ne m'en voudra pas de lui avoir piqué son boulot

Rechercher des sujets similaires à "explication code vba"