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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [resolu] Plage trop grande!

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[resolu] Plage trop grande!

n°1403878
lden
Posté le 10-07-2006 à 15:02:23  profilanswer
 

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
mood
Publicité
Posté le 10-07-2006 à 15:02:23  profilanswer
 

n°1403887
jpcheck
Pioupiou
Posté le 10-07-2006 à 15:09:05  profilanswer
 

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

n°1403893
lden
Posté le 10-07-2006 à 15:12:03  profilanswer
 

non puisuqe j'ai defini plage comme etant un string

n°1403896
lden
Posté le 10-07-2006 à 15:13:44  profilanswer
 

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

n°1403906
jpcheck
Pioupiou
Posté le 10-07-2006 à 15:19:34  profilanswer
 

ton extenstion_formule fait koi ?

n°1403912
Paul Hood
Posté le 10-07-2006 à 15:22:41  profilanswer
 

Ca plante où dans ton code ?

n°1403917
lden
Posté le 10-07-2006 à 15:25:17  profilanswer
 

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

n°1403919
lden
Posté le 10-07-2006 à 15:26:23  profilanswer
 

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

n°1403926
Paul Hood
Posté le 10-07-2006 à 15:32:39  profilanswer
 

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

n°1403931
jpcheck
Pioupiou
Posté le 10-07-2006 à 15:34:41  profilanswer
 


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

mood
Publicité
Posté le 10-07-2006 à 15:34:41  profilanswer
 

n°1403937
lden
Posté le 10-07-2006 à 15:38:05  profilanswer
 

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

n°1403940
lden
Posté le 10-07-2006 à 15:40:01  profilanswer
 

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

n°1403943
lden
Posté le 10-07-2006 à 15:41:27  profilanswer
 

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

n°1403944
Paul Hood
Posté le 10-07-2006 à 15:42:16  profilanswer
 

Et avec ca ca fonctionne ?

n°1403945
jpcheck
Pioupiou
Posté le 10-07-2006 à 15:43:45  profilanswer
 

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

n°1403947
lden
Posté le 10-07-2006 à 15:44:17  profilanswer
 

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

n°1403953
jpcheck
Pioupiou
Posté le 10-07-2006 à 15:47:56  profilanswer
 

'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

n°1403958
lden
Posté le 10-07-2006 à 15:57:28  profilanswer
 

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

n°1403960
jpcheck
Pioupiou
Posté le 10-07-2006 à 15:58:44  profilanswer
 

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

n°1403963
Paul Hood
Posté le 10-07-2006 à 16:01:06  profilanswer
 

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
n°1403973
lden
Posté le 10-07-2006 à 16:05:14  profilanswer
 

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

n°1403982
lden
Posté le 10-07-2006 à 16:09:59  profilanswer
 

arff tj pas...

n°1403986
jpcheck
Pioupiou
Posté le 10-07-2006 à 16:12:22  profilanswer
 

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

n°1403990
Paul Hood
Posté le 10-07-2006 à 16:13:47  profilanswer
 

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

n°1404024
Paul Hood
Posté le 10-07-2006 à 16:29:28  profilanswer
 

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

n°1404114
lden
Posté le 10-07-2006 à 18:06:11  profilanswer
 

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

n°1404121
jpcheck
Pioupiou
Posté le 10-07-2006 à 18:10:22  profilanswer
 

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

n°1404139
galopin01
Posté le 10-07-2006 à 18:52:50  profilanswer
 

Bonsoir,
Utilise Union
A+

n°1404142
galopin01
Posté le 10-07-2006 à 18:58:03  profilanswer
 

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+

n°1404151
jpcheck
Pioupiou
Posté le 10-07-2006 à 19:11:38  profilanswer
 

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

n°1404183
lden
Posté le 10-07-2006 à 20:52:25  profilanswer
 

hehe je vais essayer ton truc galopin!

n°1404201
lden
Posté le 10-07-2006 à 21:33:41  profilanswer
 

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

n°1404204
lden
Posté le 10-07-2006 à 21:40:17  profilanswer
 

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

n°1404205
lden
Posté le 10-07-2006 à 21:42:29  profilanswer
 

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

n°1404207
lden
Posté le 10-07-2006 à 21:44:21  profilanswer
 

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

n°1404208
galopin01
Posté le 10-07-2006 à 21:45:48  profilanswer
 

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
n°1404221
lden
Posté le 10-07-2006 à 22:26:47  profilanswer
 

t'inkiet tt marche
++

n°1404372
Paul Hood
Posté le 11-07-2006 à 09:38:59  profilanswer
 

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

n°1404391
lden
Posté le 11-07-2006 à 10:07:18  profilanswer
 

oue merci paul

n°1404469
lden
Posté le 11-07-2006 à 11:42:00  profilanswer
 

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!!???

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  [resolu] Plage trop grande!

 

Sujets relatifs
[résolu]récupération nom de dossier pour imagesAnnuler un évènement javasript (RESOLU)
[résolu]Lancer un programme au demarrage de windows[RESOLU] POST/GET.... Pourquoi ça marche pas???
Création de factures en PDF --- Résolufonction TRONQUE résolu
[Résolu][Excel] pb de formula[Résolu] Equivalent uft8_encode() en Java?
[RESOLU] vider plusieur sous dossier[Résolu] Fusionner plusieurs feuilles en une seule
Plus de sujets relatifs à : [resolu] Plage trop grande!


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