Question technique sous VBA

WILFRIED

XLDnaute Impliqué
Salut à tous et toutes,

je sais que mon titre n'est pas très parlant mais voilà je bosse sur une petit appli pour "vieri", et afin de me simplifier un peu le code vba je souhaiterai savoir s'il existe un moyen sous vba de connaitre s'il y a eu une suppression ou une insertion de ligne dans une feuille excel et à quelle niveau et ce sans avoir besoin de faire une comparaison systematique de chaque cellule de la plage de donnéee....

Espérant avoir été suffisament claire.

Merci
 

Excel-lent

XLDnaute Barbatruc
Re : Question technique sous VBA

Bonsoir WILFRIED,

Pourquoi se casser la tête avec du VBA? Pourquoi une comparaison systématique de chaque cellule de la plage de donnée?

Une méthode répondant parfaitement à ta demande et où il n'y a RIEN à faire :)

"Outils" / "Suivi des modifications" / "afficher les modifications..."

N'ayant jms eu besoin de cela, j'en connaissais l'existence, mais c'est tout. Avant de te répondre, j'ai testé pour voir si cela répondait parfaitement à ta demande, il me semble. Et en plus c'est super bien fait et simple d'utilisation!!!!

Tout se fait automatiquement, et côté information, c'est vraiment très très détaillé! :eek: Encore mieux que l'oeil de moscou!

Bonne soirée
 
G

Guest

Guest
Re : Question technique sous VBA

Bonsoir wilfried, Excel-lent,

Vois si ce module de classe te conviens.
Dans cet exemple seule la feuille 2 est contrôlée.

J'espère qu'il ne fait pas trop froid chez toi!
Passe un bon week-end

P.S. j'ai une chose identique pour suppression et insertion de feuille
A+
 
Dernière modification par un modérateur:

WILFRIED

XLDnaute Impliqué
Re : Question technique sous VBA

Salut Hasco, Mj13,


Moi aussi je te tire mon chapeau pour ces deux maniffique exemple de module de classe.

J'ignore completement comment tu as fait ça ma le premier (celui avec l'insertion/suppression de ligne) me convient manifiquement.

Il ne me reste plus qu'as le triturer dans tous les sans pour trouver comment obtenir le Numéro de la ligne qui à été insérer..

Je vais aussi chercher dans les tutos des cours sur les module de classe....

Hasco, pour répondre à ta question Oui il faite trés froid, j'habitai Thonon y as encore 2 mois donc je connait les hivers avec de la neige mais à ferney ces de la GLACE!!!!:eek: j'ai environ 1 cm de glace sur le parking devant chez moi depuis Noel... les gens du quoi dise qu'il n'ont pas connue d'hivers comme ça depuis 8 ou 10 ans....

Ps: Hasco est tu d'accrod pour que j'utilise ton code pour la demande de vieri :

https://www.excel-downloads.com/threads/transfert-de-donnee-dans-un-classeur.110753/

en présisant bien sur dans le dit code qu'il est de toi (il faut rendre à cesar ce qui appartiens à cesar et à HASCO ce qui lui appartiens... LOL;))

A+ et encore merci..
 
Dernière édition:

WILFRIED

XLDnaute Impliqué
Re : Question technique sous VBA

RE

Bon après avoir tourner ton exemple dans tous les sens, je enfin trouver comme l'utilisé pour les besoins de Vieri. je n'est fait que l'insertion mais puisque cela marche dans ce sens la cela devrait marcher dans l'autre.

Je vais m'en occuper lundi car je doit m'occupe de ma tribu ;) qui ne devrait pas tarder à se reveillé...

A+ et bon Week End.
 

Pièces jointes

  • EvenementSuppressionInsertionLignes2.zip
    15.4 KB · Affichages: 45

WILFRIED

XLDnaute Impliqué
Re : Question technique sous VBA

Salut HASCO,

Je doit être un peu débile car j'arrive à faire fonctionner ton module de classe dans ton fichier, mais voila j'ai exporter ton Module de classe, j'ai recopier tes info dans la feuille à controlé, mais cela ne fonctionne pas. Où est mon erreur???:confused:

Je continue à chercher. Mais si tu vois mon erreur avant tien moi informer SVP..

A+
 

Pièces jointes

  • 18844 SAS M 1 000 001Aa - BASL SAS.zip
    32.6 KB · Affichages: 36
  • 18844 SAS M 1 000 001Aa - BASL SAS.zip
    32.6 KB · Affichages: 37
  • 18844 SAS M 1 000 001Aa - BASL SAS.zip
    32.6 KB · Affichages: 45

WILFRIED

XLDnaute Impliqué
Re : Question technique sous VBA

Salut,


Alors cette année j'ai le cerveau qui mets du temps à démarrer...:p

Mais ça y est, il est enfin démarrer (espéront qu'il ne calera pas...;))

J'ai contourner le probléme en recopiant la partit calculate dans une nouvelle partit change, et cela marche du tonnerre.. Encore Merci.

Du coups le poids de mon fichier à diminuer de moitié ( disparition de 3 module de programme VBA et de 4 USF...)

A+ et encore merci
 
G

Guest

Guest
Re : Question technique sous VBA

Hello wilfried,

Excuses-moi de n'avoir pas répondu, mais, week-end et obligations familiales obligent!

Heureux pour toi que tu aies trouvé la solution. C'est vrai que j'aurais pu te signaler que tu pouvais mettre le compte des lignes dans un autre évènement.

D'ailleurs tu n'est pas obligé d'utiliser un module de classe pour cela, mais c'est plus pratique si tu as plusieurs feuilles à contrôler.

Si tu n'as qu'une feuille à examiner tu peux faire comme ci-dessous:
dans le module de la feuille:
Code:
Option Explicit
Private NombreDeLignes
 
[COLOR=yellowgreen]'Important: initialisation du nombre de ligne[/COLOR]
[COLOR=#9acd32]'S'il n'y a aucune donnée dans la feuille UsedRange.rows.count=1 (usedRange=A1)[/COLOR]
Private Sub Worksheet_Activate()
    NombreDeLignes = ActiveSheet.UsedRange.Rows.Count
End Sub
 
[COLOR=yellowgreen]'Change ou autre évènement[/COLOR]
Private Sub Worksheet_Change(ByVal Target As Range)
    If UsedRange.Rows.Count < NombreDeLignes Then
        MsgBox " Suppression Ligne"
    ElseIf UsedRange.Rows.Count > NombreDeLignes Then
        MsgBox "Insertion Ligne"
    End If
    NombreDeLignes = UsedRange.Rows.Count
End Sub

Bonne semaine
A+
 
Dernière modification par un modérateur:

WILFRIED

XLDnaute Impliqué
Re : Question technique sous VBA

Salut Hasco,


Pour les obligations familliales, je connais, actuellement je suis obligé de garder ma fille car je n'ai pas encore trouver de nounou convenable.

Dans ton exemple, usedrange remplace le ctrl+* c'est bien çà?

J'ai utilisé ton code de module de classe en précisant qu'il était de toi. Si tu veux jeter un coup d'œil voici le lien : https://www.excel-downloads.com/threads/transfert-de-donnee-dans-un-classeur.110753/

Merci encore, c'est un code que je vais garder sous le coude au cas où.

A+
 
G

Guest

Guest
Re : Question technique sous VBA

Wilfried,

CTRL+* sélectionne le tableau en cours
UsedRange renvoie la plage Carrée ou rectangulaire de toutes les cellules utilisées dans la feuille.

Exemple si tu as un tableau A1:E17 + une cellule non vide en G65536

CTRL+* renvoie A1:E17
UsedRange renvoie A1:E65536

J'irai jeté un coup d'oeil à ton oeuvre.

A++
 

skoobi

XLDnaute Barbatruc
Re : Question technique sous VBA

Coucou les amis :),

Hello wilfried,

Excuses-moi de n'avoir pas répondu, mais, week-end et obligations familiales obligent!

Heureux pour toi que tu aies trouvé la solution. C'est vrai que j'aurais pu te signaler que tu pouvais mettre le compte des lignes dans un autre évènement.

D'ailleurs tu n'est pas obligé d'utiliser un module de classe pour cela, mais c'est plus pratique si tu as plusieurs feuilles à contrôler.

Si tu n'as qu'une feuille à examiner tu peux faire comme ci-dessous:
dans le module de la feuille:
Code:
Option Explicit
Private NombreDeLignes
 
[COLOR=yellowgreen]'Important: initialisation du nombre de ligne[/COLOR]
[COLOR=#9acd32]'S'il n'y a aucune donnée dans la feuille UsedRange.rows.count=1 (usedRange=A1)[/COLOR]
Private Sub Worksheet_Activate()
    NombreDeLignes = ActiveSheet.UsedRange.Rows.Count
End Sub
 
[COLOR=yellowgreen]'Change ou autre évènement[/COLOR]
Private Sub Worksheet_Change(ByVal Target As Range)
    If UsedRange.Rows.Count < NombreDeLignes Then
        MsgBox " Suppression Ligne"
    ElseIf UsedRange.Rows.Count > NombreDeLignes Then
        MsgBox "Insertion Ligne"
    End If
    NombreDeLignes = UsedRange.Rows.Count
End Sub
Bonne semaine
A+

J'ai pas tout suivi mais je pense qu'il n'était pas nécessaire de faire un module de classe pour le cas de plusieurs feuilles.
En effet, en créant
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
et
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Tout ceci dans ThisWorkBook.
Cela marche pour toutes les feuilles.
Ou alors j'ai zappé quelque chose?
 

Discussions similaires

Statistiques des forums

Discussions
312 763
Messages
2 091 848
Membres
105 077
dernier inscrit
Airnee