EXCEL97
Résolu
Bonjour,
Je suis rouillée question code, mais si vous m'expliquez ça peut revenir. Voilà j'ai une imputbox, qui demande le nombre de ligne utilisé (nombre), et je souhaiterai donc faire un range de A, nombre : IU nombre.... le coller c'est autre chose.
Moi j'avais pensé à ça , mais ça ne marche pas :
Range("(Cells(nombre, a).Value) : (Cells(nombre,iu).value")).Select
Le code que j'ai pour le moment c'est ça :
Range("A12:IU41").Select
Selection.Copy
Sheets("Synthèse").Select
Range("A12:IU41").Select
ActiveSheet.Paste
Range("a1").Select
Sheets("LS").Select
Range("a1").Select
Application.CutCopyMode = False
LOULOU
Je suis rouillée question code, mais si vous m'expliquez ça peut revenir. Voilà j'ai une imputbox, qui demande le nombre de ligne utilisé (nombre), et je souhaiterai donc faire un range de A, nombre : IU nombre.... le coller c'est autre chose.
Moi j'avais pensé à ça , mais ça ne marche pas :
Range("(Cells(nombre, a).Value) : (Cells(nombre,iu).value")).Select
Le code que j'ai pour le moment c'est ça :
Range("A12:IU41").Select
Selection.Copy
Sheets("Synthèse").Select
Range("A12:IU41").Select
ActiveSheet.Paste
Range("a1").Select
Sheets("LS").Select
Range("a1").Select
Application.CutCopyMode = False
LOULOU
Configuration: Windows XP Internet Explorer 6.0
27 réponses
Résumé de la discussion
Problème rencontré : construire en VBA une plage dynamique allant de la colonne A jusqu'à IU pour une ligne déterminée par une valeur saisie via une InputBox, afin d'effectuer ensuite copier-coller ou traitement. Plusieurs réponses préconisent d'assembler dynamiquement l'adresse de la plage avec la concaténation des numéros de ligne, par exemple Range("A" & i_ls & ":IU" & i_ls).Select, puis d'ajouter une seconde variable i_lsa si nécessaire. En pratique, des essais ont montré des erreurs de compilation liées à des séparateurs ou guillemets manquants, et l'approche Range("A" & i_ls & ":IU" & i_lsa).Select est privilégiée pour délimiter les bornes.
-
Bonjour à tous!
J'ai quasiment fini mon planning !! 2 problèmes persistes :
1) Je crée un goupe pour cacher les lignes vides sur un tableau D, mais si ce tableau n'a pas de groupe, je veux dire lors de la première utilisation, cela plante. Car dans mon code, je faisais enlever tout les groupes avant d'en recréer un
' on enlève tout group qui aurait pu être crée
Range("A12:A" & début_selection_dev).Select // ce sera toujours de 12 à 132 (132 étant égal à deux max)
selection.Rows.Ungroup
selection.EntireRow.Hidden = False
Range("a1").Select
'on cache les lignes vides
'Rows("fin_ls_lsa :avant_debut_devdiv").Select // j'ai contourné le problème en faisant un range
Range("A" & fin_ls_lsa & ":A" & début_selection_dev).Select
selection.Rows.Group
selection.EntireRow.Hidden = True
Range("a1").Select
Il faudrait en faite faire un s'il n'y a pas de groupe alors groupe, s'il y en a un, alors enlevé groupe...A vos idées si vous m'avez comprises...mais cette aprés midi je mets le fichier en ligne.
2) Les protections :
Le tableau A, reçoit toutes les données des autres tableaux, et il je le protège mais en code vba quand je veux le dévérouiller ça ne fonctionne pas. J'ai mis ça :
Sheets("Feuil1").Unprotect , password:="louise"
Il faut forcément que ce soit dévérouillée par code vba, car pour le tableau d et e, il y a des éléments aussi qui doivent être vérouillée...
bref je suis perdue dans le vérouillage !!!
merci de votre aide
loulou -
Salut loulou je n'ai pas eu le temps de m'occuper de ton problème.
Qui plus est, Eriic s'occupait de toi.
A priori, tu n'est pas en RSO. Donc tu dois le simuler. A savoir: considérant les services TOTO, TITI, TATA qui doivent chacun inscrire leur planning dans le tableau "Synthèse"
Essaye de créer une feuille cachée avec une ligne qui récupère la dernière ligne inscrite.
Tu ajoutes un espace. La prochaine fois, le bouton ajouter le tableau se remettra en place. C'est difficile d'être vraiment clair, mais l'idée est là.
J'attend un fichier d'avancement, afin que nous ne nous "marchions pas dessus".
Rassure toi ceux qui aident font aussi cela e nplus de leur boulot. -
Bonjour à tous,
Eriic je comprends ton énèrvement mais si je suis venue poster c'est que ça ne fonctionait pas.
'Rows(fin_ls_lsa :avant_debut_devdiv).Select // j'ai mis ça en commentaire pour pouvoir avancer (erreur 13, type incompatible)
Rows("40:131").Select
Selection.Rows.Group
Selection.EntireRow.Hidden = True // je fais un groupe pour cacher les lignes vides.
Range("a1").Select
En effet, dandypunk, je vais te remettre un fichier de l'état d'avancement de mon projet. Mais pour le tableau C, il y a le A et le B qui sont en premier, du coup je suis obligée de laisser la place pour les maximums de A et C et afin qu'on ne voit pas les lignes blanches de 40 à 131 pour l'exemple d'ici car ce sera une donnée variable, je fais un hidden. ça marche super.
Une fois finie ça, c'est beaucoup de copier coller, et aprés mettre des protections et ce sera ok. En revanche je voulais savoir est ce normal la taille du fichier excel. Est ce parce qu'il y a beaucoup d'onglets, ou le code un peu trop lourd, car je sais qu'on pourrait le simplifier mais bon...
Si vous voulez je fais ça en plus de mon boulot, pour les besoins de la boite, mais au plus ça va, au plus je manque de temps alors....
merci à tous de votre aide, et eriic j'essayerai de ne pas poster inutilement, mais c'était pour m'éviter de chercher....
loulou -
Bonjour à tous,
Eriic je comprends ton énèrvement mais si je suis venue poster c'est que ça ne fonctionait pas.
'Rows(fin_ls_lsa :avant_debut_devdiv).Select // j'ai mis ça en commentaire pour pouvoir avancer (erreur 13, type incompatible)
Rows("40:131").Select
Selection.Rows.Group
Selection.EntireRow.Hidden = True // je fais un groupe pour cacher les lignes vides.
Range("a1").Select
En effet, dandypunk, je vais te remettre un fichier de l'état d'avancement de mon projet. Mais pour le tableau C, il y a le A et le B qui sont en premier, du coup je suis obligée de laisser la place pour les maximums de A et C et afin qu'on ne voit pas les lignes blanches de 40 à 131 pour l'exemple d'ici car ce sera une donnée variable, je fais un hidden. ça marche super.
Une fois finie ça, c'est beaucoup de copier coller, et aprés mettre des protections et ce sera ok. En revanche je voulais savoir est ce normal la taille du fichier excel. Est ce parce qu'il y a beaucoup d'onglets, ou le code un peu trop lourd, car je sais qu'on pourrait le simplifier mais bon...
Si vous voulez je fais ça en plus de mon boulot, pour les besoins de la boite, mais au plus ça va, au plus je manque de temps alors....
merci à tous de votre aide, et eriic j'essayerai de ne pas poster inutilement, mais c'était pour m'éviter de chercher....
loulou -
De retour sur la toile.
ARTICLE 1 NE JAMAIS FAIRE CONFIANCE AUX UTILISATEURS. (Oui je hurle)
J'ai vu les précédent post. Je prense à étudier le 3) de mon post 7 à savoir :sélectionner uniquement les lignes nécessaires avant le copier coller.
Bonne nuit. -
ContributeurHé loulou !!!!
Tu crois pas que tu exagères ?
Même si ce n'est pas la même fonction qu'en 21 regarde comment sont placées les " " et sers toi un peu de ta tete...
"toto" est une chaine fixe, et on ne met pas les variables entre guillemets !
De quoi à besoin rows(...) entre les ( ) ?
Si tu hésites sur la réponse fais F1 sur rows
eric -
Bonjour
et merci à tout le monde, je ne suis pas toujours très clair mais vous m'avez beaucoup aidé à remettre le pied à l'estrier !!
Rows("& fin_ls_lsa :" & avant_debut_devdiv).Select
je sélectionne les lignes de i à y mais encore une fois la stynthaxe me pose problème !!
help please
loulou -
ContributeurRe,
Effectivement j'avais laissé encore une erreur, la " du bout à enlever.
Range("A" & i_ls & ":IU" & i_lsa).select
eric -
rebonjour,
cela ne fonctionne pas, il me met message d'erreur: Erreur de compilation, attendu : séparateur de liste ou)
Range("A" & i_ls & ":IU" & i_lsa").select
si tu as une autre idée
merci de ton aide
loulou -
bonjour
oui désolée, en fait j'ai été trop vite
Range("A" & i_ls & ":IU" & i_lsa").Select
il y a une deuxième variable !!
merci je vais tester !!!
loulou -
ContributeurBonsoir,
Range("A" & i_ls & ":IU" & i_ls").Select
Mais vu que tu n'as qu'une variable i_ls tu ne selectionneras qu'une ligne
eric -
Bonjour,
Oui au début j'avais besoin de ça. Mais maintenant pour les autres tableaux, qui se mettent aprés le premier, je ne peux plus savoir où cela se termine et où commencer le tableau .
merci mais ça ne fonctionne pas
Range("A & i_ls :IU & i_ls").Select -
ContributeurBonsoir,
le : doit ête dans les ""
Range("A" & i_ls ":iu" & i_ls).Select
mais je te rappelle qu'au début tu voulais sélectionner A12:IUxx
Avec ta formule tu ne sélectionneras que la ligne i_ls
eric -
oublier ces deux derniers post !!
Grâce à ton aide dandypunk, je m'y suis remise.
reste comment on écrit ça :
Range("A"&i_ls:"iu"&i_ls).Select ça ne marche pas trop
loulou -
j'ai oublié je mets :
return iCompteurLigne
aprés icompteurligne = icompteurligne - 1
sinon je ne sortait pas effectivement
mais je ne sais plus voir même on peut dire pas, renvoyer une valeur !! j'ai honte !!
merci de votre aide -
J'exécute ce code pas à pas, et tout ce fait ok, le compteur s'arrête bien à 23, ce qui correspond bien à mon test mais en revanche le logiciel bug, comme si j'étais en boucle infernal. Peux tu m'aider ?
Sub Selection_ls()
'
' Macro enregistrée le 07/02/2008 par
'
Dim bLignePrecedenteVide As Boolean
Dim iCompteurLigne As Integer
Dim sCelluleAVerifier As String
bLignePrecedenteVide = False
iLigne_max_ls = 50
For iCompteurLigne = 15 To iLigne_max_ls 'Les infos intéressantes commencent ligne 15
sCelluleAVerifier = "A" + CStr(iCompteurLigne)
Range(sCelluleAVerifier).Select
If (Selection.Value = "") And (bLignePrecedenteVide = False) Then ' la cellule est vide et la ligne précédente non
bLignePrecedenteVide = True ' on passe que la ligne est vide pour le reste du code
' on continue d'incrémenter le compteur, car une seule ligne vide doit être comptée !
Else ' la cellule n'est pas vide et 'bLignePrecedenteVide est à vrai
If (Selection.Value = "") Then 'bLignePrecedenteVide est donc vrai et fin sélection
iCompteurLigne = iCompteurLigne - 1 ' On enlève 1 au compteur pour enlever la deuxième ligne vide.
Else
bLignePrecedenteVide = False
End If
End If
Next
'
End Sub -
Ce n'est pas grave !!
De ton code, je voudrai arriver à faire, que le compteur qui est notre information sur la sélection du nombre de ligne soit conservé et utilisé dans les autres codes pour tout le temps savoir le nombre de lignes.
Je ne sais plus comment, je faisais avant pour avoir cette donnée d'accessible à tout. Là où la procédure est appelé, on aura le icompteurligne ? Qu’en penses tu ?
Sub Selection_ls()
'
' Macro enregistrée le 07/02/2008 par
'
Dim bLignePrecedenteVide As Boolean
Dim iCompteurLigne As Integer
Dim sCelluleAVerifier As String
bLignePrecedenteVide = False
For iCompteurLigne = 15 To iLigneMax 'Les infos intéressantes commencent ligne 15
sCelluleAVerifier = ("A&iCompteurLigne")
Range(sCelluleAVerifier).Select
If (Selection.Value = "") And (bLignePrecedenteVide = False)
Then ‘ la cellule est vide et la ligne précédente non
bLignePrecedenteVide = True ' on passe que la ligne est vide pour le reste du code
' on continue d'incrémenter le compteur, car une seule ligne vide doit être comptée !
Else ‘ la cellule n’est pas vide et 'bLignePrecedenteVide est à vrai
If (Selection.Value = "") ‘ si la ligne est vide
Then 'bLignePrecedenteVide est donc vrai et fin sélection
IcompteurLigne = IcompteurLigne – 1 ‘ On enlève 1 au compteur pour enlever la deuxième ligne vide.
Else
bLignePrecedenteVide = False
End If
End If
Next
'
End Sub -
Désolé pour le pour lui il est vrai que tu avais écrit rouillée
-
Pour elle !!
Oui en effet ça m'aide merci
Je vais voir ça aujourd'hui.
Je souhaite en effet que le nombre de ligne soit variables mais le mieux c'est que l'utilisateur sache combien il en a utilisé. Et je pense mettre un compteur, en bas de la première colonne, un count. et je prendrai ce chiffre comme repère pour tout !!
Je pense ça va marcher !! merci de vos aides, je pense pas avoir été clair, mais je mettrai le tableau une fois fini !! -
ContributeurBonsoir tout le monde,
je n'ai pas pris le temps de regarder les classeurs mais pour répondre à ta 1ère question tu peux te fabriquer ton range ainsi :
i=42
range("A12:IU" & i).cequetuveux
il suffit de concatener
eric
- 1
- 2
Suivant