Excel Copie- coller avec si cellule pleine

AB -  
 AB -
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.
Configuration: Windows XP
Internet Explorer 6.0

2 réponses

  1. tototitie
     
    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
  2. AB
     
    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