Copier les cellules non vides d'une colonne vers une autre

  • Initiateur de la discussion Initiateur de la discussion benoit13
  • 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 !

benoit13

XLDnaute Nouveau
Bonjour,

Je souhaite copier les cellules non vides de la colonne A (à partir de la ligne 16 jusqu'à la fin) du classeur "ConstructionVesselBase" vers la colonne A (à partir de la ligne 3) du classeur "Feuille calculs Gantt".

J'ai rentré le code suivant mais il ne me copie que la première cellule (A16). Je pense que le problème vient de ma boucle For mais je débute.
Peut être quelqu'un aurait il une idée??

Merci d'avance,

Benoit

PS: voilà mon code
Code:
Sub Macro1()


'Copier les cellules non vides de la colonne A de la feuille de données vers la feuille de gantt
 
    Dim j As Integer
    Dim k As Integer
    
    Sheets("ConstructionVesselBase").Select
    For j = 16 To Range("A65536").End(xlUp).Row
        k = j - 13
        If Not IsEmpty(Range("A" & j)) Then
            Range("A" & j).Copy
            Sheets("Feuille calculs Gantt").Select
            Range("A" & k).Select
            Selection.PasteSpecial
        End If
    Next j
    
End Sub
 
Re : Copier les cellules non vides d'une colonne vers une autre

Pas certains mais je pense que la selection de ta feuille doit se faire à l'interieur de ta boucle for.
Car en sortie il se trouve sur ta seconde feuille qui elle ne contient qu'une valeur, la première que tu viens de copier. Donc la ligne 17 ne contient aucunes données et il sort de la boucle.
Code:
Sub Macro1()


'Copier les cellules non vides de la colonne A de la feuille de données vers la feuille de gantt
 
    Dim j As Integer
    Dim k As Integer
    
   Sheets("ConstructionVesselBase").Select
    For j = 16 To Range("A65536").End(xlUp).Row
        [COLOR="Red"]Sheets("ConstructionVesselBase").Select[/COLOR]
        k = j - 13
        If Not IsEmpty(Range("A" & j)) Then
            Range("A" & j).Copy
            Sheets("Feuille calculs Gantt").Select
            Range("A" & k).Select
            Selection.PasteSpecial
        End If
    Next j
    
End Sub
 
Re : Copier les cellules non vides d'une colonne vers une autre

Merci beaucoup, ça fonctionne en effet mais c'est TREEEES long...
Savez vous s'il est possible de récupérer l'adresse de la dernière cellule non vide de ma colonne pour ensuite copier coller l'ensemble de la plage d'un seul coup?
J'imagine que ça devrait aller plus vite non?

Merci d'avance (à nouveau)!
 
Re : Copier les cellules non vides d'une colonne vers une autre

du classeur "ConstructionVesselBase" vers la colonne A (à partir de la ligne 3) du classeur "Feuille calculs Gantt".
En fait il s'agit de feuilles et pas de classeurs, juste pour employer les bons termes techniques

En fait ta boucle est ok , c'est aprés que cela ce gâte, un problème du au .select dans la boucle, et comme tu ne revients pas sur l'autre feuille et bien il trouve une cellule vide forcément.

Essais comme cela , attention au . devant les ranges, cela veut dire qu'ils sont associés au with dans ce cas

Sub Macro1()


'Copier les cellules non vides de la colonne A de la feuille de données vers la feuille de gantt

Dim j As Integer
Dim k As Integer
'Avec la feuille Construction
With Sheets("ConstructionVesselBase")
Boucle pour j de 16 à maxLigne
For j = 16 To .Range("A65536").End(xlUp).Row
'Calage d'indexe
k = j - 13
'Test si cellule non vide
If Not IsEmpty(.Range("A" & j)) Then
'Copie de la cellule
.Range("A" & j).Copy
Sheets("Feuille calculs Gantt").Select
Range("A" & k).Select
Selection.PasteSpecial
End If
Next j
'Fin du avec
End with
End Sub
 
Re : Copier les cellules non vides d'une colonne vers une autre

Bonsoir,

essaie cette ligne :

Code:
Sub Macro2()
Range("A16:A" & [A65000].End(xlUp).Row).SpecialCells(xlCellTypeConstants, 23).Copy Sheets("feuil2").Range("A3")
End Sub

bonne soirée
 
Re : Copier les cellules non vides d'une colonne vers une autre

Une autre petite question subsidiaire...

Si mes cellules de la colonne A contiennent maintenant une formule qui selon le cas, renvoie une valeur ou "".
Le critère de copie n'est donc plus "non vide" puisque toutes les cellules contiennent une formule... Le code précédent de bhbh est il adaptable?

A nouveau merci d'avance.
 
Re : Copier les cellules non vides d'une colonne vers une autre

Re-,

dans le cas où la formule renvoie du numérique, tu peux essayer ce code :

Code:
Range("A16:A" & [A65000].End(xlUp).Row).SpecialCells(xlCellTypeFormulas, 1).Copy Sheets("Feuil2").Range("A3")

Par contre, dans le cas où le renvoi est du texte, c'est un peu différent, "" étant considéré comme du texte...

La solution la plus rapide, serait de modifier la formule dans la colonne qui doit renvoyer du texte et de mettre 0 à la place de "", et ainsi, ce code fonctionnerait :

Code:
Range("A16:A" & [A65000].End(xlUp).Row).SpecialCells(xlCellTypeFormulas, 2).Copy Sheets("Feuil2").Range("A3")

Cependant, tu vas me dire, que les 0, c'est pas jouli......

Dans ce cas, tu sélectionnes toutes tes cellules contenant tes formules, et tu appliques ce format conditionnel :

La valeur de la cellule est égale à 0, tu appliques la couleur de la police à Blanc, et ainsi, les 0 n'apparaissent pas, et le deuxième code fonctionne....

Ok, c'est du bricolage, et cela ne fonctionnera bien que si toutes les cellules d'une même colonne ne doivent renvoyer qu'un seul type de données (numériques, ou texte), sinon, il faut faire du ligne par ligne, dans le cadre d'une valeur texte...

Peut-être
 
- 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
3
Affichages
198
Réponses
3
Affichages
119
Réponses
2
Affichages
160
Retour