Fusion de lignes

Bonjour claude

Quand tu as réalisé la manip indiquée précédemment, toutes tes images sont sélectionnées.

Appuie-donc sur la touche Effacement

Cordialement

re,

Hé oui, évidemment, bien sur !!

Edition/Atteindre : encore un coin que je ne connaissais pas.

D'ailleurs, je me demande s'il existe quelqu'un qui connaisse toutes les possibilités d'Excel.

merci Amadéus

amicalement

Claude.

Bonsoir tout le monde,

Truc de dingue comme ce problème vous a tous inspirés, j'ai jamais vu un forum aussi solidaire pour un si petit soucis, et surtout envers un nouvel inscrit. Merci vraiment.

Merci aussi à felix pour sa participation.

Conclusion : Macro de dubois fonctionne indépendamment du nombre de colonnes, macro de dan fonctionne de manière dépendante du nombre de colonnes, macro de amadeus ne fonctionne pas sur neoffice calc tout comme celle de felix (pas testé sur 2003).

Pour les images invisibles, aucune idée d'où ça sort je ne sais même pas ce que c'est ni qu'il y en avait, peut être que de jongler de 2003 à NeoOffice Calc a grand renfort de copier coller et de bidouille de macro a causé cela.

Vince qui vous remercie tous.

Bonsoir,

Comme te le précise Amadéus, son code met environ 30 secondes

Celui de Dan, entre 10 et 11 secondes

Le mien, entre 1 et 2 secondes

A toi de choisir

Edit, c'était pas précisé, l'utilisation de NeoCalc....(Ravi de de l'apprendre dans l'Edition de ton dernier message)

re,

Vincent, attends, Mytå n'est pas encore passé par là !

Claude.

Claude :

Vincent, attends, Mytå n'est pas encore passé par là !

Un pari?

Bonsoir l'équipe

Comme te le précise Amadéus, son code met environ 30 secondes

Celui de Dan, entre 10 et 11 secondes

Le mien, entre 1 et 2 secondes

Forcément, quand on bosse avec de vieux outils...

Bonne soirée à tous

Bonjour,

Myta n'est pas passé...

Pari de Felix avec la découverte d'Amadeus (les objets ! incroyable cela) ...

Le code de Félix avec la déclaration des variables et l'utilisation de l'instructions Range en lieu et place des crochets []. On doit encore gagner du temps

Sub Fusion()
Dim cel As Range
Dim mondico As Object
Dim b
Dim X As Integer, i As Integer
Dim dd As Byte
Application.ScreenUpdating = False
Range("A1:Q" & Range("A65536").End(xlUp).Row).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess
Set mondico = CreateObject("Scripting.Dictionary")
For Each cel In Range("A2:A" & Range("A65536").End(xlUp).Row)
     If Not mondico.Exists(cel.Value) Then mondico.Add cel.Value, cel.Address
Next cel
b = mondico.items
For i = UBound(b) To LBound(b) Step -1
    X = Application.CountIf(Range("A:A"), Range(b(i)).Value)
    If X > 1 Then
        Range(b(i)).Resize(X, 1).Name = "Noms"
        For Each cel In Range("Noms")
            dd = cel.End(xlToRight).Column
            Range(b(i)).Offset(0, dd - 1).Value = Cells(cel.Row, dd).Value
        Next cel
        Range(b(i)).Offset(1, 0).Resize(X - 1, 1).EntireRow.Delete
       End If
Next i
End Sub

Bonne journée

Amicalement

Dan

Bonjour,

Ah ben déjà que la macro de felix était rapide, maintenant que tu l'as encore ecrémée ...

Qui est Myrta? Il/elle va débarquer et nous pondre la même macro mais en une ligne et qui résoudrait les problèmes de faim et de guerre dans le monde?

Amicalement,

Vince

re,

Ah ben déjà que la macro de felix était rapide, maintenant que tu l'as encore ecrémée ...

Ecremée.... pas vraiment mais en déclarant les variables, on peut mieux utiliser la mémoire allouée pour l'exécution et par conséquent améliorer aussi la rapidité.

La macro donnée par Felix utilise une instruction "Scripting Dictionary" qui mémorise un tableau de données puis utilise uniquement ces données pour effectuer le travail demandé. C'est ce qui te permet d'aller plus vite.

Il faut savoir que cette instruction ne fonctionnera pas dans toutes les versions d'excel.

Dans ce cas, tu peux reprendre la macro que j'ai proposée ou celle d'Amadeus, plus longue toutefois.

Qui est Myrta ?

Un modérateur du forum, très grand connaisseur d'excel. Vois au-dessus de cette fenêtre ou fais une recherche sur le nom Mytå.

Attention à la ponctuation... le petit ° au dessus du A.

Amicalement

Dan

Bonjour à tous, les VBistes.

Jamais, un post "résolu" n'a eu autant de réponses !

Et ma petite macro de débutant, on en parle jamais !!

  • pour ma gouverne, quel est son principal défaut ?
  • à part le style d'écriture, n'est-elle pas lisible et fonctionnelle ?

Je cherche à m'améliorer.

amicalement

Claude

édit: merci Dan, je prends note

Re,

Dubois, on ne va parler de défaut dans cette macro puisqu'elle fonctionne mais plutôt de méthode d'approche.

Dans cette macro :

  • des noms sont attribués aux cellules pour le repérage, d'où plus lourd à gérer.
  • l'utilisation des Select est à éviter. Cela ralentit le code.
  • Le Goto est à éviter. Ici tu n'en as qu'un seul mais c'est souvent la meilleure manière de se perdre dans un code.
  • Les crochets, je te l'avais déjà dit.... cela ralentit le code aussi.

Attention à la variable Bip qui n'est pas déclarée (ici Byte)

Le code fait appel à trop de boucles (à mon avis); ce qui provoque un plus long traitement et le rend moins facile à lire. Toutefois, il pourrait peut être servir aussi pour d'anciennes versions d'excel.

En résumé, je vois dans ce fil, 4 approches différentes toutes intéressantes à analyser si l'on part en premier de la proposition d'Amadeus (macro XL4).

Fil donc à conserver pour celui qui veut comprendre et analyser différents codes donnant tous le même résultat au final.

Voili voilou

Amicalement

Dan

Bonsoir,

juste pour dire qu'entre la macro de Dan (1,15625 seconde), et la mienne (1,15625 seconde), je ne vois pas trop de différence....

PS, pour mesurer le temps d'exécution, il suffit de rajouter :

Sub Fusioni()
t= Timer
....
.....
le code
....
....
MsgBox Timer - t
End Sub

re,

Felix, j en suis pas sur que tes données de temps soient correctes

J'obtiens : 7,9 sec avec ma macro et 0.5 sec avec la tienne.

macro de Dubois. Je n'ai pas pu tester. Le timer ne semble pas fonctionner.

Cela me parait plus logique vu les codes utilisés.

Tu vérifies ?

Amicalement

Dan

Re,

Salut Dan

Ben, comme quoi, le Mac tourne plus vite....

Avec ton code initial, j'avais plus de 10 secondes, et toi, moins de 8 secondes...

Impressionnant

Et avec mon code, les résultats que j'ai affiché, soit plus d'une seconde, et avec ton MAC, une demi-seconde......

Vais peut-être revoir ma position, sur les MAC

Merci pour les comparaisons

PS, l'avantage de mon code, c'est qu'une grande partie du travail s'effectue en mémoire centrale, grâce à l'utilisation du Dictionary, et le temps de travail en mémoire est en gros 1000 fois plus rapide que le travail sur des cellules.

Bonne soirée

Salut Felix,

Non là les temps que j'ai donnés ont été réalisés sur plateform PC mais en Terminal Serveur. En gros, le disque dur se trouve sur un serveur et non sur une tour comme chez toi.

J'avais testé mon code sur MAC mais là c'est nettement plus long. Normal puisque l'on fait appel au processeur Motorola Power PC qui n'est pas prévu pour faire ce genre de calcul amis plutôt orienté graphisme, photo et multimédia.

Le tiens n'est pas testable sur Excel 2004 pour MAC car la fonction "Scirpting dictionanry" fait partie des actives X qui comme tu le sais certainement n'est pas disponible sur MAC puisque l'approche est différente.

Reste à tester mon code sur MAC Intel. Ce que je ferai Lundi prochain au boulot.

A bientôt

Dan

Re,

Effectivement, cela intéressant, ces essais, ainsi, on pourrait adapter nos réponses, selon l'OS et la platerorme...

Mais, je suis quand même impressionné, par la différence de temps, que cela soit sur un PC, ou sur un Serveur...

Merci pour ces précisions

Rechercher des sujets similaires à "fusion lignes"