Excel Copie- coller avec si cellule pleine

Fermé
AB - 18 févr. 2009 à 18:19
 AB - 20 févr. 2009 à 17:13
Bonsoir,
J’aimerais savoir si vous pouvez m’aider pour une macro ;

J’ai un classeur avec des données de certaines cellules que je vais reporter dans un autre classeur.

Dans le classeur source, les données qui sont à copier sont toujours au même endroit ex, en h 8, M12,d 10.

Ex, je dois copier la cellule h8 – m12- d10 dans le classeur receveur à l’emplacement B5, b8, et b25 si elle vide, si elle pleine , alors décaler à droite en c5 c8 c9 et la fois d’après en d5,d8 d9.
C’est un classeur de résultat qui part de janvier à décembre, on va dire qu’il y a 12 colonnes réceptrices.

On va dire que les deux fichiers sont ouverts.

Par contre le fichier donneur est un tableau qui se met à jour chaque mois.

- --
J’aimerai aussi avoir la syntaxe (pour plus tard) pour décaler non plus à droite mais en dessous : B5 , puis b6 et b7 ect si la cellule est pleine.

J’étais un peu long, j’ai voulu être claire.
Cordialement.

Merci par anticipation.
A voir également:

2 réponses

Bonjour, grosso modo, tu dois créér une macro dans ton classeur cible. Au niveau des instructions que tu auras besoin, il y a :

' Pour activer le bon classeur et la bonne page (là où se trouvent tes données source par exemple)
Workbooks("nomdufichiersource.xls").activate
Sheets("nomdelafeuillesource").Select

' Pour récupérer le texte d'une cellule tu dois utiliser l'instruction :
Dim Lecontenuatester As String
Lecontenuatester = Cells(ligne, colonne).Value
' Note : la cellule A1 est à l'indice 1,1

' Pour copier du texte dans une cellule, l'affectation est dans l'autre sens tout simplement :
Cells(ligne, colonne).Value = Lecontenuacopier

' Dernier élement que tu as besoin : tester si une valeur est vide ou non :
' <> signifie différent de et "" est une valeur vide
' = signifie égal à
If Lecontenuatester <> "" Then

Else

End If



'Tu aura probablement besoin de boucles ou de répéter les bouts de code précédents pour copier tout ce que tu veux :
' Par exemple, tu peux imbriquer les bouts de code précédents dans une boucle comme ci dessous pour éviter de répéter la manip n fois

For i = 1 To 10

' Pour récupérer le contenu d'une cellule source
Workbooks("nomdufichiersource.xls").activate
Sheets("nomdelafeuillesource").Select
Dim Lecontenuatester As String
Lecontenuatester = Cells(2 * i + 3, 2).Value ' en admettant que 2 * i + 3, 2 te donnes la position qui t'intéresses


' Active la feuille cible de la copie
Workbooks("nomdufichiercible.xls").activate
Sheets("nomdelafeuillecible").Select


' Teste la valeur du texte de la cellule source
If Lecontenuatester <> "" Then
' Si elle n'est pas vide, on copie aux indices 2 * i + 3, 2
Cells(2 * i + 3, 2).Value = Lecontenuacopier
Else
' Si elle est vide, on la recopie aux mêmes emplacement que sur la feuille source 2 * i + 3 , 3
Cells(2 * i + 3 , 3).Value = Lecontenuacopier
End If

Next i




Voilà, en adaptant un peu, tu arrivera à faire exactement ce que tu veux, je pense avoir listé toutes les instructions dont tu as besoin.
1
Je remercie TOTOTIIE pour sa réponse, mais j'ai dèjà une réponse similiaire par un autre site, les tiens développe beucoup PLUS les explicationS et je t'en remercie , celles ci me pemet de comprendre de mieux en mieux ce qui faut faire, et surtout les principaux arguments.


Merci encore bonne soirée et bon week end

aG
0