XL 2013 VBA Coller seulement si case vide

vbakr

XLDnaute Nouveau
Bonjour,

J'aimerais créer un code sur VBA qui permettrait de coller du texte seulement à partir de la première ligne vide (les lignes précédentes contiennent du texte)

Merci de votre aide
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Vbakr, bonjour le forum,

Pas très explicite ! ma réponse aussi (colonne COL à déterminer) :

VB:
Dim DL As Integer

DL = Cells(Application.Rows.Count, COL).End(xlUp).Row + 1
Range("MaplageSource").Copy Cells(DL, COL)
 

vbakr

XLDnaute Nouveau
Bonjour Robert,

Merci d'avoir répondu!
Voici un fichier pour mieux comprendre
Dans la colonne I j'ai le code site qui caractérise toutes mes données. Je dois donc copier ces données dans la feuille correspondante
Le problème c'est qu'il faut que je colle ces données en-dessous les données récoltées d'un précédent mois.
 

Pièces jointes

  • Classeur test.xlsx
    13.4 KB · Affichages: 11

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Essaie comme ça :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Integer 'déclare la variable L (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire))
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set OS = Worksheets("Feuille macro") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le taleau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 9)) = "" 'alimente le dictionnaire D avec les données en colonne 9 de TV
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 sur tous les éléments J du tableau temporaire TMP
    Erase TL 'vide le tableau TL
    K = 1 'initialise la variable K
    Set OD = Worksheets("Site " & TMP(J)) 'définit l'onglet destination OD
    Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destinatiotn DEST
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If TV(I, 9) = TMP(J) Then 'condition : si la donnée colonne 9 de la boucle correspond à l'élément J de TMP
            ReDim Preserve TL(1 To UBound(TV, 2), 1 To K) 'redimensionne le tableau des lignes TL
            For L = 1 To UBound(TV, 2) 'boucle 3 : sur toutes les colonnes L du tablau des valeurs TV
                TL(L, K) = TV(I, L) 'récupère dans la ligne L de TL la donnée en colonne L de TV (=> Transposition)
            Next L 'prochaine colonne de la boucle 3
            K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 2
    'si K est supérieur à 1, renvoie dans DEST redimensionnée le tableau TL transposé
    If K > 1 Then DEST.Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
Next J 'prochain élément de la boucle 1
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa