Copier/Coller une plage en VBA

  • Initiateur de la discussion Initiateur de la discussion Amilo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Amilo

XLDnaute Accro
Bonsoir le forum,

Je suis toujours à recherche d'une solution pour le problème indiqué dans mon fichier ci-joint,

J'ai une plage de départ en B5:C11 et je souhaite obtenir le résultat en K5:L8,

Le résultat obtenu avec le bouton est en G5:H11,


Merci d'avance

Cordialement
 

Pièces jointes

Re : Copier/Coller une plage en VBA

Bonsoir Amilo,

Une proposition:

Code:
Sub export1()

    Dim maPlage As Range
    Dim i, h, m As Long
    Dim tabl()
    
    Sheets("Feuil1").Select
    
        Set maPlage = Range("B5:C11") 'Plage du traitement
        
            tabl = maPlage.Value
            
                For i = LBound(tabl()) To UBound(tabl())
                    
                    If tabl(i, 1) = "" Then
                        
                        For h = LBound(tabl()) To UBound(tabl())
                            
                            If h > i And i <> UBound(tabl()) Then
                            
                                tabl(i, 1) = tabl(h, 1)
                                tabl(h, 1) = ""
                                tabl(i, 2) = tabl(h, 2)
                                tabl(h, 2) = ""
                                
                            End If
                            
                        Next h
                        
                    End If
                    
                Next i
                
        Range("K5:L11").Value = tabl 'Plage d'arrivée
End Sub

Bonne nuit
 
Re : Copier/Coller une plage en VBA

Re,

Ce code doit être bien plus rapide:

Code:
Sub export2()


    Dim maPlage As Range
    Dim i, h, m As Long
    Dim tabl(), tableau()
    
    Sheets("Feuil1").Select
    
m = 0
        Set maPlage = Range("B5:C11") 'Plage du traitement
        
            tabl = maPlage.Value
            
                ReDim tableau(UBound(tabl()), 1 To 2)
                
                    For i = LBound(tabl()) To UBound(tabl())
                        
                        If tabl(i, 1) <> "" Then
                        tableau(m, 1) = tabl(i, 1)
                        tableau(m, 2) = tabl(i, 2)
                        m = m + 1
                        End If
                        
                    Next i
                    
                Range("K5:L11").Value = tableau
                        
                
End Sub

Bonne nuit
 
Dernière édition:
Re : Copier/Coller une plage en VBA

Bonsoir VDAVID,

Le 1er code est déjà rapide mais je vais utiliser le second,

En tout cas drôle d'instruction les UBound, LBound c'est la 1ère fois que je l'utilise,

Merci encore,

Cordialement
 
Dernière édition:
Re : Copier/Coller une plage en VBA

Re bonsoir,

Je souhaite apporter une petite modification au code à VDAVID mais je bloque,


Dans le code, j'ai rajouté 2 colonnes supplémentaires (en D et E) et jusque là y a pas eu de problème...

Mais je voulais également que, à chaque clic sur le bouton, la plage B5:E11 s'exporte avec un saut de ligne vers la plage en K:N...,

La plage en vert est le résultat attendu,

mais si j'éxécute le code, il n'y a que la valeur 65 qui s'exporte....!!!

Je vous joins le fichier avec le code modifié,


Merci d'avance pour votre aide

Cordialement
 

Pièces jointes

Dernière édition:
Re : Copier/Coller une plage en VBA

Salut Amilo, VDAVID,

Juste une petite remarque à VDAVID,

la déclaration
Code:
Dim i, h, m As Long
n'est pas correcte.

En effet, en VBA, contrairement au VisualBasic n'accepte pas les multi-déclaration sur une même ligne.
Il faudrait écrire
Code:
Dim i As Long, h As Long, m As Long

Sinon ton code est plutôt efficace 😀

Amilo, lBound et Ubound permettent de connaître les limites inférieures et supérieures d'un tableau...pour pouvoir mieux les utiliser comme dans le code de VDAVID.


Bonne nuit.
 
Re : Copier/Coller une plage en VBA

Bonsoir Jam,

Vu l'ensemble du code proposé par VDAVID qui est par ailleurs trés intéréssant, Je me suis effectivement dit que VDAVID doit être un spécialiste de la pure programmation sur VB,

Sinon merci pour vos d'explications, en effet je suis allé faire un tour dans F1 mais j'avoue que je m'étais un peu perdu avec tous les arguments possibles dans UBound et LBound....!!!


Par contre, avez-vous une solution pour la ptite modification évoquée dans mon précédent message ??

Merci d'avance

Cordialement
 
Dernière édition:
Re : Copier/Coller une plage en VBA

Bonsoir Jam, Amilo,

@Jam,

Effectivement je l'ignorais ! Merci de me le faire remarquer 😱

@ Amilo,

J'ai réfléchis à une méthode pour exporter à un nombre de colonnes variables.

Peut-être avec ce code:

Code:
Sub export2()


    Dim maPlage As Range, maPlagefin As Range
    Dim i As Long, h As Long, m As Long
    Dim tabl(), tableau()
    
    Sheets("Feuil1").Select
m = 0
        Set maPlage = Range("B5:D11") 'Plage du traitement
        Set maPlagefin = Range("K5:M11")
        
            tabl = maPlage.Value

            
                ReDim tableau(UBound(tabl()), 1 To maPlage.Columns.Count)
                
                    For i = LBound(tabl()) To UBound(tabl())
                    
                        For h = LBound(tabl(), 2) To UBound(tabl(), 2)
                        
                            If tabl(i, 1) = "" Then
                            GoTo Borne
                            End If
                            
                            tableau(m, h) = tabl(i, h)
                            
                        Next h
                        
                        
                        m = m + 1
                        
Borne:
                    Next i
                    
                maPlagefin.Value = tableau
                        
                
End Sub

(Avec une bonne déclaration de variables ^^')

Enlève tous les doublons, en fonction de la valeur de la première colonne, si elle est vide, la ligne n'est pas prise en compte.

Bonne nuit
 
Re : Copier/Coller une plage en VBA

Bonjour le Forum, VDAVID,

Merci VDAVID pour votre aide,

Malheureusement, le nouveau code donne le même résultat que le précédent,

A chaque clic sur le bouton, ma plage en B5😀11 s'exporte qu'une seule fois

alors que j'aurais souhaité que celle-ci se place l'une en dessous de l'autre à chaque clic du bouton et avec avec à chaque fois une ligne vide entre....

Merci d'avance

Cordialement
 
Re : Copier/Coller une plage en VBA

Re amilo,
Pour cela il suffit juste de dynamiser la plage de "réception" des valeurs:


Comme ceci :

Code:
Sub export2()


    Dim maPlage, maPlagefin As Range
    Dim i, h, m As Long
    Dim tabl(), tableau()
    
    Sheets("Feuil1").Select
m = 0
        Set maPlage = Range("B5:D11") 'Plage du traitement
        Set maPlagefin = Range("K" & Range("K65536").End(xlUp).Row + 1 & ":" & "M" & Range("K65536").End(xlUp).Row +1+ maPlage.Rows.Count)
        
            tabl = maPlage.Value

            
                ReDim tableau(UBound(tabl()), 1 To maPlage.Columns.Count)
                
                    For i = LBound(tabl()) To UBound(tabl())
                    
                        For h = LBound(tabl(), 2) To UBound(tabl(), 2)
                        
                            If tabl(i, 1) = "" Then
                            GoTo Borne
                            End If
                            
                            tableau(m, h) = tabl(i, h)
                            
                        Next h
                        
                        
                        m = m + 1
                        
Borne:
                    Next i
                    
                maPlagefin.Value = tableau
                        
                
End Sub

Ce code prends la dernière ligne non vide de la colonne "K" et copie la plage à la suite.
 
Re : Copier/Coller une plage en VBA

VDAVID,

C'est trés sympa de vous être penché sur mon problème et merci pour votre aide,

ça marche trés bien avec ce nouveau code sauf à un ptit détail près, il n'y a pas la ligne vide entre les plages...

mais je pense que je trouverai linstruction à modifier en cherchant par moi même,

Et bravo pour la solution à ce problème pas trés simple à résoudre...

Bon WE à vous

Cordialement
 
Re : Copier/Coller une plage en VBA

Re Amilo,

Il suffit de changer cette ligne en rajoutant 1:

Code:
Set maPlagefin = Range("K" & Range("K65536").End(xlUp).Row + 1 & ":" & "M" & Range("K65536").End(xlUp).Row +1+ maPlage.Rows.Count)

Code:
Set maPlagefin = Range("K" & Range("K65536").End(xlUp).Row + 2 & ":" & "M" & Range("K65536").End(xlUp).Row +1+ maPlage.Rows.Count)

Pas de soucis
Bonne journée 🙂
 
Re : Copier/Coller une plage en VBA

Re bonjour,

Décidement, j'aurais encore besoin de votre soutien jusqu'au bout....,

Finalement, j'aimerais exporter la même plage B5😀11 de la "feuil1" mais en colonnes K:M de la "feuil2",

J'ai modifié le code à VDAVID en gras et rouge instructions comme ci-dessous mais ce n'est pas suffisant...!!

Peut-être que c'est finalement tout bête pour vous pour réoudre cela,

Merci d'avance,


Sub export2()


Dim maPlage As Range
Dim maPlagefin As Range
Dim i As Long
Dim h As Long
Dim m As Long
Dim tabl(), tableau()

'Sheets("Feuil1").Select
m = 0
Set maPlage = Sheets("feuil1").Range("B5😀11") 'Plage du traitement
Set maPlagefin = Sheets("feuil2").Range("K" & Range("K65536").End(xlUp).Row + 2 & ":" & "M" & Range("K65536").End(xlUp).Row + 1 + maPlage.Rows.Count)

tabl = maPlage.Value


ReDim tableau(UBound(tabl()), 1 To maPlage.Columns.Count)

For i = LBound(tabl()) To UBound(tabl())

For h = LBound(tabl(), 2) To UBound(tabl(), 2)

If tabl(i, 1) = "" Then
GoTo Borne
End If

tableau(m, h) = tabl(i, h)

Next h


m = m + 1

Borne:
Next i

maPlagefin.Value = tableau


End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
40
Affichages
2 K
Retour