[RESOLU] Macro Excel - Copier/Collage spécial de lignes sur une autre feuile

Pascal_New

XLDnaute Nouveau
Bonjour le Forum, Bonjour aux Gentils Administrateurs du site,

J'ai pompé une macro qui me plait bien MAIS qui "Copie / Colle" des lignes d'une feuille vers une autre feuille alors que je voudrais qu'elle "Copie / Collage Spécial [Valeurs]"...

Voilà le code :

Sub test()

For Each cel In Sheets("Feuil1").Range("D1:D" & Sheets("Feuil1").Range("D65536").End(xlUp).Row)
If UCase(cel) <> 0 Then
Sheets("Feuil1").Range("a" & cel.Row & ":z" & cel.Row).Copy _
Sheets("Feuil2").Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1)
End If
Next
End Sub



Merci par avance pour votre aide !!!!

Pascal
 
Dernière édition:
G

Guest

Guest
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

BONJOUR,

TU CRIES TROP FORT POUR MES OREILLES!!!
Lien supprimé

a++++
[edit] la nouvelle charte n'en fait pas mention mais utiliser les majuscules sur internet, c'est comme CRIER.
 
Dernière modification par un modérateur:

Jeff7087

XLDnaute Nouveau
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Bonjour
Sauf contradiction, et alors cela m'intéresse énormement, l'utilisation de cette syntaxe ne permet pas de faire un collage spécial. Ce raccourci ne fait qu'un Copier/Coller; l'avantage étant d'éviter de sélectionner la destination.
Pour un collage spécial, il faut détailler la manipulation :
-Sélectionner la source
-Copy
-Sélectionner la destination
-Collage spécial à ce moment.
Bon courage.
 

vgendron

XLDnaute Barbatruc
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Salut,
sans etre un killer du code qui fait tout à ta place.. suffit de lancer l'enregistreur de macro pour voir que le copie collage special ca donne ca:

Code:
   Range("A1:A9").Select
    Selection.Copy
    Sheets("Feuil2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

soit dit en passant: le bout de code que tu as posté.. ne colle rien du tout..??
mais bon. vu que j'ai pas ton fichier, c'est sans doute normal
 

Pascal_New

XLDnaute Nouveau
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Bonjour et merci Jeff de t'être arrêté sur mon message. Je ne sais pas pour toi mais moi je ne connais pas les macros donc compte tenu de tes remarques, je ne suis hélas pas capable de corriger ce que j'ai présenté. Si tu as une version corrigée de ce que je t'ai envoyé, tant mieux pour moi sinon c'est pas grave, merci en tout cas.

Bonne journée,

Pascal
 

Legolas

XLDnaute Occasionnel
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Bonjour,

Sans faire de copier/coller, je peux te proposer de passer par un tableau virtuel.

VB:
sub test()

Dim tab(0 to 5000, 0 to 30) 'Ne fonctionne que pour 5000 lignes et 30 colonnes, à adapter si plus
Dim x, y, j as integer

x= 0
For Each cel In Sheets("Feuil1").Range("D1:D" & Sheets("Feuil1").Range("D65536").End(xlUp).Row)
If UCase(cel) <> 0 Then
y=0
for j = 1 to 26
tab(x,y)=cells(cel.row, cel.column).value
y=y+1
next j
x=x+1
end if
next

Sheets("Feuil2").Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1).resize(x, 26) = tab

end sub

Sans pouvoir tester, c'est difficile de savoir si ça va marcher du premier coup ^^

A+
 

Pascal_New

XLDnaute Nouveau
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Bonjour Vgendron !

Merci beaucoup pour ton message, je vais essayer ça immédiatement. Dans le code que j'avais donné, il y avait un passage qui disait que seules les lignes dont les valeurs de la colonnes D étaient <>0 étaient à copier / coller... C'est toujours le cas avec ta formule (je n'en ai pas l'impression mais je peux me tromper...).

Cdt,

Pascal
 

Pascal_New

XLDnaute Nouveau
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Houlàààà ! ca sent la compèt ! terrible le code ! j'essaye tout de suite et j'envoie le fichier après.

Je reviens vers toi dans 15 mn max !

merci

pascal
 

Efgé

XLDnaute Barbatruc
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Bonjour Pascal_New, Jeff7087, vgendron, Legolas, Bonjour Hasco :) ,
Sans être spécialement ... etc....

VB:
Sub test_X()
For Each cel In Sheets("Feuil1").Range("D1:D" & Sheets("Feuil1").Range("D65536").End(xlUp).Row)
    If UCase(cel) < > 0 Then
        Sheets("Feuil2").Range("A65536").End(xlUp).Offset(1, 0).Resize(1, 26).Value = _
        Sheets("Feuil1").Range("a" & cel.Row & ":z" & cel.Row).Value
    End If
Next
End Sub

Sans violence et sans armes.

Cordialement
 

Jeff7087

XLDnaute Nouveau
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

C'est pas forcément joli, ni très rapide, mais ca fonctionne. (Bien sur a adapter à ton environnement)
Dim Cel As Range
Sub test()
For Each Cel In Sheets("Feuil1").Range("D1:D" & Sheets("Feuil1").Range("D65536").End(xlUp).Row)
If UCase(Cel) <> 0 Then
Sheets("Feuil1").Select
Cel.Copy
Sheets("Feuil2").Select
Sheets("Feuil2").Range("A" & Sheets("Feuil2").Range("A65536").End(xlUp).Row + 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
Next
End Sub
Pour des onglets beaucoup plus chargés, il faut mieux passer par des tableaux (voir ex de Legolas).
Cdlt
 

Efgé

XLDnaute Barbatruc
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Re

Si non entièrement par tableau
VB:
Sub Test_Tableau()
Dim T As Variant, i&, J&, K&

With Sheets("Feuil1")
    T = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(3).Offset(, 26))
End With

For i = LBound(T, 1) To UBound(T, 1)
    If T(i, 4) < > 0 Then
        K = K + 1
        For J = LBound(T, 2) To UBound(T, 2)
            T(K, J) = T(i, J)
        Next J
    End If
Next i

Sheets("Feuil2").Cells(1, 1).Resize(K, UBound(T, 2)) = T
    
End Sub
Cordialement
 

Misange

XLDnaute Barbatruc
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Bonjour

Non ça ne sent pas la compèt. Ce n'est pas l'esprit de ce forum. Peux tu éditer ton message pour mettre un titre parlant qui permette de savoir quelle est la question au lieu d'alpaguer la foule comme si on avait besoin d'être mis au défi de je ne sais quoi pour proposer une réponse pour AIDER le demandeur.
Lis la charte, elle est claire et concise. Tu verras que le fait d'écrire en majuscule, et plus encore si tu émailles ton message de multiples signes de ponctuation, revient à crier.
Si tu avais pris le temps de lire le message qui apparait quand on pose une nouvelle question tu aurais vu qu'il est recommandé de joindre un petit classeur exemple. Il est surtout indispensable de dire ce que tu veux faire. Ici tu nous donnes un code dont tu nous dit qu'il ne fait pas ce que tu veux mais sans nous dire quel est ton but.


La proposition de Efgé, même si on ne peut pas la tester sur les données réelles... est bien plus efficace. Cependant, il me semble que if cel<>0 suffit :
if ucase(cel) <>O : ucase met le contenu de cel en majuscule. Mettre un nombre en majuscule n'a aucun sens. Si tu veux tester si cell n'est pas vide c'est if cell<>""

Pour Jeff : il est toujours préférable de ne pas sélectionner les feuilles en VBA. L'enregistreur de macros le fait, mais c'est une excellente façon de ralentir le code.
 

Pascal_New

XLDnaute Nouveau
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Bonjour Efgé ! Bon bah là, j'ai mon champion... c'est top ! ça marche impeccable ! Un Grand Grand MERCI pour ton aide !
Je vais quand même envoyer un message aux autres personnes pour les remercier.

Oserai-je te demander une faveur supplémentaire ? :
Sais-tu ce que je dois intégrer ou modifier dans le code pour qu'il comprenne que "la plage de ligne à prendre en compte commence depuis la cellule de la colonne A qui comprend le mot "début" jusqu'à la cellule de la colonne A qui comprend le mot "Fin"

et la dernière chose c'est : pour que les lignes se collent dans la feuille2 à partir de la ligne 12, tu peux me faire la variante stp ?

Merci d'avance.

Pascal
 

Jeff7087

XLDnaute Nouveau
Re : Macro Excel - JE RECHERCHE UNE BÊTE DE LA MACRO EXCEL !!! UN VRAI KILLER DU CODE

Bonjour Misange
Je suis tout à fait d'accord qu'il faut éviter de sélectionner les feuilles, mais il me semble que Pascal n'est pas un ferru en VBA, et le faire démarrer directement en passant par des tableaux n'est pas forcément une bonne approche. Mais ce n'est que mon avis.
Cdlt
 

Discussions similaires

Réponses
2
Affichages
147

Statistiques des forums

Discussions
312 203
Messages
2 086 184
Membres
103 152
dernier inscrit
Karibu