La methode range.select - VB/VBA/VBS - Programmation
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
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+
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 
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+
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 ?
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.  
 
A+ 
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... 
 
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
++