Erreur exécution 1004

Bonjour,

Afin de créer une liste de valeur non vide à partir d'une base donnée, j'ai créé cette macro qui semble fonctionner, la liste ce génère bien au bon endroit, malgré cela j'ai un message d'erreur qui s'affiche à la fin de l’exécution de ma macro " Erreur exécution 1004" au niveau de la ligne :

"If Worksheets("Feuil1").Cells(ligneA, 3).Value <> "" Then"

Je ne comprend pas mon erreur, pouvez vous m'aider ?

cordialement

MACRO CREE :

Sub liste_des_presents()

ligneA = 2

ligneB = 2

derniere = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row

Do

If Worksheets("Feuil1").Cells(ligneA, 3).Value <> "" Then

Sheets("Feuil1").Cells(ligneA, 1).Copy Worksheets("Feuil2").Cells(ligneB, 1)

End If

ligneA = ligneA + 1

ligneB = ligneB + 1

Loop While ligne <= derniere

End Sub

Tu ne déclares pas tes variables ?

Sub liste_des_presents()
Dim ligneA as Long
Dim ligneB as Long
ligneA = 2
ligneB = 2

Mais je pense que le

"If Worksheets("Feuil1").Cells(ligneA, 3).Value <> "" Then"

n'est pas correcte.

Au lieu de faire avec " différent de " alors inverse ta condition pour utiliser =

Sub liste_des_presents()
Dim ligneA as Long
Dim ligneB as long
ligneA = 2
ligneB = 2
derniere = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
Do

If Worksheets("Feuil1").Cells(ligneA, 3).Value = "" Then
Goto SUITE
Else
Sheets("Feuil1").Cells(ligneA, 1).Copy Worksheets("Feuil2").Cells(ligneB, 1)
End If
SUITE:
ligneA = ligneA + 1
ligneB = ligneB + 1

Loop While ligne <= derniere

End Sub

Bonjour,

Une autre proposition (à adapter).

Cdlt.

Public Sub liste_des_presents()
Dim ws As Worksheet, ws2 As Worksheet, Rng As Range, lastRow As Long
    Set ws = Worksheets("Feuil1"): Set ws2 = Worksheets("Feuil2")
    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Set Rng = .Cells(2, 1).Resize(lastRow - 1)
    End With
    Rng.Copy Destination:=ws2.Cells(2, 1)
    With ws2.Cells(2, 1).Resize(lastRow - 1)
        .Sort key1:=.Cells(2, 1), order1:=xlAscending
        .RemoveDuplicates Columns:=1, Header:=xlNo
    End With
End Sub

Bonjour à tous,

peut-être en modifiant:

Loop While ligne <= derniere

en utilisant une variable initialisée.

Dans cette situation ligneA et ligneB sont incrémentées jusqu'à dépasser le nombre de lignes possible pour excel .

Pour rester au plus près de la macro initiale, puisque ligneA et ligneB sont toujours identiques on pourrait utiliser:

Sub liste_des_presents()
ligne = 2
derniere = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row

Do
     If Worksheets("Feuil1").Cells(ligne, 3).Value <> "" Then
          Sheets("Feuil1").Cells(ligne, 1).Copy Worksheets("Feuil2").Cells(ligne, 1)
     End If
     ligne = ligne + 1
Loop While ligne <= derniere

End Sub

A+

Bonjour,

Merci beaucoup pour vos réponses. J'ai opté pour la solution de AlgoPlus. La solution de Xmenpl n'a pas fonctionnée, le message d'erreur restait identique et celle de Jean-Eric je n'es pas testé pour la simple raison que j'ai eu du mal à comprendre les termes utilisé dans votre proposition.

Bonne journée

Bonjour,

Un complément d'informations.

Cdlt.

Public Sub liste_des_presents()
'Déclaration des variables
Dim ws As Worksheet, ws2 As Worksheet, Rng As Range, lastRow As Long
    'Initialisation des variables
    Set ws = Worksheets("Feuil1"): Set ws2 = Worksheets("Feuil2")
    With ws
        'Dernière ligne colonne A
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        'Plage de cellules à copier
        'Double clic sur Resize et F1 pour obtenir l'aide sur la propriété
        Set Rng = .Cells(2, 1).Resize(lastRow - 1)
    End With
    'Copie des données
    Rng.Copy Destination:=ws2.Cells(2, 1)
    With ws2.Cells(2, 1).Resize(lastRow - 1)
        'Tri des données copiées
        .Sort key1:=.Cells(2, 1), order1:=xlAscending
        'Suppression des doublons
        .RemoveDuplicates Columns:=1, Header:=xlNo
    End With
End Sub

Bonjour,

Je vous remercie en effet cela va m'aider à compléter le programme.

Par contre je suis à la recherche d'une formule pour supprimer les vides, pourriez vous m'aider ?

Cordialement

Bonjour,

Pour ma part, sans information, il n'y a pas de cellules vides.

Cdlt.

En faite ça copie pas les données les uns à la suite des autres mais au même emplacement, c'est à dire la donnée de la cellule A15 de la feuil1 va ce copier dans la cellule A15 de la feuil2.

cordialement

Re,

Je ne comprends pas !

Il est temps de joindre un fichier à ta demande.

Cdlt.

Ci-dessus le fichier test,

cordialement

Re bonjour à tous,

Dans le premier post, tout fonctionnait correctement, hormis l'erreur finale. ??!!

En faite ça copie pas les données les uns à la suite des autres mais au même emplacement, c'est à dire la donnée de la cellule A15 de la feuil1 va ce copier dans la cellule A15 de la feuil2.

ben oui... le code qui fonctionnait bien était conçu pour ça !!

un essai de ce que j'ai compris :

Sub liste_des_presents()
Dim ligne as long, x as long
ligne = 2
x=1

With Worksheets("Feuil1")
For i = ligne to .Range("A" & Rows.Count).End(xlUp).Row
     If .Cells(ligne, 3).Value <> "" Then
          x = x + 1
          .Cells(ligne, 1).Copy Worksheets("Feuil2").Cells(x, 1)
     End If
Next
End Sub

A+

Re,

Une proposition à étudier.

Les données sont sous forme de tableaux structurés.

Cdlt.

Bonjour,

Je vous remercie, ça marche !!!!

cordialement

Rechercher des sujets similaires à "erreur execution 1004"