Posez votre question Signaler

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

kamoul - Dernière réponse le 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
Lire la suite 

Probleme de Range erreur 1004 !!! VB Excel »

7 réponses
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
kamoul - 28 juil. 2010 à 15:20
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- 28 juil. 2010 à 16:10
Lermite a répondu ce que je pense
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour, Bonjour Michel,
FinDroite n'est pas initialiser et est donc à zéro, d'où l'erreur.
A+
Ajouter un commentaire
Réponse
+0
moins plus
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....
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Ce document intitulé « Probleme de Range erreur 1004 !!! VB Excel » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?