Probleme de Range erreur 1004 !!! VB Excel [Résolu/Fermé]

- - Dernière réponse :  kamoul - 28 juil. 2010 à 17:14
Bonjour,
J'ai un code qui bloque, maisje ne sais pas pourquoi
C'est juste une recopie d'une plage vers une autre



'Déclaration des variable
Destination = 2
FinBas = Worksheets("Parts").Range("A65536").End(xlUp).Row

'Recopiage des résultats dans la feuille de résultats
For i = 1 To FinBas
If Worksheets("Parts").Range(Cells(i, FinDroite + 2), Cells(i, FinDroite + 2)).Value = "Doublon" Then
Worksheets("ResultatTri").Range(Cells(Destination, 1), Cells(Destination, FinDroite)) = Worksheets("Parts").Range(Cells(i, 1), Cells(i, FinDroite))
If Worksheets("Parts").Range("AH" & i).Value = Worksheets("Parts").Range("AH" & i + 1).Value Then
Destination = Destination + 1
Else
Destination = Destination + 2
End If
End If

Next i


Je comprend pas parce que la propriété range fonctionne avec des lettres dedans
Je remercie par avance quiconque m'aide

Cordialement Kamoul
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
15905
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
17 août 2019
2780
2
Merci
Bonjour,

ton souci vient de la feuille active: comme tu en utilises 2...

maquette "vite fait":
Sub nnnn()
Destination = 2
Findroite = 4
i = 1
With Sheets(1)
     tablo = .Range(.Cells(Destination, 1), .Cells(Destination, Findroite)).Value
End With
With Sheets(2)
    .Range(.Cells(i, 1), .Cells(i, Findroite)) = tablo
End With
End Sub


comme tu boucles sur n lignes

écris cette ligne en début de macro
Application.ScreenUpdating = False

qui fige le défilement de l'écran et te fait gagner un temps

Enfin, les select-selection, copy-paste sont à éviter au maximum dans une procédure: ocupation mémoire, temps de procédure très longue

Dire « Merci » 2

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 58430 internautes nous ont dit merci ce mois-ci

Messages postés
16
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
12 novembre 2010
1
0
Merci
Bonjour,

Je pense ton erreur arrive à la ligne :

Worksheets("ResultatTri").Range(Cells(Destination, 1), Cells(Destination, FinDroite)) = Worksheets("Parts").Range(Cells(i, 1), Cells(i, FinDroite)) ?

Pour exécuter une copie, remplace cette ligne par

Worksheets("ResultatTri").Select
Range(Cells(i, 1), Cells(i, FinDroite)).Copy
Worksheets("Parts").Select
Range(Cells(Destination, 1), Cells(Destination, FinDroite)).Select
ActiveSheet.Paste

Tiens moi au courant
Tout d'abord merci d'avoir répondu aussi vite,
Ton truc fonctionne parce que je l'ai appliqué à un autre cas de figure et ça a marché( dans le recopiage de la ligne d'en-tête). Un problème persiste : j'aimerai déselectionner ce que j'ai selectionné et qui doit être dans le presse papier j'imagine.


'Recopiage de la ligne d'en-tête
Worksheets("Parts").Select
Range("A1").EntireRow.Copy
Worksheets("ResultatTri").Select
Range("A1").EntireRow.Select
ActiveSheet.Paste
Worksheets("Parts").Select
Range("A1").EntireRow

'Recopiage des résultats dans la feuille de résultats
For i = 1 To FinBas

'problème à cette ligne
If Worksheets("Parts").Range(Cells(i, FinDroite + 2), Cells(i, FinDroite + 2)).Value = "Doublon" Then

Worksheets("Parts").Select
Range(Cells(i, 1), Cells(i, FinDroite)).Copy
Worksheets("ResultatTri").Select
Range(Cells(Destination, 1), Cells(Destination, FinDroite)).Select
ActiveSheet.Paste
If Worksheets("Parts").Range("AH" & i).Value = Worksheets("Parts").Range("AH" & i + 1).Value Then
Destination = Destination + 1
Else
Destination = Destination + 2
End If
End If

Next i

Pour moi le problème doit venir de la selection et de la copie dans le presse papier de la ligne 1, il faudrait la déselectionner ou vider le presse papier mais je sais pas comment on fait
Merci d'avance
coconuts_n
Messages postés
16
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
12 novembre 2010
1 -
Lermite a répondu ce que je pense
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
977
0
Merci
Bonjour, Bonjour Michel,
FinDroite n'est pas initialiser et est donc à zéro, d'où l'erreur.
A+
Messages postés
15905
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
17 août 2019
2780
0
Merci
tiens, j'ai encore perdu mon temps à indiquer un truc qui marche....

mais Vive les trucs poussifs !!! quel site ce CCM :nul

l'Hermite ces réflexions ne sont pas pour toi !!! :-)
j'avais fait la maquette en recopiant la ligne problème et en donnant seulement une valeur à findroit, i... : tu as une 1004....
0
Merci
Merci à tous pour cette aide, ça marche maintenant, je met le code associé à ce qui marche, ça en aidera surement d'autre:


'Recopiage de la ligne d'en-tête
With Sheets("Parts")
entete = .Range(.Cells(1, 1), .Cells(1, FinDroite)).Value
End With
With Sheets("ResultatTri")
.Range(.Cells(1, 1), .Cells(1, FinDroite)).Value = entete
End With

'Recopiage des résultats dans la feuille de résultats
For i = 2 To FinBas
With Sheets("Parts")
ConditionDoublon = .Range(.Cells(i, FinDroite + 2), .Cells(i, FinDroite + 2)).Value
End With
If ConditionDoublon = "Doublon" Then
With Sheets("Parts")
plage = .Range(.Cells(i, 1), .Cells(i, FinDroite)).Value
End With
With Sheets("ResultatTri")
.Range(.Cells(Destination, 1), .Cells(Destination, FinDroite)).Value = plage
End With
With Sheets("Parts")
ConditionEspaceLigneI = .Cells(i, 34).Value
End With
With Sheets("Parts")
ConditionEspaceLigneIplus1 = .Cells(i + 1, 34).Value
End With
If ConditionEspaceLigneI = ConditionEspaceLigneIplus1 Then
Destination = Destination + 1
Else
Destination = Destination + 2
End If
End If

Next i


Cordialement
Kamoul