Plage trop grande! [resolu] - VB/VBA/VBS - Programmation
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 = ... ?
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
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
Marsh Posté le 10-07-2006 à 15:26:23
Paul ca plante ici::
Range(plage1).Select
donc dans la fonction
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 ?
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
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
Marsh Posté le 10-07-2006 à 15:41:27
l'erreur c'est Run-time error '1004':
Methode 'Range' of object'_Global' failed
Marsh Posté le 10-07-2006 à 15:43:45
lden a écrit : arfff les gars je me suis planté ca plante ici: |
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
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
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...
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
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.
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
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
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 ?
Marsh Posté le 10-07-2006 à 16:29:28
Une autre question : nombre_de_depot c'est quoi sa valeur max ?
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...
Marsh Posté le 10-07-2006 à 18:10:22
lden a écrit : lol j'ai trouvé la chaine string vaut plus que 256!! |
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....
Marsh Posté le 10-07-2006 à 18:58:03
Exemple:
Code :
|
Tu peux mettre autant de Range que tu veux...
A+
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
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
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!!!!
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!!
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
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+
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
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!!???
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