La methode range.select

La methode range.select - VB/VBA/VBS - Programmation

Marsh Posté le 06-06-2006 à 16:40:37    

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
++

Reply

Marsh Posté le 06-06-2006 à 16:40:37   

Reply

Marsh Posté le 07-06-2006 à 09:44:14    

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

Reply

Marsh Posté le 12-06-2006 à 17:33:20    

vous ne savez pas comment faire??

Reply

Marsh Posté le 12-06-2006 à 18:20:30    

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+

Reply

Marsh Posté le 14-06-2006 à 18:26:05    

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

Reply

Marsh Posté le 14-06-2006 à 19:23:07    

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+

Reply

Marsh Posté le 14-06-2006 à 19:50:17    

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
Reply

Marsh Posté le 14-06-2006 à 21:20:13    

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+

Reply

Marsh Posté le 15-06-2006 à 09:29:28    

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...
 

Reply

Marsh Posté le 15-06-2006 à 17:19:50    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed