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