Fonction "range" [Résolu]

Messages postés
52
Date d'inscription
jeudi 26 juin 2008
Statut
Membre
Dernière intervention
2 octobre 2008
- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 29 mai 2012 à 11:39
bonjour,

dans mon code, jé déduis la valeur d'une variable Ligne et la valeur d'une variable Colonne.
ces 2 valeurs sont des entiers.

je veux ensuite copier la zone correspondant à ces valeurs.
concrétement, si Ligne =7 et Colonne =9

je veux copier la zone "I7:I1000"  (1000 est fixe ds mon code)

Comme je n'ai que des entiers, je voulais savoir s'il existe un moyen de "concaténeré la fonction :
ActiveSheet.Range("I7:I1000").Copy

merci,
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
3
Merci
Salut,
Essaie peut etre

ActiveSheet.Range(ActiveSheet.Cells(Ligne, Colonne), ActiveSheet.Cells(1000, Colonne)).Copy
   'OU Alors
   WorkSheets("NomFeuille").Range(WorkSheets("NomFeuille").Cells(Ligne, Colonne), WorkSheets("NomFeuille").Cells(1000, Colonne)).Copy, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i€n
Pensez: Réponse acceptée

Dire « Merci » 3

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

Codes Sources 139 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
0
Merci
Salut,

NOTE: Range n'est pas une FOnction mais un Objet

Essaies
Dim Ligne As Long
   Ligne = 7
   ActiveSheet.Range("I" & CStr(Ligne) & ":I1000").Copy, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
52
Date d'inscription
jeudi 26 juin 2008
Statut
Membre
Dernière intervention
2 octobre 2008
0
Merci
d'accord objet, je note.

oui ça marchepour la ligne, mais comment faire pour la colonne??

pcq la lettre "I" vient de ma variable Colonne qui est ici égale à 9.

comment insérer cette sorte de traduction dans l'objet range??
Commenter la réponse de Roussetj
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
0
Merci
Salut,
Dans ce cas Utilise Cells En plus

Dim Ligne As Long
Dim Colonne As Byte
   
   Ligne = 7
   Colonne = 9
   Range(Cells(Ligne, Colonne), Cells(1000, Colonne)).Select, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
52
Date d'inscription
jeudi 26 juin 2008
Statut
Membre
Dernière intervention
2 octobre 2008
0
Merci
oui merci ça marche presque, mais j'ai encore un petit problème.

la zone que je veux copier ne se situe sur la page initiale.

et lorsque je mets cette ligne:

ActiveSheet.Range(Cells(Ligne, Colonne), Cells(1000, Colonne)).Copy

il y a un message d'erreur: "erreur 1004"
                                       "application-defined or object-defined error"

alors que sans "activesheet" VBA ne met pas de message d'erreur, mais je ne selectionne pas la zone de la bonne feuille.
Commenter la réponse de Roussetj
Messages postés
52
Date d'inscription
jeudi 26 juin 2008
Statut
Membre
Dernière intervention
2 octobre 2008
0
Merci
oui merci ça marche, je n'avais pas pensé à mettre activesheet de vant toutes les cellules...

merci beaucoup.
Commenter la réponse de Roussetj
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8
0
Merci
Salut,

d'ou l'avantage avec excel d'utiliser le with pour simplifier l'ecriture du code :

With ActiveSheet
    .Range(.Cells(Ligne, Colonne), .Cells(1000, Colonne)).Copy
End With

   'OU Alors

With WorkSheets("NomFeuille")
    .Range(.Cells(Ligne, Colonne), .Cells(1000, Colonne)).Copy
End With
Commenter la réponse de bigfish_le vrai
Messages postés
30
Date d'inscription
mercredi 23 mai 2012
Statut
Membre
Dernière intervention
13 août 2012
0
Merci
Je déterre le sujet car je traine un problème récurrent sur les méthode Range

En effet j'importe des résultats dans Excel mais je ne sais pas la taille de ces résultats

Quand de temps en temps leur taille est d'une seule ligne (ou colonne mais ce n'est pas mon cas)

La méthode classique

Range("B2").End(xlDown).Address  (ou Rows)

me renvoit donc une ligne infinie si je n'ai rien en B3

Est il possible d'avoir une option pour que ça renvoi B2,actuellement je passe par des conditions if mais ça alourdi le codage
1)condition si rien en B2
2)condition si quelque chose en B2 et rien en B3
3)condition si quelque chose en B2 et quelquechose B3
Commenter la réponse de DamienGB
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
267
0
Merci
Bonjour,
Quelles sont les situations possibles exactes ?
Tu démarres de B2, OK
Mais que cherches-tu ensuite ?
- la dernière cellule remplie de la totalité de la colonne B à partir de B2 ?
ou
- la dernière cellule remplie (à partir de B2) avant une cellule blanche dans la colonne B, y compris si d'autres cellules sont remplies plus bas ?
Cela ne se détermine pas de la même manière. Il te faut donc être très précis sur ce que tu cherches à faire.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
30
Date d'inscription
mercredi 23 mai 2012
Statut
Membre
Dernière intervention
13 août 2012
0
Merci
Non je n'ai pas de cellule vide dans ma colonne

Ce qui me pose pose problème c'est la recherche de dernière ligne quand il y en a qu'une seule.

http://www.hostingpics.net/viewer.php?id=9675551024.png
Là tout marche bien mon
Range("B2").End(xlDown).Address
me renvoi bien

http://www.hostingpics.net/viewer.php?id=5572751025.png
Range("B2").End(xlDown).Address
me renvoi B100...
et je voudrait simplement B2
(j'arrive à le faire en utilisant des conditions)
If Range("B2").Value = "" Then

ne rien faire
...
If Range("B2").Value <> "" And Range("B3").Value = "" Then

le faire que pour la case B2
...
If Range("B2").Value <> "" And Range("B3").Value <> "" Then

le faire jusqu'à la case issue du Range("B2").End(xldown).Address
...

Mais il existe peut etre une option de Range pour le faire??

En fait j'importe des résultat sous Excel dont je ne connais pas la taille
Commenter la réponse de DamienGB
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
267
0
Merci
Si tu n'as pas de cellules vides dans la colonne B
que te donnerait :
MsgBox Range("B2:B" & Rows.Count).SpecialCells(xlCellTypeBlanks).Row

Le rang de la première cellule vide de la colonne B à partir du rang 2. Non ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.