[VBA-Excel] selection d'une plage variable

selection d'une plage variable [VBA-Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 06-05-2013 à 16:44:08    

Bonjour à tous!
j'ai vu 2 autres sujets qui traitent du même thème chez HFr. mais les réponses apportés ne m'ont pas aidé :(
 
voilà ma situation,  
j'ai tout un tableau de donnée dans la feuille2, le tableau prend les colonnes A à F. le nombre de ligne utilisé dépend du produit étudié.  
le but de la manoeuvre est de copier la dernière partie de ce tableau, qui correspond à tous les retours garantis de l'année comptable en cours, pour coller tout ça dans la feuille 3.
 
j'ai donc déclaré 2 variables.

Code :
  1. Dim DernLigne As Long
  2. Dim PremLigne As Long
  3. DernLigne = Range("A" & Rows.Count).End(xlUp).Row
  4. PremLigne = [K19]
  5. 'l'enregistreur de macro m'a permis d'écrire.
  6. Range("A66:F140" ).Select
  7. 'Range("APremLigne:FDernLigne" ).Select  'j'ai tenté ce code, mais il ne reconnaît pas PremLigne=66 ni DernLigne=140 
  8. Selection.Copy
  9. Sheets("Feuil3" ).Select
  10. ActiveSheet.Paste


 
j'ai un code d'erreur '1004'
la methode 'Range' de l'objet '_global' à échoué.  
 
j'ai placé tous mes codes dans des modules.
 la partie Microsoft Excel Objet est vide.  
 
comment utiliser correctement mes 2 variables pour selectionner une plage de cellule?  
 
Merci


Message édité par larmabak le 07-05-2013 à 09:54:23
Reply

Marsh Posté le 06-05-2013 à 16:44:08   

Reply

Marsh Posté le 06-05-2013 à 17:26:52    

Ca te dirait pas d'apprendre la syntaxe du VBA :??:
 
Range("A" & PremLigne & ":F" & DernLigne).Select
 
A noter que si tu veux pas t'embêter avec les lettres dans les adresses de cellules, la fonction Cells() sera plus pratique. :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 06-05-2013 à 19:44:36    

 
           Bonjour larmabak !
 
           En dehors du message d'erreur, c'est bien aussi d'indiquer la ligne le déclenchant et d'utiliser aussi les balises de code du forum !
 
           En ayant lu les autres sujets, tu as dû comprendre qu'un bon code est sans Select


Message édité par Marc L le 06-05-2013 à 19:45:15
Reply

Marsh Posté le 07-05-2013 à 09:49:33    

Bonjour Rufo! oui je suis là pour ça. apprendre.  
c'est vrai que j'avais completement oublié le caractère de concaténation &.  
et quand j'ai vu ton code j'me suis dit que j'était trop con de pas y avoir penser. mais j'ai une erreur de compilation quand je fini de taper la ligne, un séparateur de liste ou ) est attendu, le message surligne ":F"
je dois mettre un espace entre & et PremLigne?  
 
j'ai essayé aussi avec cells

Code :
  1. Cells(PremLigne,1:DernLigne,6).select


mais là aussi, je n'ai pas du utiliser la fonction correctement.  
on peut selectionner une plage de cellules avec Cells()?
 
ça fait un moment que j'ai appris le vba, je ne me souviens pu de toutes les syntaxes.  
 
 
Bonjour Marc L  
j'ai appris à programmer sur visualbasic, il y a 3 ans, et mtn je reprend le clavier sur Excel, je découvre peut à peut les fonctions et syntaxtes qui sont propre à Excel (comme Range et Cells), donc en effet, j'ai compris que Select c'était pas l'idéal, mais je ne sait toujours pas quoi mettre à la place.
 
Merci pour vos conseils!

Reply

Marsh Posté le 07-05-2013 à 09:59:06    

 
           Rien qu'en consultant l'aide de la méthode  Copy  appliquée à un objet de type Range et son exemple,
           tu te rendras compte qu'il n'y a donc pas besoin de Select - mieux vaut donc travailler directement sur l'objet -
           et au passage tu noteras l'existence de son argument Destination rendant du coup le Paste inutile aussi !
 

Reply

Marsh Posté le 07-05-2013 à 10:18:01    

!ok c'est un peu plus clair, soit on indique tout de suite la destination, soit Excel est obligé d'utiliser le press-papier, c'est beaucoup d'étapes inutile en plus!  
donc mon code doit devenir ,

Code :
  1. Range("A" & PremLigne & ":F" & DernLigne).copy(Feuil3!)


cette ligne est l'équivalent des 4 lignes que j'ai tapé avec mes selection copy paste etc ?  
 
mais j'ai toujours un problème pour déclarer ma plage de cellules....

Reply

Marsh Posté le 07-05-2013 à 11:03:58    

 
           En clair ?   J'ai prêté ma boule de cristal !
 

Reply

Marsh Posté le 07-05-2013 à 13:05:52    

c'est gentil Marc, mais je préfère éviter les boules de cristal, la divination c'est pas trop mon truc!  
 
 
j'ai tenté une autre écriture,  

Code :
  1. Range("A&PremLigne:F&DernLigne" ).copy(Feuil3!)


j'ai une erreur de compilation  
le caractère de déclaration de type ne correspond pas au type de données déclaré.  
Feuil3! est surligné.  
 
j'ai essayé différentes formulations mais pour le moment j'ai pas réussi à écrire correctement ma plage de cellule à copier ni ma destination.

Reply

Marsh Posté le 07-05-2013 à 13:46:23    

 
          L'exemple de Rufo est juste dans ton précédent code mais, ce qui ne l'est pas, c'est ton oubli de la cellule de destination !
 
          Pourtant l'exemple de l'aide est limpide :  […].Copy  Worksheets("Sheet2" ).Range("E5" )


Message édité par Marc L le 07-05-2013 à 13:53:55
Reply

Marsh Posté le 07-05-2013 à 17:35:44    

Range("A & PremLigne:F & DernLigne" ).CopyWorksheets("Feuil3" ).Range ("A1" )
 
cette ligne me donne toujours une erreur d'execution '1004' .
j'ai placé un espion express sur cette ligne, il cible l'expression Range, et lui donne pour valeur <Expression non défini dans le contexte>  
je ne sais pas ce que ça veux dire.  
 
et la ligne de Rufo,  
Range("A" & PremLigne & ":F" & DernLigne).CopyWorksheets("Feuil3" ).Range ("A1" )  
me donne une autre erreur d'execution '438':
Propriété ou méthode non gérée par cet objet
 
 
je suis de plus en plus perdu...  
donc je cherche tout ce que je n'ai pas dit... je suis sur une version 2010.
 
edit: mon dernier test

Code :
  1. Range(Cells(PremLigne, 1), Cells(DernLigne, 6)).Copy Worksheets("Feuil3" ).Range("A1" )


cette ligne fonctionne! enfin!  
mais bon je suis toujours pas content de moi, vu que je n'arrive pas à utiliser correctement & , je gère mal la place des " , : ; dans de simples fonctions comme Range
 
merci de vous casser la tête avec moi


Message édité par larmabak le 07-05-2013 à 17:56:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed