Copier coller (sup ligne)

Bonjour,

j'ai 40 onglets de données et un onglet de récap.

Les onglets de données sont tous formatés pareil (dans l'exemple de C9 à C20)

Je souhaite dans le récap les valeurs des onglets à la suite sans espace. (onglet résultat)

Power query, bouton Macro ??

Ptite idée ?

Merci les amis !

Phil

6copier-coller.xlsx (15.12 Ko)

Bonjour.

Les résultats sont ils impérativement inscrits dans le même champ ou peuvent ils être disposés ailleurs?

Cordialement.

Bonjour Phil, le forum,

je te retourne ton fichier modifié :

17copier-coller.xlsm (21.76 Ko)

Ctrl e ➯ travail effectué !

* tu peux faire Ctrl e depuis n'importe quelle feuille

* inutile d'effacer les précédents résultats : c'est fait automatiquement


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour.

Les résultats sont ils impérativement inscrits dans le même champ ou peuvent ils être disposés ailleurs?

Cordialement.

Bonjour, ils peuvent etres disposé ailleurs...

Vu.

Mais quelqu'un a été plus rapide que moi.

Bravo.

Bonjour Phil, le forum,

je te retourne ton fichier modifié :

Copier coller.xlsm

Ctrl e ➯ travail effectué !

* tu peux faire Ctrl e depuis n'importe quelle feuille

* inutile d'effacer les précédents résultats : c'est fait automatiquement


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Merci Dhany,

peux tu me mettre des commentaires d'explication avant tes lignes de code afin que je l'adapte à mon classeur définitif stp ?

Merci d'avance

Phil

ok, je vais te préparer ça ; mais patiente un bon moment car c'est un peu long à faire.

dhany

@Phil

[quote="dans ton post de 09:55, tu"]peux-tu me mettre des commentaires d'explication avant tes lignes de code afin que je l'adapte à mon classeur définitif stp ?[/quote]

j'ai préféré faire une description du code ici, car ça n'aurait pas été pratique de mettre dans le code VBA tout ce qui est ci-dessous.


Dim shd As Worksheet, sh%, lm&, lg1&, lg2&, n& : déclaration des variables

Dim sh% : idem que Dim sh As Integer ; Dim lm& : idem que Dim lm As Long

Application.ScreenUpdating = 0 : évite la mise à jour de l'écran ➯ exécution plus rapide

lm = Rows.Count : ligne maxi : 65536 avant Excel 2007, puis 1 048 576

lg2 = 9 : sur la feuille "Resultat", on écrira les résultats à partir de la ligne 9

Set shd = Worksheets("Resultat") : shd référence la feuille "Resultat"

shd.Cells.Clear : on efface toutes les cellules de la feuille "Resultat" : c'est cette instruction

qui t'évite de devoir effacer les anciens résultats avant de lancer la macro.

Worksheets.Count : c'est le nombre de feuilles du classeur, ici 4

For sh = 1 To Worksheets.Count .. Next sh : pour toutes les feuilles du classeur,

car sh est le n° d'index de la feuille : de 1 à Worksheets.Count : de 1 à 4

With Worksheets(sh) .. End With : avec la feuille d'index sh

If .Name <> "Resultat" Then : on lira les données de toutes les feuilles, SAUF la feuille "Resultat" ;

ça fait que ça marchera quelle que soit la position de la feuille "Resultat", même si tu la déplace vers

la gauche : en 1ère position ou au milieu ; et ça marchera aussi si tu ajoutes plus de feuilles "donnees".

lg1 = .Cells(lm, 3).End(3).Row : idem que lg1 = .Cells(lm, "C").End(xlUp).Row

ça retourne donc le de la dernière ligne utilisée en colonne C, sur la feuille Worksheets(sh) ;

pour la 1ère feuille "donnees 1", lg1 = 11

If lg1 > 8 Then .. End If : faire la suite seulement si lg1 vaut au moins 9, sinon,

ça veut dire qu'il n'y a pas de données qui commence en ligne 9 du cadre C9:G20

n = lg1 - 8 : n contient le nombre de lignes utilisées de C9:G20 ;

pour la 1ère feuille "donnees 1", n = lg1 - 8 = 11 - 8 = 3

.[C9].Resize(n, 5).Copy : sur la feuille de sh, car ça dépend toujours du With ; cellule C9 ;

redimensionné à 3 lignes et 5 colonnes ➯ on copie la plage C9:G11

shd.Cells(lg2, 5).PasteSpecial -4163 : on colle la plage en valeurs en feuille shd,

cellule de la ligne lg2, colonne E ; -4163 : idem que xlPasteValues

lg2 = lg2 + n : lg2 = 9 + 3 = 12 ➯ le prochain coller se fera en ligne 12

dernières instructions, en sortie de boucle, car après Next sh :

Application.CutCopyMode = 0 : enlève le cadre de tirets défilants (celui d'une zone copiée)

shd.Select : va sur la feuille "Resultat" ; [A1].Select : va en A1


j'espère que cette explication de code te conviendra, même si elle est longue.

dhany

@Phil

pas de retour sur mon explication de code ?

merci quand même d'avoir passé le sujet en résolu.

dhany

Merci beaucoup,

je vais regarder celà et reviens vers toi si je ne comprends pas ou si j'ai d'autres interrogations .

Phil

Dhany,

sur quelle ligne de code je peux dire d'aller chercher plus loin dans les colonnes de droite (données) ?

Comment puis je faire , si des lignes sont vides, de supprimer les lignes vides dans le résultat ?

Merci beaucoup

Phil

* avec : .[C9].Resize(n, 5).Copy : copie de C9:G11 ; pour 3 colonnes de plus, donc de C à J : .[C9].Resize(n, 8).Copy

* ne t'occupe pas des lignes vides, car avec lg1 = .Cells(lm, 3).End(3).Row, ça les prend pas en compte !

dhany

Bonjour Dhany et merci.

Concernant la suppression des lignes vides, je parle des lignes vides qui s’affichent dans le résultat.

Actuellement quand il y a des lignes vides dans les données, elles se recopient sur le résultats sans se supprimer.

En fait, je ne souhaite aucune ligne vide dans le résultat.

Merci d'avance

Phil

Bonjour Phil,

j'ai lu ton post ; je vais voir si je trouve une solution.

dhany

essaye ce nouveau fichier :

63copier-coller.xlsm (21.99 Ko)

dhany

? Ca ne fonctionne pas...

ça ne me copie pas les lignes... voir PJ.

Phil

autre version :

dhany

Merci Dhany,

ça fonctionne,

un bon we !

Phil

merci pour ton retour, et pour avoir passé le sujet en résolu !

bonne continuation, et bon weekend à toi aussi !

dhany

Rechercher des sujets similaires à "copier coller sup ligne"