Macro excel

Fermé
Abel - 21 juil. 2005 à 15:39
 Abel - 27 juil. 2005 à 15:55
Bonjour,

J'ai une feuille excel, par exemple feuille1, rempli avec des nombres et des chaines de caractères. Mes donneés occupent, disons les 5 premières lignes et les 8 premières colonnes.
Ainsi mes données forment un rectangle qui va de A1 à E8.
Voilà pour ma situation de départ, maintenant je cherche à écrire une macro qui me renvoi A1:E8 dans une variable x, pour pouvoir enssuite écrire Set liste=Worksheets("feuille1").Range("x")

Quelqu'un a-t-il une idée pour écrire une macro comme ca ?

Merci
A voir également:

12 réponses

dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 757
21 juil. 2005 à 15:42
C'est toujours de A1 à E8?
Si non, qu'est de qui fait que tu prends une ligne ou une colonne dans ta "range"

a+
dje-dje
0
En fait ca peut varier. J'ai pris A1:E8 pour donner un exemple de ce que devrait me sortir la macro dans le cas où je l'appliquerais à ma feuille1, tjs donner comme exemple.
Mais en général ce serai une macro qui me donne le champs des cellules non vide, sachant que ce champs part tjs du sommet gauche et qu'il a une forme rectangulaire. Est-ce plus clair now ?
En tout cas merci de t'intéresser à ma question.
0
dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011 757
21 juil. 2005 à 16:39
Fais une boucle qui part de A1 et va dans le sens de remplissage de ton tableau jusqu'à ce que tu tombes sur une cellule vide.

Tu veux lui faire quoi à cette "range" ensuite?

a+
dje-dje
0
Abel > dje-dje Messages postés 10415 Date d'inscription mardi 6 janvier 2004 Statut Modérateur Dernière intervention 28 janvier 2011
21 juil. 2005 à 17:18
Yep, c'est ce à quoi j'avais pensé : faire un while sur les colonne tant que c'est pas vide et retourner la dernière lettre de colonne non vide, ensuite faire un while sur les lignes tant que c'est pas vide et renvoyer la dernière ligne non vide.
Mais voilà je ne connais pas bien VB et je vois mal comment incremmenter une lettre de colonne(par exemple faire passer la variable de colonne à la colonne suivante dans ma boucle while (A+1 =B ?)). Donc saurais-tu où trouver une esquisse d'un code possible pour ma macro ?
Merci encore
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
21 juil. 2005 à 17:28
Salut,

et voilà :
Sub toto()
Dim i, j
For i = 1 To 65535
If IsEmpty(Range("A" & i)) Then Exit For
Next i
For j = 1 To 255
If IsEmpty(Cells(1, j)) Then Exit For
Next j
Range(Cells(1, 1), Cells(i - 1, j - 1)).Select
End Sub

Bon, c'est fait à la va-vite mais ça doit fonctionner...

A+
0
Merci bcp pour le code, j'ai essayait et il marche bien. J'ai encore une petite question. Quand j'essaie d'écrire
Worksheets("Feuil1").Range(Cells(1,1),Cells(i-1,j-1)).Name="dat"
il m'indique une erreur à l'exécution. Quelqu'un sait-il pourquoi et comment le résoudre ? Merci encore
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
22 juil. 2005 à 15:13
Re,

ça fonctionne bien chez moi, peux-tu mettre le code en entier que je teste ?

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Excuse moi pour ma réponse tardive. Voici le code qui pose problème

Dim i, j As Integer
For i = 1 To 65535
If IsEmpty(Worksheets("taux").Range("B" & i)) Then Exit For
Next i
For j = 1 To 256
If IsEmpty(Worksheets("taux").Cells(2, j)) Then Exit For
Next j
Worksheets("taux").Range(Cells(2, 2), Cells(i - 1, j -1)).Name="tx"
Dim Taux As Range
Set Taux = Worksheets("taux").Range(tx)

Voilà, sûrement que je me complique la vie mais bon ce que je veux en fait c'est attribuer à la variable Taux le plage Cells(2, 2):Cells(i - 1, j -1)

Voila, j'espère que ca peut t'aider. Encore merci
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
26 juil. 2005 à 17:07
Et voilà :
Dim i, j As Integer 
For i = 1 To 65535 
If IsEmpty(Worksheets("taux").Range("B" & i)) Then Exit For 
Next i 
For j = 1 To 256 
If IsEmpty(Worksheets("taux").Cells(2, j)) Then Exit For 
Next j 
Worksheets("taux").Range(Cells(2, 2), Cells(i - 1, j -1)).Name="tx" 
Dim Taux As Range 
Set Taux = Worksheets("taux").Range("tx") 

Voir ligne Set Taux = Worksheets("taux").Range("tx")
A+
0
Merci mais le problème persiste. En fait en faisant executer la macro pas à pas je vois que l'erreur provient de la ligne suivante
Worksheets("taux").Range(Cells(2, 2), Cells(i - 1, j - 1)).Name = "tx"

Il me dit: Erreur d'exécution 1004 Erreur défini par l'objet ou par l'application.

Comprends-tu pourquoi ?
0
Utilisateur anonyme
26 juil. 2005 à 19:16
Bonjour,

Les variables [ i ] et [ j ] ne peuvent prendre la valeur [ 1 ] .

vous obtenez ainsi :
Worksheets("taux").Range(Cells(2, 2), Cells(0,0)).Name="tx"

cette partie [ Cells(0,0) ] ou [ Cells(1,0) ] ou [ Cells(0,1) ] n'est pas admissible.

Établir la boucle sur :

For i = 2 to ...

For j = 2 to ...

Lupin
0
Merci pour votre message. Le problème doit venir d'ailleur, car j'ai essayer d'écrire
Worksheets("taux").Range(Cells(2, 2), Cells(i, j)).Name = "tx"
et j'ai toujour le meme message d'erreur...
0
J'ai fait une petite erreur. Je voulais dire que j'avais essayé la ligne de code suivante :
Worksheets("taux").Range(Cells(1, 1), Cells(i, j)).Name = "tx"
0
Utilisateur anonyme
27 juil. 2005 à 14:34
re:

est-ce que la ligne suivante fonctionne ?

Worksheets("taux").Range(Cells(1, 1), Cells(3,3)).Name = "tx"

chez moi c'est nickel !

Lupin
0
Non le code que tu me propose ne marche pas chez moi...
Mais j'ai trouvé un code qui marche :
Worksheets("taux").Range(Worksheets("taux").Cells(2, 2), Worksheets("taux").Cells(i - 1, j - 1)).Name = "tx"

Merci pour ton temps
0