VBA copie plusieurs colonnes continues et discontinues longueur variable

bonjour a tous

je galère un peu avec les copies de colonnes discontinues

je cherche a copier les données des colonnes de la feuil d’origine [ f , ijk , n , krs ] de la ligne 2 a la dernière ligne rempli en J feuil d’origine

vers une feuille destination après vérification d'une date. Copie dans les colonnes [ f , ijk , n , krs ] de la feuil de destination mais a partir de la 1 ere ligne vide de la colonne J de la feuil destination

ps : collage spéciale valeurs (justes les valeurs )

voici mon début de code

Sub copie()
Dim Fin
Dim DLig As Long

' copie plusieurs colonne continue et discontinue   longueur variable

'  derniere ligne a copier en F06
'  DLig = F06.Range("i" & Rows.Count).End(xlDown).Row

 F06.Range("f2:f" & F06.Range("i2").End(xlDown).Row).copy

F08.Select
Fin = Range("J65000").End(xlUp).Row + 1    'je cherche sur la colonne de J

' verifie si conditions date ok pour copie en  f08
If Range("A" & Fin) = F06.[a2] Then

  MsgBox ("ok")
  Range("j" & Fin).Select 'recherche la première cellule vide'

  Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats 'collage special valeur
  Application.CutCopyMode = False
 Else

  MsgBox ("Les dates d'extractions et les dates de la base de données ne correpondent pas")
  End

End If

End Sub

Bonjour,

Je ne sais pas si ça va marcher mais l'idée est là je crois :

F06.Range("F2, I2:K2, N2, Q2:S2").Copy

F08.range("j" & Fin).PasteSpecial ...

ou F08.range("j" & Fin & ":q" & Fin).PasteSpecial ... '8 cellules copiées donc la zone de destination contient 8 cellules

Il y a en plus peut-être la possibilité de factoriser la sélection copiée sur F06 .

Merci pour ta proposition 3 gb , j'ai trouvé la même chose entre temps mais dorénavant j'ai un souci pour le collage

après une petite pause , je suis retourné sur mon code ( et j'ai fait quelques corrections )

je copie bien les données avec ce code

F06.Range("f2:f" & DLig & ",i2:k" & DLig & ",n2:n" & DLig & ",q2:s" & DLig).copy

mais pour le collage c’est une autre affaire ( toutes les colonnes sont regroupées sur la feuille de destination )

il y a peut être d'autres façon de procéder que la copie ( pour le même résultat )

 Sub copie()
Dim Fin
Dim DLig As Long

' copie plusieurs colonne continue et discontinue   longueur variable

'  derniere ligne a copier en F06

 DLig = Range("J65000").End(xlUp).Row

 F06.Range("f2:f" & DLig & ",i2:k" & DLig & ",n2:n" & DLig & ",q2:s" & DLig).copy

F08.Select
Fin = Range("J65000").End(xlUp).Row + 1    'je cherche sur la colonne de J

' verifie si conditions date ok pour copie en  f08
If Range("A" & Fin) = F06.[a2] Then

  MsgBox ("ok")
  Range("f" & Fin).Select 'recherche la première cellule vide'

  Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats 'collage special valeur
  Application.CutCopyMode = False
 Else

  MsgBox ("Les dates d'extractions et les dates de la base de données ne correpondent pas")
  End

End If

End Sub

Ah, vous souhaitez que le collage respecte la discontinuité ?

Et j'imagine qu'il n'est pas possible de copier de F à S puis de supprimer le contenu des colonnes indésirables ?

Là, je ne vois qu'une option, c'est :

For k = 1 to 14
    select case k
    case 1, 4 to 6, 9, 12 to 14
        F06.range(cells(2, 5 + k), cells(Dlig, 5 + k)).copy 'prend la colonne 5+k des lignes 2 à Dlig
        F08.range(cells(fin, 9 + k), cells(fin + Dlig - 1, 9 + k).pastespecial 'colle dans colonnes 9+k sur lignes Fin à Fin + Dlig -1
    end select
next k

Peut-être qu'il y aura un problème au niveau de la syntaxe du select case mais sur le principe, ça me semble correct, bien que ce ne soit pas la solution la plus attirante...

oui on respect la discontinuité sinon c'est pas marrant

Et j'imagine qu'il n'est pas possible de copier de F à S puis de supprimer le contenu des colonnes indésirables ? et non pas possible car il y a deja des données

je regarde je vous redis

et Merci de votre aide

Je vous en prie.

Oui, c'est pas marrant...

Et pas moyen de déplacer les colonnes de manière à ce qu'elles constituent une plage continue ? Je pose la question mais je connais déjà la réponse.

A bientôt,

Au fait, au cas où, pour éviter de voir toutes les actions à l'écran, il faut ajouter Application.Screenupdating de part et d'autre de la boucle :

Application.Screeupdating = False

La Boucle de copier/coller

Application.Screeupdating = True

j'obtiens un code erreur 1004 " méthode range de l'objet worrksheet a échoué

For k = 1 To 14
    Select Case k
    Case 1, 4 To 6, 9, 12 To 14
        F06.Range(Cells(2, 5 + k), Cells(DLig, 5 + k)).copy 'prend la colonne 5+k des lignes 2 à Dlig
        F08.Range(Cells(Fin, 9 + k), Cells(Fin + DLig - 1, 9 + k)).Paste
        'colle dans colonnes 9+k sur lignes Fin à Fin + Dlig -1
    End Select
 Next k

ligne surligner en jaune ... dans le projet vba & ajout de ")" sur cette même ligne

F08.Range(Cells(Fin, 9 + k), Cells(Fin + DLig - 1, 9 + k)).Paste

Bonjour à tous,

Essai ainsi ... car je crois que "Paste" ne peut coller sur une feuille non-active ...

 For k = 1 To 14
    Select Case k
    Case 1, 4 To 6, 9, 12 To 14
        'prend la colonne 5+k des lignes 2 à Dlig ... puis, colle dans colonnes 9+k sur lignes Fin
        F06.Range(Cells(2, 5 + k), Cells(DLig, 5 + k)).Copy F08.Cells(Fin, 9 + k)
    End Select
 Next k

ric

oui cela fonctionne , nickel

Merci a vous 2 , Ric et 3Gb

j'adapte a mon fichier final et je valide la réponse

Bonjour ric,

Je n'ai pas vérifié mais je crois tu as raison pour Paste.

En tout cas, j'ai appris une nouvelle syntaxe, plus efficace, grâce à ton intervention !

foufie,

Je suis content que ça marche.

Bonne continuation,

Re foufie, ric,

Je viens de repenser au fait que le code demandé était censé copier valeurs et formats, sans les formules.

A moins que le code de ric - qui n'a probablement pas fait attention à cette contrainte - ne fonctionne, ce dont je doute, il vaudrait mieux garder ce code :

For k = 1 to 14
    select case k
    case 1, 4 to 6, 9, 12 to 14
        F06.range(cells(2, 5 + k), cells(Dlig, 5 + k)).copy 'prend la colonne 5+k des lignes 2 à Dlig
        'F08.activate à rendre opérationnel si nécessaire
        F08.range(cells(fin, 9 + k), cells(fin + Dlig - 1, 9 + k).PasteSpecial Paste:=xlPasteValues 'colle valeurs
        F08.range(cells(fin, 9 + k), cells(fin + Dlig - 1, 9 + k).PasteSpecial Paste:=xlPasteFormats 'colle formats
'dans colonnes 9+k sur lignes Fin à Fin + Dlig -1
    end select
next k

Bonne soirée à tous les 2,

Bonjour à tous,

@3GB >> effectivement > j'ai oublié cette contrainte > désolé >

Merci d'avoir fourni un code adapté >

ric

bonjour a vous

( zut j'ai pas eu la notification comme quoi il y a avait de nouveaux message ,, cela m'aurais été utile ... )

un peu de lecture ......

en effet sur le fichier test cela fonctionne , donc j’adapte sur mon fichier final cela " semble " fonctionné du coup je valide la reponse de Ric et je passe a autre chose

SAUF
que lorsque je lance la macro final le lendemain ( cela fonctionne mais cela semble écrasé les données au fur et a mesure par les nouvelles données du dernier cycle )

Mais pourquoi !!!!!! ???????? j'ai du mal adapter le code ( je test ( et je vide les variables , je change le nom des variables ,je contrôle les variables en cours de procédure ..... je vide le presse papier ect .... )

Non ca veux pas , ça fonctionne 1 fois et la fois suivante mes données sont écrasées par les nouvelles

pour la x imie fois je lance la macro et je la stop en cours de route ....

dans mon programme pour un souci de gain de tps je passe en mode manuel pour les calculs "" Application.Calculation = xlCalculationManual "

et la je repasse en mode automatique et je vois les données qui change sous mes yeux

oui parmi les colonnes a copier il y a des formules qui font reference a des cellules

je copie la formule et non le resultats c'est pourquoi a chaque nouveau cycle mes données final étaient modifiés

et me voici a nouveau ici et je vois le correctif de 3gb

F08.range(cells(fin, 9 + k), cells(fin + Dlig - 1, 9 + k)).PasteSpecial Paste:=xlPasteFormats 'colle formats

et on referme pas la parenthèse ?

deja dans le code precedent 3GB il manquait une " ) " la touche doit etre hs mdr

1 er essai echec

methode paste ....

second essai on active les feuilles à la copie et au collage

 F06.Activate
        F06.Range(Cells(2, 1 + k), Cells(DLig, 1 + k)).Copy

 F08.Activate

        F08.Range(Cells(Fin, 1 + k), Cells(Fin + DLig - 1, 1 + k)).PasteSpecial Paste:=xlPasteValues

et cool c'est bon ca fonctionne BRAVO et MERCI a vous 2 !!!!

3GB et RIC

Bonjour foufie,

Désolé, je saisis directement sur le forum donc je n'ai pas la machine qui m'avertit lorsque je fais une faut de frappe... L'essentiel étant à mes yeux de régler le problème de fond.

En tout cas, je suis content pour toi que tout marche maintenant.

Bonne journée,

Rechercher des sujets similaires à "vba copie colonnes continues discontinues longueur variable"