[resolu] Plage trop grande!

Plage trop grande! [resolu] - VB/VBA/VBS - Programmation

Marsh Posté le 10-07-2006 à 15:02:23    

Salut
 
j'ai réalisé un petit programme dans lequel j'ai besoin de selectionner pleinde petite plage..
je fais donc un range(plage).select  
 
avec plage = A2137:H2137,A2048:H2048,A1959:H1959,A1870:H1870,A1781:H1781,A1692:H1692,A1603:H1603,A1514:H1514,A1425:H1425,A1336:H1336,A1247:H1247,A1158:H1158,A1069:H1069,A980:H980,A891:H891,A802:H802,A713:H713,A624:H624,A535:H535,A446:H446,A357:H357,A268:H268,A179:H179,A90:H90
 
plage etant bien sur déclaré en string
et le prog echoue lors de cette selection.
que se passe t'il?
 
merci  
 
lden


Message édité par lden le 10-07-2006 à 21:44:56
Reply

Marsh Posté le 10-07-2006 à 15:02:23   

Reply

Marsh Posté le 10-07-2006 à 15:09:05    

ne dois tu pas ajouter des " avant et après ta liste de plage dans ton set plage = ... ?

Reply

Marsh Posté le 10-07-2006 à 15:12:03    

non puisuqe j'ai defini plage comme etant un string

Reply

Marsh Posté le 10-07-2006 à 15:13:44    

je copie mon code:
 
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
 
voila si ca peut vous aider

Reply

Marsh Posté le 10-07-2006 à 15:19:34    

ton extenstion_formule fait koi ?

Reply

Marsh Posté le 10-07-2006 à 15:22:41    

Ca plante où dans ton code ?

Reply

Marsh Posté le 10-07-2006 à 15:25:17    

cette formule permet d'etendre la plage que j'ai selectionnée pr que ma base soit tj a jour.  
ex :tu as une base de données dans l'onglet 1 et l'onglet X, par des liens dynamiques, corespond avec cette base.
imaginons que tu rajoutes une ligne dans l'onglet 1...il faut que tu la rajoutes dans l'onglet X et que étendes la formule pr que les liens dynamiques soient toujours effectifs!
 
 
Function extension_formule(plage1 As String, plage2 As String)
 
    Range(plage1).Activate
    Range(plage1).Select
    Selection.AutoFill Destination:=Range(plage2), Type:=xlFillDefault
     
End Function

Reply

Marsh Posté le 10-07-2006 à 15:26:23    

Paul ca plante ici::
 
Range(plage1).Select  
 
donc dans la fonction

Reply

Marsh Posté le 10-07-2006 à 15:32:39    

Le range.activate te sert à quoi juste avant un select ?

Reply

Marsh Posté le 10-07-2006 à 15:34:41    


pkoi castes tu en string tes ligalpha et co ? les mettre en int n'est-il pas mieux dans ton cas ?

Reply

Marsh Posté le 10-07-2006 à 15:34:41   

Reply

Marsh Posté le 10-07-2006 à 15:38:05    

arfff les gars je me suis planté ca plante ici:
 
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   'ici......
 
merci

Reply

Marsh Posté le 10-07-2006 à 15:40:01    

le range.activate je l'ai mis car la macro sur laquelle je m'etais basé en mettais un en tout cas meme sans ca plante

Reply

Marsh Posté le 10-07-2006 à 15:41:27    

l'erreur c'est Run-time error '1004':
 
Methode 'Range' of object'_Global' failed

Reply

Marsh Posté le 10-07-2006 à 15:42:16    

Et avec ca ca fonctionne ?

Reply

Marsh Posté le 10-07-2006 à 15:43:45    

lden a écrit :

arfff les gars je me suis planté ca plante ici:
 
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   'ici......
 
merci


dans le cas ou i<> nombre_de_depot-1 tu te retrouve avec un plage qui commence par ,A...
mets à la limite ceci :
plage = plage + "A" + ligAlpha + ":H" + lig Alpha

Reply

Marsh Posté le 10-07-2006 à 15:44:17    

avec quoi? non pourtant je defini bien ma plage...

Reply

Marsh Posté le 10-07-2006 à 15:47:56    

'initialisation de la chaine plage à vide
plage = ""
 
For i = 0 To (nombre_de_depot - 1)  
    ligAlpha = CStr(lig_insertion + (nb_item_de_base * i))  'sur cette ligne je te fais confiance v po vérifier
    If i = nombre_de_depot - 1 Then  
        plage = plage & "A" & ligAlpha & ":H" & ligAlpha  
    Else  
        plage = plage & "A" & ligAlpha & ":H" & ligAlpha & ","  
    End If  
     
Next  
Range("A1" ).Activate  
    Range(plage).Select

Reply

Marsh Posté le 10-07-2006 à 15:57:28    

arff j'ai mis ton code JP et rien a faire meme erreur sacre bleu!
pourtant la plage est bien définie
 
la vraiment VBA fait ch...

Reply

Marsh Posté le 10-07-2006 à 15:58:44    

vire le .activate et mets ca à la place
msgbox plage
 
pour voir si ca te file ce que tu attend ou pas

Reply

Marsh Posté le 10-07-2006 à 16:01:06    

Avec ca ca doit mieux marcher.
plage = ""  
 
For i = 0 To (nombre_de_depot - 1)  
    ligAlpha = CStr(lig_insertion + (nb_item_de_base * i))  'sur cette ligne je te fais confiance v po vérifier  
    If i = 0 then  
        plage = "A" & ligAlpha & ":H" & ligAlpha  
    Else  
        plage = plage & ",A" & ligAlpha & ":H" & ligAlpha
    End If  
       
Next  
Range("A1" ).Activate  
    Range(plage).Select
 
edit : Effectivement c'est le même code que JP mais à l'envers.


Message édité par Paul Hood le 10-07-2006 à 16:08:08
Reply

Marsh Posté le 10-07-2006 à 16:05:14    

bon je copie toute ma fonction avec le code de jp, paul j'essaie le tiens mais je ne pense pas que l'erreur vienne de la!
 
Function PlageSelectionRegion(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
 
i = 0
'initialisation de la chaine plage à vide
plage = ""
'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 = plage & "A" & ligAlpha & ":H" & ligAlpha
    Else
        plage = plage & "A" & ligAlpha & ":H" & ligAlpha & ","
    End If
Next
Range("A90" ).Activate
Range(plage).Select
 
 
'Ajout d'item
If cas = 1 Then
 
    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
    Selection.Delete Shift:=xlUp
End If
End Function

Reply

Marsh Posté le 10-07-2006 à 16:09:59    

arff tj pas...

Reply

Marsh Posté le 10-07-2006 à 16:12:22    

lden a écrit :

arff tj pas...


juste un truc, tu mets kel valeur à lig_insertion ? une variable à 0 ca te fait planter automatikement aussi :s

Reply

Marsh Posté le 10-07-2006 à 16:13:47    

Et avec le msgbox (plage) ca donne une string correcte ?
Le plantage est bien sur le select suite à la premiere boucle ?

Reply

Marsh Posté le 10-07-2006 à 16:29:28    

Une autre question : nombre_de_depot c'est quoi sa valeur max ?

Reply

Marsh Posté le 10-07-2006 à 18:06:11    

lol j'ai trouvé la chaine string vaut plus que 256!!
y a t'il un moyen de definir un "long string"
 
trop marrant ce depassement de capa de mer...

Reply

Marsh Posté le 10-07-2006 à 18:10:22    

lden a écrit :

lol j'ai trouvé la chaine string vaut plus que 256!!
y a t'il un moyen de definir un "long string"
 
trop marrant ce depassement de capa de mer...


plutot que de gérer avec une string, je te propose de faire une sélection progressive, avec des ajouts réguliers dans ta selection. ca évite les dépassement de mer.... ;)

Reply

Marsh Posté le 10-07-2006 à 18:52:50    

Bonsoir,
Utilise Union
A+

Reply

Marsh Posté le 10-07-2006 à 18:58:03    

Exemple:

Code :
  1. Union(Range( _
  2.         "G87,H83,I79:I80,J76:J77,L78,K83,J85,K89,J91,H92:I92,G93,F94,D94:E94,C94,B94,A98:D101,E100:H101,J99:K100,B104:J105,A109:G111,A115:G116,A120:F123,A127:F130,H126:K130,B133:I135,B139:I141,B143:I144,A1:D3,A6:E6,A9:E9,A13:E13,C16:E18" _
  3.         ), Range( _
  4.         "A21:E22,A25:E26,A29:E30,C33:F36,A39:E40,A44:D44,F45,B49:E49,A54:E54,B57:F57,A61:E61,A63:F63,A66:F66,A68:F68,A70:F70,A72:F72,A74:F74,A76:F76,A78:F78,A80:F80,A82:F82,A84:F84,A86:F86,B89,D90,E89,G89" _
  5.         )).Select


Tu peux mettre autant de Range que tu veux...
A+

Reply

Marsh Posté le 10-07-2006 à 19:11:38    

t un killer galopin01 merci!
bonne soirée à toi!

Reply

Marsh Posté le 10-07-2006 à 20:52:25    

hehe je vais essayer ton truc galopin!

Reply

Marsh Posté le 10-07-2006 à 21:33:41    

euh galopin ca marche pas voila le code:
 
Dim plage1 As String
Dim plage2 As String
Dim plage_dest As String
 
i = 0
'initialisation de la chaine plage à vide
plage1 = ""
plage2 = ""
'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 = 0 Then
    plage1 = "A" & ligAlpha & ":H" & ligAlpha
     
ElseIf i < Fix(nombre_de_depot - 1) / 2 Then
    plage1 = plage1 & ",A" & ligAlpha & ":H" & ligAlpha
     
ElseIf i = Fix(nombre_de_depot - 1) / 2 Then
    plage2 = "A" & ligAlpha & ":H" & ligAlpha
     
ElseIf i > Fix(nombre_de_depot - 1) / 2 Then
    plage2 = plage2 & ",A" & ligAlpha & ":H" & ligAlpha
 
End If
 
Next
plage2 = "," & plage2
Union(Range(plage1), Range(plage2)).Select

Reply

Marsh Posté le 10-07-2006 à 21:40:17    

arf considerez le code sans plage2 = ","&plage2
 
j'ai comme l'impression qui kiffe pas les range dans ma fonction...
 
merci

Reply

Marsh Posté le 10-07-2006 à 21:42:29    

alors je confirme galopin ca marche seulement si je lui met des range ("A1:B3,A26" )...
moi je fais passer mes plages grace a plage1 et plage2 et la ca marche plus!!!!

Reply

Marsh Posté le 10-07-2006 à 21:44:21    

ce bon j'ai rien dit galopin te un dieu!!!!
 
++++++++
 
et merci Galopin Paul et JP!!

Reply

Marsh Posté le 10-07-2006 à 21:45:48    

Ben... je peux pas t'en dire plus.  
Mon truc y marche, ça c'est du béton.  
Ta macro c'est une autre histoire. YFO voir : YFO déboguer
Au besoin tu fais 4 Range :
Union(Range(plage1), Range(plage2), Range(plage3), Range(plage4)).Select
déjà à la fin ton:
plage2 = "," & plage2   :heink:  
y vient la dedans comme des cheveux sur la soupe ?
Pour le débogage, je peux pas faire à ta place...
examine le contenu de tes variables, YA tout un outillage des fenêtres d'exécution : debug.print, msgbox, les espions...
A+


Message édité par galopin01 le 10-07-2006 à 21:46:27
Reply

Marsh Posté le 10-07-2006 à 22:26:47    

t'inkiet tt marche
++

Reply

Marsh Posté le 11-07-2006 à 09:38:59    

Tu peux faire des UNION au fur et a mesure tu n'es plus limité
 
Dim plage As String
Dim ligAlpha As String
Dim Rplage As Range
Dim RTemps As Range
plage = ""
For i = 0 To (nombre_de_depot - 1)
    ligAlpha = (lig_insertion + (nb_item_de_base * i))
    If i = 0 Then
        Set Rplage = Range("A" + ligAlpha + ":" + "B" + ligAlpha)
    Else
        Set Rplage = Union(Rplage, Range("A" + ligAlpha + ":" + "B" + ligAlpha))
    End If
     
Next
Range("A1" ).Activate
Rplage.Select

Reply

Marsh Posté le 11-07-2006 à 10:07:18    

oue merci paul

Reply

Marsh Posté le 11-07-2006 à 11:42:00    

paul prkoi avait tu defini un rtemps.
en fait ca ne marche pas car lors e la selection ca efface ce qu'il y avait en dessous!!???

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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