découper un tableau

  • Initiateur de la discussion batiscaf
  • Date de début
B

batiscaf

Guest
Bonjour/bonsoir tout le monde.

Bien que non-croyant, je dois bien avouer que je soupsonne quelques dieux du VB derrière certains pseudos.

Malgrès maintes recherche dans le forum, je doit bien avouer que je n'ai pas encore trouvé mon sauveur.

cf. pièce jointe.
1er onglet : Je récupère un TDC global figé avec des sous-totaux par membre de ma famille.
autres onglets : j'ai besoin d'automatiser l'éclatement de chaque partie du tableau global, par membre de ma famille, dans des onglets individuels à leurs noms.
Bien entendu, ma famille peut avoir grandi ou mangé d'autres fruits d'une période à une autre. Les entêtes et textes en pieds de tableaux doivent être conservés également sur chaque nouvel onglet.

C'est donc l'inverse, des SOS habituellement postés.

Qui sera mon st-bernard ?

En tout cas, d'ores et déjà merci à tous ceux qui à longeur de temps diffusent toutes ces solutions. J'ai trouvé mon site de chevet.

Je ne manquerais pas de vous tenir au courant.

Batiscaf.
 

Pièces jointes

  • demodecoupe.zip
    10.3 KB · Affichages: 32
M

myDearFriend

Guest
Bonsoir Batiscaf,

Tu trouveras ci-joint ton fichier modifié pour répondre à ta demande.

J'ai pris le problème à l'envers, au lancement de la macro :

- Etape 1 : je supprime tous les onglets des membres de la famille
- Etape 2 : pour chaque membre de la famille, je recrée un onglet en y recopiant le tableau "Famille" en entier et je supprime les lignes ne correspondant pas au membre en cours.

A mon avis, cette méthode permet d'économiser beaucoup de code et permet surtout de maintenir les mises en forme d'origine du tableau.

Pour finir, je ne me prends en aucun cas pour un expert Excel et encore moins pour un dieu... hum, cela dit,... va en paix mon fils !
Eh, Eh, désolé, je n'ai pas pu résister... ;-)

Cordialement.
Didier
 

Pièces jointes

  • PourBatiscaf.zip
    20.9 KB · Affichages: 31
C

Celeda

Guest
Bonjour,

Je ne suis pas sure d'avoir bien compris : tu veux des mini-bases de données issues du TCD ?

J'ai compris cela : alors j'ai reconstitué une base et un TCD - et en cliquant sur le total de chaque individu, il se crée une nouvelle page.
Il s'agit ensuite pour l'harmoniser à ce que tu veux, ajouter une ligne Total.

Enfin si c'est cela que tu veux,

Celeda
 

Pièces jointes

  • demodecoupev1.zip
    11 KB · Affichages: 22
B

batiscaf

Guest
Bonsoir tout le monde,

et particulièrement à myDearFriend et Celeda qui m'ont retiré plusieurs épines du pied.

Dans le cas précis qui m'avait fait poster ce mail, c'est la réponse de myDearFriend qui me convient parfaitement. C'est pil poil dans le mille.
Je vais pouvoir m'attaquer à la suite de la macro.

Mais merci quand même à Celeda et Dan sur le t'chat, dont la façon d'enviger les choses vont me permettre de résoudre d'autres petits soucis sur d'autres macros, sans avoir à vous déranger.

Bien cordialement.

Bien cordialement.

Batiscaf.
 
B

batiscaf

Guest
Bonjour tout le monde,

Et bien vous savez quoi ? je coince sur un cas quasi-similaire.
C'est a priori pas grande chose, mais je trouve pas.

Sur la base de la réponse donnée par MyDearFriend :
Ce coup ci, la variable de la première colonne peut être composée de plusieurs mots (jusqu'à 50 caratères au total).
Je n'arrive pas à surmonter cet obstacle.

D'avance un grand merci.

A bientôt.
 

Pièces jointes

  • demodecoupe2.zip
    7.1 KB · Affichages: 24
M

myDearFriend

Guest
Bonsoir Batiscaf,

Tu trouveras ci-joint l'exemple rectifié selon tes souhaits.

Toutefois, saches que le nom d'un onglet ne peut dépassé 31 caractères et que les caractères /\?*[] y sont interdits.


Cordialement.
Didier
 

Pièces jointes

  • PourBatiscaf2.zip
    17.8 KB · Affichages: 29
@

@+Thierry

Guest
Hello Didier, Batiscaf, le Forum

Pas encore couché lol !!

Splendide Macro Didier !!!

Option Explicit

Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 04/05/2004 par mDF
'
'
End Sub

enfin au moins tu as mis Option Explicit !!! hi hi hi

Bon allez vé dodo,
@+Thierry

Sinon pas mal la Function VerifNom !
 
B

batiscaf

Guest
Bonsoir MDF, Thierry, tous les autres,

Et bien re-pil poil cette fois-ci encore.

Effectivement j'étais encore à des années lumières de ce que MDF nous a concoté.
Et cette fonction Vérifnom est bien utile.
Je devrais pouvoir me débrouiller tout seul pour le reste de cette macro.

Merci.
A+

Batiscaf.

ps: c'est quoi "option explicit" ?
 
M

myDearFriend

Guest
Bonsoir Batiscaf,

"Option explicit" se place au début d'un module.

Ca rend obligatoire la déclaration par "Dim" de toutes les variables et tableaux du dit module.

L'intérêt ?
Ca permet déjà d'éviter les erreurs de saisie et donc les trucs qui clochent sans qu'on sache vraiment pourquoi.

Par exemple, je n'ai pas "Option explicit", j'ai déclaré une variable "MaVar", ma macro doit lui affecter la valeur 5 puis lui rajouter 10, je fait :

Dim MaVar as byte
...
MaVar = 5
....blablabla...
....blablabla...
MVar = MaVar + 10
...blablabla...

Après lancement de la procédure, MaVar vaudra toujours 5 car j'ai fait une faute de frappe et j'ai tapé "MVar" à un certain moment. Je me retrouve avec un résultat faux et aucune erreur détectée par l'appli !

En ayant pris soin d'indiquer "Option explicit", dès lancement de la macro, une erreur se déclenche : "Erreur de compilation.... Variable non définie !" et on sait qu'il y a un problème.

Si tu souhaites que cet "Option explicit" soit placé automatiquement lors de chaque création de module : dans l'éditeur VBA, tu fais menu "Outils/Options/onglet Editeur" et tu coches "Déclaration explicite des variables".

J'espère que cette explication te suffira.


Par ailleurs, à l'attention de Thierry qui décidément, à l'oeil sur tout, je lui signale que cette "splendide macro" est cryptée.... c'est un secret de famille.... je suis suis le seul à savoir à quoi elle sert... lol ! D'ailleurs, s'il m'implore, je pourrais peut-être lui apprendre à faire les même (Ouarf, Ouarf... j'ai honte) !!!

Didier
 
B

batiscaf

Guest
Bonjour tout le monde, et particulièrement MDF si possible.

Je croyais être débarrassé mais finalement les mystère du Vb sont impénêtrables.

Figurez-vous que le tableau temporaire (rèf. "pourbatiscaf2.zip") est bloqué au delà de 254 lignes. Je ne pensais pas que ce genre de fonctions avaient des limites.

Enfin bref, je suis bien embêté car ma base fait à ce jour plus de 1100 lignes et devrait à terme en faire + de 15000. Je ne sais pas comment passer la limite de 254 lignes.

je ne sais pas si c'est utile, mais puisqu'on en est aux limites possibles :
- j'utilise 19 colonnes à ce jour (ça pourra monter à 25)
- certains membres de ma famille utiliserons + de 4000 lignes chacun
- je peux avoir + de 100 membre dans ma famille

merci de votre aide

B.
 
@

@+Thierry

Guest
Bonsoir Batiscaf, Didier, le Forum

Didier passe plus tard en général... Mais la question est très simple et la réponse aussi

Dans les "Dim" de variables de la macro de NotreCHerAmi, j'ai mis les commentaires :

Private Sub btnRedistribuer_Click()
Dim TabTemp As Variant
'Tableau de la plage de données (Dim OK)
Dim Membre() As String
'Tableau Indéxé Séquentiellement (Dim OK)

Dim i1 As Byte
'Compteur des Feuilles (Max 255, donc Semble Dim OK...... MAIS la même variable est reprise pour l'incrémentation du TabTemp...
>>>> CHANGEMENT >>>> Dim i1 As Integer

Dim i2 As Byte
Seconde incrémentation du TabTemp
>>>> CHANGEMENT >>>> Dim i2 As Integer


Dim N As Byte
'Indexation de "Membre" qui va nommer les feuilles en fonction du nombre de "Total", semble Dim OK si pas plus de 255 totaux en feuille "famille", mais je n'ai pas testé plus loin, mettre Dim As Integer si problème persiste.

Dim V As String
'Chaine des quatres premiers caractères de analysés pour un Nom de Feuille (Dim OK)

Dim L1 As Long
'Sert à l'incrémentation des plages non membres afin de supprimer les lignes non concernée, Dim semble disproprtionné, mais doit fonctionner (Suggestion Dim L1 as Integer)

Dim L2 As Long
'Idem que L1

Pour t'aider à comprendre je te conseille de regarder ce document PDF Lien supprimé il est en anglais, mais tu apprendras entre autre la limite de Byte est justement 255...

Bonne Soirée
@+Thierry


PS ah oui pour Didier_MDF c'est quoi çà
For i1 = 2 To Sheets.Count
Sheets(2).Delete
Next i1
Je viens de tomber là-dessus en "épluchant" tes variables !!! lol
 
M

myDearFriend

Guest
Bonsoir à tous,

Ben dis-donc Batiscaf, tu as une sacrée famille toi (c'est plus un arbre généalogique qu'on peut faire avec tout ça, mais c'est une forêt toute entière !)

Cela dit, belle analyse de Thierry, je pense qu'avec ces renseignements tu devrais pouvoir t'en sortir Batiscaf. Cela dit, en cas de problème je peux te fournir la version corrigée si tu le souhaites (il faudra cependant que tu me précises s'il peut y avoir ou non plus de 255 membres (N).

Pour Thierry, devinette :

- J'ai 5 onglets : A, B, C, D, E
- Je supprime le 2ème.
- quel est le nom du 5ème ?

Ben, le cinquième n'existe plus car E est devenu le 4ème !
Le décalage lol !

Autrement dit, en faisant :

For i1 = 2 To Sheets.Count
Sheets(2).Delete
Next i1

je supprime tout les onglets sauf le 1er.

Si j'avais fait :

For i1 = 2 To Sheets.Count
Sheets(i1).Delete
Next i1

j'aurais eu droit à un beau plantage !

Par ailleurs, j'ai fait l'essai avec :
For i1 = Sheets.Count To 2 Step -1

mais j'ai eu droit à un "Dépassement de capacité" qui m'a laissé perplexe...

A bientôt.
Didier
 
B

batiscaf

Guest
Bonjour,

Tout bon, c'était bien le redimensionnement des variables.
a pu les blocages.

C'est ma famille qui va être contente !!!

Merci encore.

Batiscaf.

ps. : devinez-quoi ? j'ai un cousin (dorénavant éloigné...) dont le pseudo contenait un signe interdit à l'enregistrement. La fonction de VerifNom est impec !
 

Statistiques des forums

Discussions
312 305
Messages
2 087 088
Membres
103 461
dernier inscrit
dams94