Couper/coller

Fermé
ChristianAM Messages postés 4 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 19 juin 2017 - 14 juin 2017 à 16:08
ChristianAM Messages postés 4 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 19 juin 2017 - 19 juin 2017 à 08:04
Bonjour
Je travaille sur un tableau Excel qui est assez lourd dans lequel j'ai plusieurs lignes et plusieurs colonnes. Pour alléger mon tableau de saisie, je voudrais que les lignes du tableau de la feuil1 soient couper et coller dans le tableau en feuil2 sous condition d'un argument en colonne H.
De plus, je voudrais que les lignes vides de la feuil1 soient supprimées pour gagner de la place sur mon tableau.
Cette opération pourrait se faire plusieurs fois sans effacer les précédentes données dur la feuil2.
Merci de m'aider, je galère.
A voir également:

2 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
14 juin 2017 à 16:14
Bonjour Christian, bonjour le forum,

Pourquoi tant de mystère : un argument ! Lequel ?
Pourquoi pas le fichier : voir par exemple : https://www.cjoint.com/ ?
0
ChristianAM Messages postés 4 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 19 juin 2017
16 juin 2017 à 11:37
0
ChristianAM Messages postés 4 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 19 juin 2017 > ChristianAM Messages postés 4 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 19 juin 2017
16 juin 2017 à 12:08
Sur ce tableau, la condition pour couper/coller dans l'onglet "DA SOLE" est "CLOTURE"
Merci pour votre aide
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
Modifié le 17 juin 2017 à 12:43
Bonjour Christian, bonjour le forum,

Essaie comme ça :

Sub Macro1()
Dim DEB As Single 'déclare la variable DEB (DÉBut)
Dim S As Worksheet 'déclare la variable S (onglet Suivi...)
Dim D As Worksheet 'déclare la variable D (onglet DA...)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim NL As Long 'déclare la variable NL (Nombre de Lignes)
Dim NC As Long 'déclare la variable NC (Nombre de Colonnes)
Dim I As Long 'déclare la variable I (Incrément)
Dim J As Long 'déclare la variable J (incrément)
Dim KA As Long 'déclare la variable KA (incrément Avec)
Dim KS As Long 'déclare la variable KS (incrément Sans)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim TSL() As Variant 'déclare la variable TSL (Tableau Sans les Lignes)
Dim DEST As Range 'déclare la variable DEST (cellue de DESTination)
Dim FIN As Single 'déclare la variable FIN

DEB = Timer 'lance le chronométrage
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set S = Worksheets("SUIVI OT DA") 'définit l'onglet S
Set D = Worksheets("DA SOLDE") 'définit l'onglet D
TV = S.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV
NC = UBound(TV, 2) 'définit le nombre de colonnes NC du tableau des valeurs TV
KA = 1 'initialise la variable KA
KS = 1 'initialise la variable KS
For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    'condition : si la donnée ligne I colonne 8 (=> colonne H) de TV est égale à "CLOTURE" (ou cloture)
    If UCase(TV(I, 8)) = "CLOTURE" Then
        ReDim Preserve TL(1 To NC, 1 To KA) 'redimensionne le tableau des lignes TL (autant de lignes que TV a de colonnes, K colonnes)
        For J = 1 To NC 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
            TL(J, KA) = TV(I, J) 'récupère dans la ligne J de TL la donnée en colonne J de TV (= Transposition)
        Next J 'prochaine colonne de la boucle
        KA = KA + 1 'incrément KA (ajoute une colonne au tabelau des lignes TL)
    Else 'sinon (si la donnée ligne I colonne 8 (=> colonne H) de TV est différente de "CLOTURE")
        ReDim Preserve TSL(1 To NC, 1 To KS) 'redimensionne le tableau des lignes TL (autant de lignes de TV a de colonnes, K colonnes)
        For J = 1 To NC 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
            TSL(J, KS) = TV(I, J) 'récupère dans la ligne J de TL la donnée en colonne J de TV (= Transposition)
        Next J 'prochaine colonne de la boucle
        KS = KS + 1 'incrément K (ajoute une colonne au tableau sans les lignes TSL)
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
If KA > 1 Then 'condition : si KA est supérieure à 1
    Set DEST = D.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la celllule de destination DEST
    DEST.Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL) 'renvoie dans DEST redimensionnée le tableau TL transposé
End If 'fin de la condition
If KS > 1 Then 'condition : si KS est supérieure à 1
    S.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface les le contenu des cellules de l'onget S (sauf la première ligne)
    'renvoie dans A2 redimensionnée de l'onglet S le tableau TSL transposé
    S.Range("A2").Resize(UBound(TSL, 2), UBound(TSL, 1)).Value = Application.Transpose(TSL)
End If 'fin de la condition
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
FIN = Timer - deb 'arrête le chromométrage
MsgBox "Traitement des données effectuées en " & fin & "secondes !" 'message de fin
End Sub


À plus,
ThauTheme
0
ChristianAM Messages postés 4 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 19 juin 2017
19 juin 2017 à 08:04
Bonjour ThauTheme
C'est exactement ce que je voulais et ça marche trés bien.
Merci beaucoup et à bientôt sur un forum
0