Macro excel

Abel -  
 Abel -
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 10442 Statut Modérateur 758
 
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
Abel
 
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 10442 Statut Modérateur 758
 
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 10442 Statut Modérateur
 
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   Statut Contributeur Dernière intervention   435
 
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
Abel
 
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   Statut Contributeur Dernière intervention   435
 
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
Abel
 
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   Statut Contributeur Dernière intervention   435
 
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
Abel
 
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
 
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
Abel
 
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
Abel
 
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
 
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
Abel
 
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