[Résolu] Copier un range avec double contrainte

bambi

XLDnaute Occasionnel
Bonjour à tous ;)

Je cherche à copier un range avec une double contrainte.
Et c'est bien à cause de cette double contrainte que je ne trouve pas la solution :p
Un exemple étant plus parlant qu'une longue explication, voici mon fichier.

Merci d'avance de vos idées.
 

Pièces jointes

  • Classeur1.xlsm
    11.9 KB · Affichages: 60
  • Classeur1.xlsm
    11.9 KB · Affichages: 63
  • Classeur1.xlsm
    11.9 KB · Affichages: 63
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Copier un range avec double contrainte

Bonjour

A adapter et essayer:

Code:
Sub  bambi()
Dim i As Integer, x As Integer, Deb As Integer, Fin As Integer
Deb = 2   'N° ligne de début de Tableau à copier
Fin = 7   'N° ligne de fin de Tableau à copier
x = 25    'N° ligne de début de copie
For i = Deb To Fin
    If Cells(i, 4) <> "" Or Cells(i, 5) <> "" Then
        Range("B" & i & ":G" & i).Copy Range("B" & x)
        x = x + 1
    ElseIf Cells(i, 3) = "TEMPS" Or Cells(i, 3) = "HEURE" Then
        Range("B" & i & ":G" & i).Copy Range("B" & x)
        x = x + 1
    End If
Next

End Sub

Bonne suite
 

bambi

XLDnaute Occasionnel
Re : Copier un range avec double contrainte

Bonjour Paf

Merci pour ta réponse
Mais je ne vois pas bien comment l'adapter à ma feuille sachant que je ne peux pas du tout modifier les lignes
Car dans le modèle original, ce tableau est au milieu d'une feuille contenant beaucoup d'autres données

J'ai travaillé sur mon fichier initial et j'ai essayé de détourner le problème en passant par une feuille "brouillon"
J'ai notamment utilisé l'enregistreur de macro donc mon code n'est pas forcément très "propre"

L'idée est copier le tableau de la feuil1 sur une feuille Brouillon, couper les lignes vides, recoller le tableau dans la feuil1
Mais mon VBA de suppression de lignes ne fonctionne pas

J'en ai essayé plusieurs pris ici même mais une fois inséré dans ma macro, il ne marche pas

Si vous avez une idée, merci d'avance
 

Pièces jointes

  • Classeur1.xlsm
    17.9 KB · Affichages: 38
  • Classeur1.xlsm
    17.9 KB · Affichages: 51
  • Classeur1.xlsm
    17.9 KB · Affichages: 51

Paf

XLDnaute Barbatruc
Re : Copier un range avec double contrainte

Re,

les contraintes fixées dans le classeur fourni:
OBJECTIF:
- Copier le Range [B2:G7] en [B13:G18]

Contrainte 1
- Ne pas copier ligne si cellules D et E sont vides

Contrainte 2:
- Ne pas changer la structure de la feuille en supprimant des lignes ou des colonnes car l'original se trouve sur une feuille non modifiable

Si les contraintes évoluent à chaque post, on ne va pas s'en sortir !

une solution, comme entrevue, :copier le tableau dans une autre feuille, adapter le code proposé (ligne Dep et Fin..) à ce tableau, lancer le code, effacer le tableau dans la feuille initiale, puis copier le tableau généré par le code ?

A+
 

bambi

XLDnaute Occasionnel
Re : Copier un range avec double contrainte

Je ne modifie pas les contraintes paf, j'essaie de les contourner

Mon tableau original débute à la colonne AL
Et j'ai des données intouchables dans les colonnes A à AK

C'est ma contrainte 2

Mon objectif final est de n'avoir qu'une seule et unique macro

Je vais m'attarder plus longuement sur ta macro initiale, merci ;)
 

Paf

XLDnaute Barbatruc
Re : Copier un range avec double contrainte

Re,


à l'adaptation près des N° de ligne début et fin du tableau original (voire des noms de feuilles), a priori ça doit fonctionner:

Code:
Sub  bambi()
Dim i As Integer, x As Integer, Deb As Integer, Fin As Integer, DerL2 As Integer
Dim F1 As Worksheet, F2 As Worksheet
Set F1 = Worksheets("Feuil1")
Set F2 = Worksheets("Feuil2")

Deb = 2   'N° ligne de début de Tableau à copier
Fin = 7   'N° ligne de fin de Tableau à copier
x = 1    'N° ligne de début de copie sur la feuille 2 (brouillon)

'*** on copie le tableau dans une feuille "brouillon" en supprimant les lignes inutiles
For i = Deb To Fin
    If F1.Cells(i, 4) <> "" Or F1.Cells(i, 5) <> "" Then
        F1.Range("B" & i & ":G" & i).Copy F2.Range("A" & x)
        x = x + 1
    ElseIf F1.Cells(i, 3) = "TEMPS" Or F1.Cells(i, 3) = "HEURE" Then
        F1.Range("B" & i & ":G" & i).Copy F2.Range("A" & x)
        x = x + 1
    End If
Next
'** on efface les données de la feuille originaleoriginales
F1.Range("B" & Deb & ":G" & Fin).ClearContents

'*** on copie le tableau de la feuille brouillon sur la feuille originale
F2.Range("A1" & ":F" & x).Copy F1.Range("B" & Deb)
End Sub

A+
 

bambi

XLDnaute Occasionnel
Re : Copier un range avec double contrainte

J'ai réussi à adapter la dernière macro du message #6
Non sans mal mais ça marche :D

Par contre, j'aurai besoin de rajouter à la fin une ligne pour
Copier le range [A3:Q8] de la Feuil2 dans le presse papier

J'ai essayé en rajoutant

PHP:
F2.Range("A3:Q8).Select
Selection.Copy

mais ça ne marche pas

Je ne vois pas trop comment faire pour le mettre à la fin de la macro et pas en faire une autre :confused:
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Copier un range avec double contrainte

Re
j'aurai besoin de rajouter à la fin une ligne pour Copier le range [A3:Q8] de la Feuil2 dans le presse papier
Code:
F2.Range("A3:Q8).Select
Selection.Copy
ou
Code:
F2.Range("A3:Q8).Copy

mettent bien les données dans le presse papier, reste plus qu'à coller quelque part ! en spécidiant la première cellule en haut à gauche de l'emplacement souhaité.

par exemple
Code:
F2.Range("A3:Q8).Copy  F1.Range("B92")

on ne peut pas intégrer cette plage à la copie des données de la feuille 2 vers la feuille 1, car le nombre de colonnes est différent ( à moins qu'au final, le tableau ne soit plus en Bx:Gy)

A+
 

bambi

XLDnaute Occasionnel
Re : Copier un range avec double contrainte

Merci Paf
Je me suis arrangé avec cette fonction

Par contre, il me reste un petit souci
Si je mets des formules dans mon tableau de départ, la copie colle les formules et non les valeurs

J'ai essayé avec les fonctions que je connais habituellement (Paste, xlPasteValue ...) mais ça ne fonctionne pas ici

Comment faire pour coller les valeurs et non pas les formules ?
Que faut-il modifier dans la Ce lien n'existe plus ?

Merci d'avance
 

Paf

XLDnaute Barbatruc
Re : Copier un range avec double contrainte

RE

Code:
For i = Deb To Fin
    If F1.Cells(i, 4) <> "" Or F1.Cells(i, 5) <> "" Then
        F1.Range("B" & i & ":G" & i).Copy 'F2.Range("A" & x).PasteSpecial Paste:=xlPasteValues
        F2.Range("A" & x).PasteSpecial Paste:=xlPasteValues
        x = x + 1
    ElseIf F1.Cells(i, 3) = "TEMPS" Or F1.Cells(i, 3) = "HEURE" Then
        F1.Range("B" & i & ":G" & i).Copy 'F2.Range("A" & x)
        F2.Range("A" & x).PasteSpecial Paste:=xlPasteValues
        x = x + 1
    End If
Next

mais dans ces conditions, seules les valeurs seront copiées (pas de mise en forme....)
pour copier également les mises en forme, à ma connaissance, pas d'autre solution que de rajouter une nouvelle ligne de code:
Code:
F2.Range("A" & x).PasteSpecial Paste:=xlPasteFormats

Bonne suite
 

bambi

XLDnaute Occasionnel
Re : Copier un range avec double contrainte

J'y suis presque et j'aurais fini pour cette fois :D

Me reste une petite erreur que je ne parviens pas à résoudre

Voilà où j'en suis
1- Je copie les données de la feuille Filtres dans la Feuille Brouillon
2-Je supprime les lignes vides dans la feuille Brouillon
3-Je colle ces données nettoyées dans la feuille Calcul
4-Je vide la feuille Brouillon

Tout fonctionne bien à l'exception de ceci:

Dans Feuille Filtres, le Range [AN6:AN9] renvoie des valeurs ou un vide selon calcul
Ces valeurs sont copiées Feuille Brouillon, Range [C3:C6]

Si les cellules sont vides, elles gardent malgré tout un espace non visible à l’œil
et cet espace me génère évidemment une erreur #VALEUR! dans la feuille Calcul

Et là, je cale :p
 

Pièces jointes

  • Classeur1.xlsm
    48.4 KB · Affichages: 38
  • Classeur1.xlsm
    48.4 KB · Affichages: 41
  • Classeur1.xlsm
    48.4 KB · Affichages: 50

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T