VBA travailler sur plusieurs feuilles

Bonsoir,

Je pensais en avoir terminé avec ce document Excel, mais il reste quelques petits problèmes que je ne parviens pas à résoudre...

Je souhaiterais tout simplement (entre autres) supprimer des lignes d'une autre feuille, lorsque j'utilise un bouton sur la première feuille.

J'ai tenté, en vain, une multitude de méthodes mais rien n'y fait. Mon code fonctionne sur la feuille en cours, mais pas sur les autres feuilles.

A travers la résolution de ce souci, je devrais pouvoir être en mesure de venir à bout d'une bonne partie des éléments qui me posent problème !

Voici quelques-unes de mes tentatives :

Dim ws As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim g as long

    Set ws = Worksheets("Feuil1")
        Set ws2 = Worksheets("A")
        Set ws3 = Worksheets("B")

g = ws2.Cells(Rows.Count, 2).End(xlUp).Row

Worksheets("B").Select
    With Worksheets("B").Range(Cells(4, 1), Cells(26, 13)).Activate
    'Worksheets("B").Range(Cells(4, 1), Cells(26, 13)).Delete
    End With

'__________________
Sheets("B").Select
Rows("4:100").Select
Selection.Delete Shift:=xlUp

'_________________
ws3.Activate
Rows("4:100").Select
Selection.Delete Shift:=xlUp
Selection.EntireRow.Delete

'_________________
For s = 4 To g
For r = 1 To 13
    Rows(Cells(s, r)).Select
    'Selection.Delete Shift:=xlUp
    Selection.EntireRow.Delete
    Worksheets("B").Range(Cells(4, 1), Cells(25, 13)).Select
    Selection.EntireRow.Delete
Next
Next

Je me perds un peu dans toutes mes tentatives, du coup, il est probable que certaines affichées là soient non fonctionnelles.

Plus en détail, ce que je recherche à faire :

Supprimer, dans la feuille "B", les lignes 4 à "g" ("g" = dernière ligne de la feuille A).

Mon unique problème vient du fait que je n'arrive pas à faire ça d'une feuille à l'autre et que je me retrouve obligé de travailler, à chaque fois, sur la feuille concernée.

Ce qui me surprend, c'est que je n'ai pas ce problème tout le temps, il y a donc quelque chose que je ne fais pas dans un certain contexte et je n'arrive pas à savoir ce que c'est.

Merci encore pour votre attention, surtout pour ce genre de problème mineur..

Bonne soirée !

A plus tard

Bonjour,

Ce code, pour l'instant, n'est pas enregistré dans ton fichier, c'est bien cela ?

Une chose à respecter : si tu fais par exemple

Sheets("B").Select

mets ton code dans un module et non dans la feuille (A ?) qui lancera la macro.

Salut,

Je ne mets rien dans les modules, je vais donc m'y intéresser et voir comment les gérer.

Je n'ai laissé que le tout début de mon code dans le fichier exemple, pour que les premières données soient recherchées, mais, effectivement, je n'ai pas mis les codes dont je parle dans ce post.

Je regarderai un peu plus tard.

Bonne journée !

Bonsoir,

J'ai commencé à regarder. Il me semble que ce qu'on met dans un module s'applique à toutes les feuilles, en permanence (ou 1 fois).

Cette partie de mon code doit se lancer lorsque j'appuie sur un bouton, autant de fois que j'appuie dessus (mais ni avant, ni après).

L'utilisation d'un module reste t-elle pertinente ?

Dans le même genre, j'utilise ce code pour transformer des valeurs issues d'une formule en "valeurs classiques"

Dim g As Long
Dim ws2 As Worksheet
Set ws2 = Worksheets("A")
g = ws2.Cells(Rows.Count, 2).End(xlUp).Row
Range(Cells(3, 4), Cells(g, 10)).Value = Range(Cells(3, 4), Cells(g, 10)).Value

ça fonctionne si je suis sur la feuille A, mais pas si je veux que ça s'applique à la feuille B, ça ne fonctionne pas.

Alors j'essai autrement :

Sheets("B").Activate

Dim n5 As Long
Dim ws3 As Worksheet
Set ws3 = Worksheets("B")

n5 = ws3.Cells(Rows.Count, 1).End(xlUp).Row

Sheets("B").Range(Cells(4, 16), Cells(n5, 16)).Value = Sheets("B").Range(Cells(4, 16), Cells(n5, 16)).Value

Voire même

Sheets("B").Range(Cells(4, 16), Cells(100, 16)).Value = Sheets("B").Range(Cells(4, 16), Cells(100, 16)).Value

(Presque) Rien n'y fait...

Ça marche si je ne variabilise pas :

Sheets("B").Range("P4:P100").Value = Sheets("B").Range("P4:P100").Value

Bonne soirée !

Bonsoir,

J'ai commencé à regarder. Il me semble que ce qu'on met dans un module s'applique à toutes les feuilles, en permanence (ou 1 fois).

Cette partie de mon code doit se lancer lorsque j'appuie sur un bouton, autant de fois que j'appuie dessus (mais ni avant, ni après).

L'utilisation d'un module reste t-elle pertinente ?

Il faut utiliser les 2 : une macro événementielle qui déclenche la macro dans le module qui va impacter d'autres onglets.

Salut Le Drosophile,

Salut Steelson,

comme souvent, le problème à l'origine, c'est la difficulté à exprimer correctement le but de la manoeuvre de manière claire et détaillée!

Comme j'ai compris ton code :

  • tu copies en feuille 'A' colonne ['B'] et en feuille 'B' colonne [A] le contenu de la colonne [AH] 'Feuil1' ;
  • en feuille 'A', tu supprimes les doublons colonne ['B'] et calcule alors sa dernière ligne ;
  • tu supprimes alors en feuille 'B' colonne [A] les lignes de 4 à la ligne calculée ci-dessus.
Bizarre autant qu'étrange!

Avant de te livrer ma prose VBA basée sur ce que j'ai compris, est-ce bien juste et est-ce TOUT ce que tu veux faire ?

Sont-ce les trois seules feuilles concernées ou veux-tu pouvoir exécuter cette manoeuvre sur d'autres feuilles et/ou colonnes?

A+

Salut,

Merci de vous intéresser à mon problème.

En effet, vous l'avez remarqué, j'ai beau essayer d'être clair, c'est pas ce que je réussi de mieux...

Concernant le code présent dans la feuille jointe à cette discussion :

Comme j'ai compris ton code :

  • tu copies en feuille 'A' colonne ['B'] et en feuille 'B' colonne [A] le contenu de la colonne [AH] 'Feuil1' ;
  • en feuille 'A', tu supprimes les doublons colonne ['B'] et calcule alors sa dernière ligne

C'est bien ce que fait ce code.

(D'ailleurs, à en parler, je pense pouvoir simplifier tout ça...)

- tu supprimes alors en feuille 'B' colonne [A] les lignes de 4 à la ligne calculée ci-dessus.

Ça, c'est ce qui doit se passer en premier, ça me permet de "nettoyer" le tableau à chaque fois que le code est lancé, via le bouton (feuille A).

Je souhaite supprimer les lignes car les traitements qui suivent engendrent des fusions, si je relance la macro, les cellules fusionnées doivent être supprimées. Ça me permet également de m'assurer que le code qui recherche la dernière ligne (feuille B) fonctionne toujours correctement (et qu'il ne reste pas des informations qui trainent).

Dans l'ordre il y a donc :

  • Suppression des lignes 4 à "x" dans la feuille B. (x = dernière ligne de la première feuille (Feuille 1) colonne AH)
  • copie en feuille 'A' colonne ['B'] et en feuille 'B' colonne [A] le contenu de la colonne [AH]
  • suppression en feuille 'A' , des doublons colonne ['B'] et calcul de sa dernière ligne

Est-ce que cette explication est plus claire ?

Avant de te livrer ma prose VBA basée sur ce que j'ai compris, est-ce bien juste et est-ce TOUT ce que tu veux faire ?

Sont-ce les trois seules feuilles concernées ou veux-tu pouvoir exécuter cette manoeuvre sur d'autres feuilles et/ou colonnes?

Je cherche bien à faire fonctionner le code "suppression des lignes" sur la feuille "B".

Pas d'autre feuille faisant l'objet de ce traitement.

Bonne journée !

Finalement c'est bon, j'ai regardé comment activer un module et j'ai donc appliqué ce code :

Public Sub modifvaleurs()

Dim ws3b As Worksheet
Dim lr As Long

Set ws3b = Worksheets("B")
lr = ws3b.Cells(Rows.Count, 1).End(xlUp).Row

'Ne conserver que les valeurs
    For aa = 4 To lr
        ws3b.Cells(aa, 16).Value = ws3b.Cells(aa, 16).Value
    Next

End Sub

Public Sub suppression()

'Nettoyer le tableau avant calculs
Dim lrs1 As Long
Dim wsb As Worksheet

Set wsb = Worksheets("feuille1")
lrs1 = wsb.Cells(Rows.Count, 34).End(xlUp).Row

Range(Cells(4, 1), Cells(lrs1 + 2, 16)).EntireRow.Delete

End Sub

'Lancer le module 2
ws3.Activate
suppression

Lancer le module 1
ws3.Activate
modifvaleurs

Tout fonctionne comme souhaité.

Désormais je vois comment utiliser les modules ! youhou

Bonne soirée !

Rechercher des sujets similaires à "vba travailler feuilles"