Collage spécial VBA

Bonjour,

je viens demander de l'aide pour deux autres problèmes sur un même sujet.

J'ai en colonne U de ma première page entre la ligne 8 et au maximum 602, une liste de jours ouvrés qui dépend de date de début et fin de mon projet. La liste est dans le tableau "CREATION" et la colonne "Liste des jours ouvrés du projet". J'aimerai créer un pseudo calendrier avec cette colonne dans une autre page.

(U = 21 ème lettre de l'alphabet, utile pour le code en dessous )

Voici mon code actuel :

Sheets("Données").Select

Range("U" & Rows.Count).End(xlUp).Select 'sélection de la dernière cellule non vide de la colonne U

Dernieredate = Range("U" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne U

Range(Cells(8,21), Cells(Dernieredate, 21).Copy

Sheets("Calendrier de charge").Select 'sélection de la page de collage

'Range(Cells(1, 1), Cells(1, Dernieredate)).Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=True

MES PROBLÈMES :

1) Le collage spécial ne veut pas fonctionner. J'arrive juste a créer un code qui copie les cases (donc les formules qui s'y trouvent et non pas les valeurs)

2) Je voudrais sélectionner uniquement les cases VIDES de ma colonne U, or actuellement j'ai ce code ci dans les cases :

[quote]=SI([@[Liste numéro jours ouvrés]]="";"";SI(SERIE.JOUR.OUVRE($A$3;[@[Liste numéro jours ouvrés]]-1;DONNEES[Jours fériés])<=$B$3;SERIE.JOUR.OUVRE($A$3;[@[Liste numéro jours ouvrés]]-1;DONNEES[Jours fériés]);""))[/quote]

La VBA considère qu'une case avec rien ("") n'est pas vide quand il y a une formule dedans qui lui dit d'être vide. Est ce que je peux remonter jusqu'à RÉELLEMENT ma dernière date ou je serai toujours bloqué à 602 (dernière ligne du tableau ou il y a une formule) ?

Salut,

Essaye ça

Sub Macro1()
'
' Macro1 Macro
'

Sheets("Données").Select
Range("U" & Rows.Count).End(xlUp).Select 'sélection de la dernière cellule non vide de la colonne U
Dernieredate = Sheets("Données").Range("U" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne U

j = 1
For i = 6 To Dernieredate
    If Sheets("Données").Range("U" & i).Value = "" Then
    Sheets("Données").Range("H" & i & " :U" & i).Copy
    Sheets("Calendrier de charge").Range("A" & j & " :N" & j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
    j = j + 1
    End If
Next i
'
End Sub

Bonne journée,

Alors le code est en défaut. Il tourne sans fin. Cependant l'idée de poser des conditions IF me parait bonne.

j = 1

For i = 6 To Dernieredate

If Sheets("Données").Range("U" & i).Value = "" Then

Sheets("Données").Range("H" & i & " :U" & i).Copy

Sheets("Calendrier de charge").Range("A" & j & " :N" & j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

j = j + 1

End If

Next i

Tu commences ton i à 6 mais c'est pas plutôt 8 (première valeur du tableau) ?

Tu poses un IF pour : si ma valeur vaut rien alors faire ça, c'est pas plutôt l'inverse que je devrais faire ?

Pourquoi tu sélectionnes à partir de H ici ? <<Range("H" & i & " :U" & i)>>

Pourquoi tu sélectionnes jusqu'à N ici ? <<Range("A" & j & " :N" & j)>>

Merci

Ok ne tiens pas compte de mon message au dessus j'ai compris pas mal de chose.

J'ai réécris légèrement ton code ça donne cela :

j = 1

For i = 8 To Dernieredate

If Sheets("Données").Range("U" & i).Value = "" Then

Sheets("Données").Range("U" & 8 & " :U" & i - 1).Copy

Sheets("Calendrier de charge").Range("A" & j & " :N" & j).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

j = j + 1

End If

Next i

'

End Sub

Donc je prend les valeurs entre 8 et 602 et je copie que les valeurs ou il y a quelque chose.

Maintenant le problème c'est le collage. Je veux qu'il se réalise entre A1 et (colonne i)1. Cependant j'ai pas l'impression que le code aime quand on transpose une matrice [i,1] en matrice [1,i]. Actuellement le code que tu m'as écris colle sur une plage de A1 à N j=i+1. Or je souhaite que la première ligne.

Merci pour l'aide je tripotte aussi de mon coté pour améliorer cela.

Salut,

Je n'ai sais pas quelle donnée tu veux reporter sur le ligne 1 du calendrier du calendrier de charge. Du coup dans mon exemple j'ai copié celle en colonne T.

Le code est le suivant :

Sub Macro1()
'
' Macro1 Macro
'

Dernieredate = Sheets("Données").Range("U" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne U

j = 1
For i = 8 To Dernieredate
    If Sheets("Données").Cells(i, 21).Value = "" Then
    Sheets("Calendrier de charge").Cells(1, j).Value = Sheets("Données").Cells(i, 20).Value
        j = j + 1
    End If
Next i
'
End Sub
1classeurtest.zip (10.23 Ko)
Rechercher des sujets similaires à "collage special vba"