La méthode 'range' de l'objet worksheet à échoué

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 !

obyone

XLDnaute Occasionnel
bonjour,

j'ai créé un macro mais visiblement elle ne fonctionne pas.
la voici

1.Sub VirementLDDLaurent()
2. Dim rOF As Integer
3. Dim rCF As Integer
4. Dim sOF As Worksheet
5. Dim sCF As Worksheet
6. Set sOF = Worksheets("CIC ")
7. Set sCF = Worksheets("LDD Laurent ")
8.
9. rCF = 5
10. For rOF = 3 To 10000
11. If sOF.Cells(rOF, 2).Text = "Virement" Then
12. If sOF.Cells(rOF, 3).Text = "LDD Laurent" Then
13. sOF.Range(sOF.Cells(rOF, 1), sOF.Cells(rOF, 3)).Copy sCF.Cells(rCF, 1)
14. sOF.Range(sOF.Cells(rOF, 6)).Copy sCF.Cells(rCF, 7)
15. rCF = rCF + 1
16. End If
17. End If
18. Next
19. Application.CutCopyMode = False
20.
21.End Sub


j'ai une erreur sur la ligne 14 quand je l'execute.

pour explication
je veux copier une ligne de la feuille "cic" vers la feuille "ldd" les colonnes A, B et C identique et la colonne F se deplace en G.
j'ai un autre petit souci ligne 9: je souhaiterai que la macro commence la copie sur la premiere ligne vide et non à la 5ième ligne.
cordialement

un débutant en VBA.
 
Re : La méthode 'range' de l'objet worksheet à échoué

Bonjour,

pour ton problème en ligne 14, modifie peut être le code ainsi :

Code:
sOF.Cells(rOF, 6).Copy sCF.Cells(rCF, 7)

en supposant que toutes les variables soient bien initialisées...

bonne journée
@+
 
Re : La méthode 'range' de l'objet worksheet à échoué

Re,

pour ton problème ligne 9, regarde le code ci-dessous si il peut t'aider, te donnera le numéro de la ligne de la première cellule vide de la colonne A de la feuille actiive. Suppose qu'au moins les 2 premières cellules soient non vides...

Code:
Dim x As Integer
x = Range("A1").End(xlDown).Row + 1


@+
 
Re : La méthode 'range' de l'objet worksheet à échoué

Merci pierrot

tes 2 responses fonctionnent, mais j'ai maintenant un autre probleme. à chaque fois que j'execute la macro il va me copie les données or elle existe deja dans la nouvelle feuille voyez vous une solution?

cordialement
joyeuses fetes
 
Re : La méthode 'range' de l'objet worksheet à échoué

Bonjour,

voir si cela convient :
Code:
Sub VirementLDDLaurent()
  Dim rOF As Integer
  Dim rCF As Integer
  Dim sOF As Worksheet
  Dim sCF As Worksheet
  Set sOF = Worksheets("CIC ")
  Set sCF = Worksheets("LDD Laurent ")

  rCF = 5
  With sOF
    For rOF = 3 To 10000
      If .Cells(rOF, 2).Text = "Virement" Then
        If .Cells(rOF, 3).Text = "LDD Laurent" Then
          sOF[B].[/B]Range(.Cells(rOF, 1), .Cells(rOF, 3)).Copy sCF.Cells(rCF, 1)
          .Cells(rOF, 6).Copy sCF.Cells(rCF, 7)
          rCF = rCF + 1
        End If
      End If
    Next
  End With
  Application.CutCopyMode = False
End Sub
 
Re : La méthode 'range' de l'objet worksheet à échoué

bonjour, j'ai un petit probleme la macro suivante foncionne bien

Sub VirementLDDLaurent()
Dim rOF As Integer
Dim rCF As Integer
Dim sOF As Worksheet
Dim sCF As Worksheet
Set sOF = Worksheets("CIC")
Set sCF = Worksheets("LDD Laurent")

rCF = 6
With sOF
For rOF = 3 To 10000
If .Cells(rOF, 2).Text = "Virement" Then
If .Cells(rOF, 3).Text = "LDD Laurent" Then
sOF.Range(.Cells(rOF, 1), .Cells(rOF, 3)).Copy sCF.Cells(rCF, 1)
.Cells(rOF, 6).Copy sCF.Cells(rCF, 7)
rCF = rCF + 1
End If
End If
Next
End With
Application.CutCopyMode = False
End Sub


mais pas celle ci

Sub VirementLDDLaurent()
Dim rOF As Integer
Dim rCF As Integer
Dim sOF As Worksheet
Dim sCF As Worksheet
Set sOF = Worksheets("CIC")
Set sCF = Worksheets("LDD Laurent")

rCF = Sheets("LDD Laurent").[a65000].End(xlUp).Row + 1
With sOF
For rOF = 3 To 10000
If .Cells(rOF, 2).Text = "Virement" Then
If .Cells(rOF, 3).Text = "LDD Laurent" Then
sOF.Range(.Cells(rOF, 1), .Cells(rOF, 3)).Copy sCF.Cells(rCF, 1)
.Cells(rOF, 6).Copy sCF.Cells(rCF, 7)
rCF = rCF + 1
End If
End If
Next
End With
Application.CutCopyMode = False
End Sub

pouvez vous m'aider encore un peu merci
 
Re : La méthode 'range' de l'objet worksheet à échoué

re bonjour,

j'ai modifié un peu le code mais ca fonctionne toujours pas comme je le voudrais voici le nouveau code :

Sub VirementLDDLaurent()
Dim LCopier As Long
Dim LColler As Integer
Dim FCopier As Worksheet
Dim FColler As Worksheet
Set FCopier = Worksheets("CIC")
Set FColler = Worksheets("LDD Laurent")

LColler = 7
With FCopier
For LCopier = 3 To 10000
If .Cells(LCopier, 2).Text = "Virement" Then
If .Cells(LCopier, 3).Text = "LDD Laurent" Then
FCopier.Range(.Cells(LCopier, 1), .Cells(LCopier, 3)).Copy FColler.Cells(LColler, 1)
.Cells(LCopier, 6).Copy FColler.Cells(LColler, 7)
LColler = FColler.[a65000].End(xlUp).Row + 1
End If
End If
Next
End With
Application.CutCopyMode = False
End Sub

le probleme c'est qu'il copie les lignes à chaque fois que j'execute le code.

avec le code suivant :

Sub VirementLDDLaurent()
Dim LCopier As Long
Dim LColler As Integer
Dim FCopier As Worksheet
Dim FColler As Worksheet
Set FCopier = Worksheets("CIC")
Set FColler = Worksheets("LDD Laurent")

LColler = 7
With FCopier
For LCopier = 3 To 10000
If .Cells(LCopier, 2).Text = "Virement" Then
If .Cells(LCopier, 3).Text = "LDD Laurent" Then
FCopier.Range(.Cells(LCopier, 1), .Cells(LCopier, 3)).Copy FColler.Cells(LColler, 1)
.Cells(LCopier, 6).Copy FColler.Cells(LColler, 7)
LColler = LColler + 1
End If
End If
Next
End With
Application.CutCopyMode = False
End Sub

cela fonctionne mais il colle à la suite du dernier collage et donc il efface mes entrées manuelles.

à la fin je voudrais qu'elle copie les lignes qui correspondes aux criteres apres la derniere ligne ecrite et qu'elle ne copie qu'une seule fois les données car je voudrais l'automatiser à chaque demarrage du fichier.
avez vous une idée car la je suis perdu?

je viens encore de modifier comme ceci :

Sub VirementLDDLaurent()

Dim LCopier As Long
Dim LColler As Integer
Dim FCopier As Worksheet
Dim FColler As Worksheet
Set FCopier = Worksheets("CIC")
Set FColler = Worksheets("LDD Laurent")

LColler = FColler.[a65000].End(xlUp).Row + 1
With FCopier
For LCopier = 3 To 10000
If .Cells(LCopier, 2).Text = "Virement" Then
If .Cells(LCopier, 3).Text = "LDD Laurent" Then
FCopier.Range(.Cells(LCopier, 1), .Cells(LCopier, 3)).Copy FColler.Cells(LColler, 1)
.Cells(LCopier, 6).Copy FColler.Cells(LColler, 7)
LColler = FColler.[a65000].End(xlUp).Row
End If
End If
Next
End With
Application.CutCopyMode = False
End Sub

la il n'efface pas ma ligne rentrée manuellement mais il recopie la derniere copie à chaque fois que je l'execute.

en attente de votre aide, je vais surfer un peu voir si je trouve autre chose.

cordialement
 
Dernière édition:
Re : La méthode 'range' de l'objet worksheet à échoué

Re,

A propos du type de variable :
si tu as plus de 32 766 lignes, tu auras un message d'erreur avec Integer et il te faudra passer à Long !
Si tu as Long et plus de 10 000 lignes, tu n’auras pas de message mais au delà de ce nombre les lignes correspondantes ne seront pas traitées donc modifie la limite finale de la boucle.

Mais n'ayant pas ton environnement, il est difficile de cerner ton problème.
Tu peux être embêté par un espace, non visible, à la fin d'un mot, par une majuscule, une minuscule en trop ou en moins ...
Voilà un exemple de correction (avec simplification) :
Code:
Option Compare Text 'voir l'aide
  Sub VirementLDDLaurent()
    Dim LCopier As Long, LColler As Long
    Dim FCopier As Worksheet, FColler As Worksheet
    Set FCopier = Worksheets("CIC")
    Set FColler = Worksheets("LDD Laurent")
    LColler = 2
    With FCopier
      For LCopier = 3 To [B]FCopier.[a65000].End(xlUp).Row[/B]
        If .Cells(LCopier, 2) & .Cells(LCopier, 3) = "VirementLDD Laurent" Then
          LColler = LColler + 1
          FCopier.Range(.Cells(LCopier, 1), .Cells(LCopier, 3)).Copy FColler.Cells(LColler, 1)
          .Cells(LCopier, 6).Copy FColler.Cells(LColler, 7)
        End If
      Next
    End With
  End Sub
... car je voudrais l'automatiser à chaque demarrage du fichier.
avez vous une idée car la je suis perdu?
...
Là, je ne comprends pas !
 
Re : La méthode 'range' de l'objet worksheet à échoué

bonjour,

merci pour les explications sur long et interger.
j'ai copié ton code mais toujours le meme probleme il efface ma ligne rentrée manuellement pour mettrte celle trouvé par la macro à la place.
je joins mom fichier pour mieux comprendre
cordialement.
 

Pièces jointes

Re : La méthode 'range' de l'objet worksheet à échoué

bonjour,
voici alors mes explications
je voudrais copier toutes les lignes contenant "Virement" et "LDD" du tableau 1 vers le tableau 2
sachant que dans le tableau 2 il peut aussi y avoir des entrees à l'aide de "formulaire" le userform ouvert avec le bouton en haut à droite.
le dernier code pour ma macro copie bien les lignes du tableau 1 mais à la suite de la derniere copie, et donc efface la ligne rentré avec "formulaire"

je joinds mon classeur avec des explications.

cordialement
 

Pièces jointes

Re : La méthode 'range' de l'objet worksheet à échoué

Re,

Le problème est de savoir quand tu lances cette macro et ce que tu veux exactement.

S'il s'agit de recopier la dernière saisie, ce code suffit :
Code:
Sub VirementLDDLaurent()
  Dim LCopier As Long, LColler As Long
  Dim FCopier As Worksheet, FColler As Worksheet
  Set FCopier = Worksheets("CIC")
  Set FColler = Worksheets("LDD Laurent")
  LCopier = FCopier.[A32000].End(xlUp).Row
  LColler = FColler.[A32000].End(xlUp).Row
  With FCopier
    If .Cells(LCopier, 2) & .Cells(LCopier, 3) = "VirementLDD Laurent" Then
      LColler = LColler + 1
      .Range(.Cells(LCopier, 1), .Cells(LCopier, 7)).Copy FColler.Cells(LColler, 1)
      FColler.Cells(LColler - 1, 8).Copy FColler.Cells(LColler, 8)
    End If
  End With
End Sub
sachant quand même que tu recopieras n fois la même ligne en cas de n appels successifs !

Si tu veux tout recopier en gardant les saisie dejà faites, il faudra une autre macro.
Celle-ci pourra être simplifiée si tu prévois un tri par date mais dans l'état actuel des choses ...

T'es-tu fixé des limites de développement de ton projet ?
Pris par d'autres interventions, je ne pense pas aller plus loin .
 
Re : La méthode 'range' de l'objet worksheet à échoué

bonjour merci pour ton aide,
mais je souhaite que la macro copie uniquement les lignes qui ne sont pas déjà copier.
mon autre probleme c'est que la macro s'executera à chaque entrée dans le tableau 1 c'est pour cela que je veux qu'elle copie que se qui n'est pas déjà present dans le tableau 2.
je te remercie pour ton aide.
je vis faire une autre sujet avec le bon titre et chercher de mon coté si je ne trouve pas une solution
 
- 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

E
Réponses
2
Affichages
3 K
Edouarda65
E
Retour