Sélection de cellules variables au sein d'une ligne

Fermé
vincl2216 Messages postés 7 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 22 novembre 2012 - 20 nov. 2012 à 12:53
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 - 22 nov. 2012 à 23:42
Bonjour,

Voici mon problème : dans un tableau de base (+/- 5000 lignes), je fais des sous totaux, j'aimerais récupérer les lignes de sous-totaux avec l'ensemble des données de chaque cellule. hors lorsque je fais mon sous-total, la formule ne reprend que les cellules reprise dans ma somme.

J'ai donc fait une macro pour qu'à chaque ligne de sous-total, dès que la cellule est vide, on copie la valeur du dessus mais cette méthode est très longue.

Etant donné que le numéro de colonne est fixe, je voulais indiquer dans une variable chaque colonne vide, j'ai fait cela à l'aide d'une boucle sur mon premier sous-total mais ensuite je n'arrive pas à reprendre ma variable pour indiquer le numéro de cellule.

J'espère avoir été clair et que vous pourrez m'aider, merci d'avance

Vinc

11 réponses

Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
20 nov. 2012 à 14:10
J'avoue ne pas tout comprendre ..
Les sous-tototaux se trouve à droite de chaque ligne ou en-dessous d'une colonne ou quelque part dans une colonne ?
Explique avec un dessin ou en montrant ton code et/ou ton classeur, car là, j'ai du mal
0
vincl2216 Messages postés 7 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 22 novembre 2012
20 nov. 2012 à 15:15
Heliotte,

Ci-dessous, un exemple restraint (j'ai supprimé pas mal de colonne et lignes) de mon résultat sous-total

Acquisiteur N°Dossier N°Envoi PoidsBrut CodeVente Montant
NEU 237825 468063 5560 1000 218.67
NEU 237825 468063 5560 10010 14.08
NEU 237825 468063 5560 1003 930
Total 468063 1162.75

Donc à chaque changement de n°envoi, je fais la somme de la colonne montant (en réalité, je fais la somme de multiples colonnes)

Ce que je voudrais c'est reprendre sur chaque ligne de sous-total, l'acquisiteur, le n°de dossier, le poidsbrut, ... en gros, chaque ligne qui reste vierge après mon sous-total.

Le problème c'est que mon classeur à +/- 5000 lignes et que les colonnes vide sont également variable.

Si je fais une condition en disant à chaque ligne de sous-total, si le champ est vide, copie le champ du dessus, c'est très long.

Existe-t-il une méthode rapide pour compléter ces champs ?

Merci

vinc
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 20/11/2012 à 18:36
Bonjour,
Je confirme la demande d' Heliotte, c'est pas clair du tout malgré ton exemple.
Tu pourrais peut-être mettre un exemple de ton classeur (sans donnée confidentielle) sur Cjoint.com ? (ou ailleurs)
A+

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
vincl2216 Messages postés 7 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 22 novembre 2012
21 nov. 2012 à 09:26
Bonjour,

désolé pour la mauvaise explication, ci-joint, un lien pour un extrait de mon classeur.

https://www.cjoint.com/?0KvjxSzQP8v

En module 1, ma macro avec condition "IF", sur le classeur complet, c'est très long.

En module 2, ma tentative pour accélérer le procéder en ne déterminant qu'une fois les colonnes vides.

J'ai mis une feuille dans le classeur avec un début de résultat souhaité en rouge.

Merci de votre aide et de votre patience

vinc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
21 nov. 2012 à 14:48
Bizarre ton truc...
Toutes tes lignes sont doublées et tes "sous-totaux" qui n'en sont pas ne prennent pas de calcul, mais répète juste la valeur d'une des deux lignes.

Dans ta macro tu teste si la cellule est égale à "Total" mais il n'y a aucune cellule comme ça, elles sont toutes avec "Total xxxxxx " où les x sont un nombre.

???
A+
0
vincl2216 Messages postés 7 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 22 novembre 2012
21 nov. 2012 à 16:19
Bonjour,

Pour les lignes doublées, en fait, toutes les données ne sont pas doublées, voir par exemple la colonne montant ainsi que toutes les colonnes à partir de la colonne "O".

Pour les sous-totaux, je fais en premier lieu le sous-total (via la fonction en excel) à chaque changement d'envoi. Je sélectionne ensuite toute ma feuille que je viens coller dans une nouvelle feuille en valeur (d'où le fait que la formule sous-total n'apparait plus)

Dans la macro, je teste la valeur de la cellule "Total" en indiquant que cette valeur ne doit être que les 5 premiers caractère en partant de la gauche de la cellule. Donc pour une cellule " Total xxx", il teste sur les 5 premiers caractères à gauche : "Total"

Vous pouvez faire tourner la macro "complète_via_condition_if", elle marche très bien mais est très longue. cela vous donnera peut-être une meilleure vue de ce que je souhaite obtenir.

Merci

vinc
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
21 nov. 2012 à 19:01
Bonsoir,
1) pourquoi faire des "sous-totaux" sur des colonne tel que "types d'envoi", "m³", "m²", "mètres plancher", "facturé", "date création", "n° dossier", "n° d'envoi", "date enlèvement", "nombre colis", "type colis" et "poids brut" ?
ces "sous-totaux" n'en sont pas et sont totalement inutiles.
2) pour accélérer l'exécution d'une macro (à ne faire qu'à partir du moment où l'on est certain qu'il n'y aura plus de bugs!), il faut ajouter "screen.updating = true/false" à deux endroit de la macro
3) je ferais tourner la macro pour les "sous-totaux" de la colonne "montant" et les colonnes 15 à 24 (O à X)
0
vincl2216 Messages postés 7 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 22 novembre 2012
22 nov. 2012 à 09:18
Bonjour,

1° Je ne souhaite pas faire de sous-totaux sur les colonnes mentionnées mais juste une copie de la valeur qui se trouve sur la ligne au dessus de mon sous-total. Ligne 5 = ligne 4 pour les colonnes 1 à 7 - 9 à 12 et 14.
C'est ce que je fais avec ma condition "IF" mais qui est très long.

2° Pourrais tu m'expliquer le principe de "screen.updating = true/false" ?

Merci
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
22 nov. 2012 à 10:08
Bonjour,
1) Je suis tout à fait contre le fait de recopier les informations .. bêtement pour copier, car la redondance gratuite d'informations .. ben, on est sensé la supprimer ==> donc, si tu veux continuer à faire des copies de données, libre à toi, mais ne vient pas te plaindre que cela dure et dure encore (ça c'est fait)
2) le principe de "screen.updating", c'est que l'écran se fige pendant le temps d'exécution de la macro et à la fin de son exécution, tu libère l'écran. Car c'est l'affichage à l'écran de divers informations (en ce compris le 'scrollage' (défilement)) qui pompe énormément de temps.
Pour cette raison, on évite d'afficher des informations non utile que, de toute façon, tu n'as pas le temps de visualiser correctement (en règle générale).
0
vincl2216 Messages postés 7 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 22 novembre 2012
22 nov. 2012 à 12:03
Heliotte,

1) je copie car au final, je ne souhaiterais garder que les lignes "sous-total" mais chaque champ est important pour moi, c'est pourquoi je souhaite copier et chercher une solution pour gagner un peu de temps. En évitant par exemple de passer à chaque fois sur chaque ligne pour controler qu'elle soit vide mais en ne cherchant qu'une fois les vide et applique le copier coller à chaque sous-total
2) Merci beaucoup pour l'info, je vais l'inclure dans la macro car en effet, je n'ai pas besoin de voir le défilement à l'écran

merci

vinc
0
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 7 244
Modifié par eriiic le 22/11/2012 à 12:26
Bonjour,

1) je copie car au final, je ne souhaiterais garder que les lignes "sous-total"
Et pourquoi ne pas le dire directement ???
Trop tard...

Ci-joint un code qui fait passer de 20s à 5s, et un second qui fait passer à 0.5s.

Je dois partir, je te laisse modifier pour ne mettre que la ligne qui t'intéresse.
Une fois complétée dans la boucle il suffit de la coller en dernière ligne dans une feuille dédiée

https://www.cjoint.com/?BKwmr0dF3oO
eric

PS: j'ai oublié le ScreenUpdating = False dans le 2nd code, rajoute le

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
vincl2216 Messages postés 7 Date d'inscription mardi 20 novembre 2012 Statut Membre Dernière intervention 22 novembre 2012
22 nov. 2012 à 17:15
Bonjour,

Merci beaucoup pour votre patience, c'est tout à fait le code dont j'avais besoin.

vinc
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
22 nov. 2012 à 23:42
Je rappel: "screenUpdating = false" UNIQUEMENT quand on est certain de ne plus avoir de bug !
Sinon, t'es partis pour des heures d'amusement :)
0