Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1336 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  La methode range.select

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

La methode range.select

n°1382218
lden
Posté le 06-06-2006 à 16:40:37  profilanswer
 

salut  
 
 
il y a il un nombre limité de plage de cellule que l'on peut selectionner grace a range(".....,..." ).select
car moi avec 24 plage ca m'affihce methode range of object Global has failed...
 
merci pr votre aide
++

mood
Publicité
Posté le 06-06-2006 à 16:40:37  profilanswer
 

n°1382579
lden
Posté le 07-06-2006 à 09:44:14  profilanswer
 

euh voila mon code peut etre que ca vous aidera:
 
'Définition de la plage d'insertion
For i = 0 To (nombre_de_depot - 1)        'nombre dep -1 = 23
    ligAlpha = CStr(lig_insertion + (nb_item_de_base * i))
    If i = nombre_de_depot - 1 Then
        plage = "A" + ligAlpha + ":" + "H" + ligAlpha + plage
    Else
    plage = "," + "A" + ligAlpha + ":" + "H" + ligAlpha + plage
    End If
     
Next
Range("A1" ).Activate
    Range(plage).Select        'ici ca plante
    Selection.Insert Shift:=xlDown
 
 
en gros le range(plage) se retrouve avec "A1:H1,.....,"
en sachant qu'il y a 24 ligne ou se produisent l'insertion.
 
N'est on pas limité par le nombre de  plage a utilisé avec la methosde range?
 
merci  
 
lden

n°1385944
lden
Posté le 12-06-2006 à 17:33:20  profilanswer
 

vous ne savez pas comment faire??

n°1385990
galopin01
Posté le 12-06-2006 à 18:20:30  profilanswer
 

bonsoir,  
Non, quoique VBA utilise dans ce cas Union, pas de limitation de principe.
 
Difficile de dire quoi que ce soit avec des bribes de codes : Une macro se compose en général d'un en-tête, de déclarations, d'un corps et se termine avec End Sub
De plus elle est sensible au contexte. Dans quel module est-elle implantée ? Quelle feuille a été activée ?
Il faut donc chercher les réponses dans ton environnement de travail, ou nous communiquer toute la macro.
 
De plus sur le fond ta macro semble un peu alambiquée : Pourquoi faire une sélection multiple pour insérer des lignes ?
A+

n°1387686
lden
Posté le 14-06-2006 à 18:26:05  profilanswer
 

ok, le travail qu elon me demande est assez alambiqué je l'avoue mais bon!
 
je vais copier toute la macro::
 
 
Function plage_selection_region(lig_insertion As Integer, nombre_de_depot As Integer, nb_item_de_base As Integer _
, cas As Integer)
 
Dim plage As String
Dim plage_dest As String
 
'Ajout d'item
If cas = 1 Then
'Pour les régions
'Définition de la plage d'insertion
For i = 0 To (nombre_de_depot - 1)
    ligAlpha = CStr(lig_insertion + (nb_item_de_base * i))
    If i = nombre_de_depot - 1 Then
        plage = "A" + ligAlpha + ":" + "H" + ligAlpha + plage
    Else
    plage = "," + "A" + ligAlpha + ":" + "H" + ligAlpha + plage
    End If
     
Next
Range("A1" ).Activate
    Range(plage).Select
    Selection.Insert Shift:=xlDown
'Extension des formules
For i = 0 To (nombre_de_depot - 1)
    If lig_insertion >= 2 And lig_insertion <= nb_item_de_base + 1 Then
     
        ligAlpha = CStr(lig_insertion + (i + 1) + (nb_item_de_base * i))
        ligAlphaDest = CStr(lig_insertion + i + (nb_item_de_base * i))
        plage = "A" + ligAlpha + ":" + "H" + ligAlpha
        plage_dest = "A" + ligAlphaDest + ":" + "H" + ligAlpha
     
        iret = extension_formule(plage, plage_dest)
         
    ElseIf lig_insertion >= 2 And lig_insertion = nb_item_de_base + 2 Then
     
        ligAlpha = CStr(lig_insertion + (i - 1) + (nb_item_de_base * i))
        ligAlphaDest = CStr(lig_insertion + i + (nb_item_de_base * i))
        plage = "A" + ligAlpha + ":" + "H" + ligAlpha
        plage_dest = "A" + ligAlphaDest + ":" + "H" + ligAlpha
     
        iret = extension_formule(plage, plage_dest)
     
    End If
     
Next i
'Retrait d'un item
ElseIf cas = 2 Then
 
For i = 0 To (nombre_de_depot - 1)
    ligAlpha = CStr(lig_insertion + (nb_item_de_base * i))
    If i = nombre_de_depot - 1 Then
        plage = "A" + ligAlpha + ":" + "H" + ligAlpha + plage
    Else
    plage = "," + "A" + ligAlpha + ":" + "H" + ligAlpha + plage
    End If
     
Next
    Range(plage).Select
    Selection.Delete Shift:=xlUp
End If
End Function
 
 
Function extension_formule(plage1 As String, plage2 As String)
 
    Range(plage1).Activate
    Range(plage1).Select
    Selection.AutoFill Destination:=Range(plage2), Type:=xlFillDefault
     
    'selection de la nouvelle plage crée et remplacement du nom qui a servi a la générer par le nom du nouveau dépôt
    'Selection.Replace What:="X", Replacement:="cournon", LookAt:=xlPart, _
    '    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    '    ReplaceFormat:=False
 
End Function
 
et en gros quand le type veut rajouter un item il faut que ca aille s'implanter au bon endroit. en inserant les criteres de son item via un userform. le probleme ce qu'ici la plage est composée de 24 lignes donc ca bug!
 
merci

n°1387703
galopin01
Posté le 14-06-2006 à 19:23:07  profilanswer
 

bonsoir,
Ton code est assez imbuvable et je ne crois pas que je pourrais m'y retrouver sans le classeur d'origine.
Toutefois j'ai essayé de tester de manière élémentaire des plages multi-zone et il n'est pas certain que tu puisses y arriver avec ce procédé.
Après de multiples expériences, il me semble que tu vas devoir revoir ta copie :
revois l'aide de Range, Collection (que tu peux retrouver dans ton VBA paragraphe  union -méthode- (il faut fouiner un peu dans l'aide intuitive, mots clés range collection; sélectionner une rubrique collection range...)
 
ou en cherchant directement sur le mot union (méthode) dans Voir aussi : Référence à plusieurs plages...
 
A+

n°1387714
fifiz
Posté le 14-06-2006 à 19:50:17  profilanswer
 

Sans même utiliser des macros, on a un message d'erreur si on essais de faire plus de 24 inserts en meme temps donc par macro ça donne la meme chose.
 
Ce que je ne comprends pas c'est pourquoi tu fais pas les insertion de ligne au fur et à messure au lieu de selectionner toutes les ligne concernées avant de faire l'insert ?


Message édité par fifiz le 14-06-2006 à 19:50:57
n°1387772
galopin01
Posté le 14-06-2006 à 21:20:13  profilanswer
 

bonsoir,
Je viens de faire une insertion sur une sélection de 30 plages non contigues de 60 lignes au total et ça à bien fonctionné donc je ne vois pas de problème de ce coté là.
Il n'empêche que je suis quand même un peu de l'avis de fifiz sur la logique du truc, mais bon...
Je te propose de m'envoyer ton fichier (si c'est possible) pour que je l'analyse de plus près.
http://perso.orange.fr/galopin01/images/email.jpg
A+

n°1387911
lden
Posté le 15-06-2006 à 09:29:28  profilanswer
 

salut les mecs ca fait plaisir de voir que mon pb est solvable!
Galopin je t'envoie ca de suite!
par ailleurs pour repondre a ta remarque fifiz je ne le fait pas d'un seul coup car apres j'etend des formules sur la ligne nouvellement crée.
or ca ne marche pas si tu selectionnes plusieurs plages discontinues...
 

n°1388335
galopin01
Posté le 15-06-2006 à 17:19:50  profilanswer
 

Sorry,
Je jette l'éponge sur ce coup.
A+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  La methode range.select

 

Sujets relatifs
Problème avec la méthode openStreamSELECT
Re-designer un composant (méthode Paint)activer un select selon le champs d'un autre select
probleme de select sous IESelect menu
Select simples/multiples : bug IE6?Méthode GET
nombre de lignes et de colonnes d'un rangeProblème de récupération valeur d'un select en javascript avec firefox
Plus de sujets relatifs à : La methode range.select


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR