steeves66
-
Modifié le 16 juil. 2020 à 17:39
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023
-
19 juil. 2020 à 13:45
Bonjour,
J'ai deux problème, le premier problème concerne la récupération des valeurs de mon tableau vers un array.
Et le deuxième est que après avoir saisir du texte dans mon tableau et que je réexécute ma macro le tableau ne s'affiche pas correctement et mon signet disparait alors je sauvegarde sa position et je le crée de nouveau après tout opération.
Voici tout le code
Public Sub StockSignet()
Dim AC As String
Dim Objet As String
Dim Imputation As String
Dim AnneeBudgetaire As String
Dim DaoPrixChiffre As String
Dim DaoPrixLettre As String
Dim RetraitBP As String
Dim RetraitCel As String
Dim RetraitTel As String
Dim nb_lot As String
Dim lots As Integer
Dim tab_range As Range
Dim tab_lots As Table
Dim rRange As Range
Dim myTable As Table
Dim BkMkName As String
Dim n As Integer
Dim libLots()
libLots = Array(n)
If ActiveDocument.Bookmarks.Exists("autorite_contract") Then
AC = ActiveDocument.Bookmarks("autorite_contract").Range.Text
AC = Replace(AC, "FORMTEXT ", "")
End If
If ActiveDocument.Bookmarks.Exists("objet") Then
Objet = ActiveDocument.Bookmarks("objet").Range.Text
Objet = Replace(Objet, "FORMTEXT ", "")
End If
If ActiveDocument.Bookmarks.Exists("imput_bud") Then
Imputation = ActiveDocument.Bookmarks("imput_bud").Range.Text
Imputation = Replace(Imputation, "FORMTEXT ", "")
End If
If ActiveDocument.Bookmarks.Exists("annee_bud") Then
AnneeBudgetaire = ActiveDocument.Bookmarks("annee_bud").Range.Text
AnneeBudgetaire = Replace(AnneeBudgetaire, "FORMTEXT ", "")
End If
If ActiveDocument.Bookmarks.Exists("DaoPrixChiffre") Then
DaoPrixChiffre = ActiveDocument.Bookmarks("DaoPrixChiffre").Range.Text
DaoPrixChiffre = Replace(DaoPrixChiffre, "FORMTEXT ", "")
End If
If ActiveDocument.Bookmarks.Exists("DaoPrixLettre") Then
DaoPrixLettre = ActiveDocument.Bookmarks("DaoPrixLettre").Range.Text
DaoPrixLettre = Replace(DaoPrixLettre, "FORMTEXT ", "")
End If
If ActiveDocument.Bookmarks.Exists("RetraitBP") Then
RetraitBP = ActiveDocument.Bookmarks("RetraitBP").Range.Text
RetraitBP = Replace(RetraitBP, "FORMTEXT ", "")
End If
If ActiveDocument.Bookmarks.Exists("RetraitCel") Then
RetraitCel = ActiveDocument.Bookmarks("RetraitCel").Range.Text
RetraitCel = Replace(RetraitCel, "FORMTEXT ", "")
End If
If ActiveDocument.Bookmarks.Exists("RetraitTel") Then
RetraitTel = ActiveDocument.Bookmarks("RetraitTel").Range.Text
RetraitTel = Replace(RetraitTel, "FORMTEXT ", "")
End If
If ActiveDocument.Bookmarks.Exists("nb_lot") Then
Selection.GoTo What:=wdGoToBookmark, Name:="nb_lot"
nb_lot = Selection.Text
If IsNumeric(nb_lot) Then
lots = CInt(nb_lot)
End If
End If
BkMkName = "pos_tab_lots"
<bold> <ital> ' vérifier l'existance du signet</ital></bold>
If Not ActiveDocument.Bookmarks.Exists(BkMkName) Then
MsgBox prompt:="Bookmark '" & BkMkName & "' not found", Title:="Error"
Exit Sub
End If
<bold> <ital>' sauvegarder le range du signet</ital></bold>
Set rRange = ActiveDocument.Bookmarks(BkMkName).Range
<bold><ital>' Dans le cas ou le tableau existe exportation des données</ital></bold>
With rRange
<bold> <ital> ' recupérer les données</ital></bold>
If .Tables.Count > 0 Then
For i = 2 To n
libLots(i - 2) = myTable.Cell(i, 2).Range.Text
Next
MsgBox ActiveDocument.Tables(1).Cell(2, 2).Range.Text
MsgBox libLots(1) <bold><ital>' le premier problème se trouve à ce niveau</ital></bold>
<bold> <ital>' suppimer le tableau existant</ital></bold>
.Tables(1).Delete
End If
<bold> <ital> ' ajouter le tableau en fonction du nombre de lots</ital></bold>
Set myTable = .Tables.Add(Range:=rRange, NumRows:=lots + 1, NumColumns:=4)
myTable.Borders.Enable = True
myTable.Cell(1, 1).Range.Text = " N° lot "
myTable.Cell(1, 2).Range.Text = " Libellé "
myTable.Cell(1, 3).Range.Text = " Cautionnement provisoire "
myTable.Cell(1, 4).Range.Text = " Délai d'exécution "
i = 2
Do While i < lots + 2
myTable.Cell(i, 0).Range.Text = i - 1
i = i + 1
Loop
ActiveDocument.Bookmarks.Add Name:=BkMkName, Range:=myTable.Range
End With
sortie:
End Sub
A voir également:
Problème pour récupérer des données de mon tableau vers un array
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 Modifié le 18 juil. 2020 à 18:17
bonjour
1) Dans les déclarations tu ne définis pas le type de variable de
libLots()
Plus loin dans le code on se rend compte que c'est du type String
libLots(i - 2) = myTable.Cell(i, 2).Range.Text
2) A la ligne 19 tu définis
Dim n As Integer
. Par défaut sa valeur est 0 .
Or à la ligne 93 tu te sers de n :
For i = 2 To n
libLots(i - 2) = myTable.Cell(i, 2).Range.Text
Next
A quoi sert le 2 dans ton For Next surtout que n = 0 .
Dans ce cas le seul libLots qui existe est libLots(0). A moins qu'en VBA les tableaux ne commencent qu'a 1 .
donc erreur à la ligne 97 :
MsgBox libLots(1)
3) Inutile de mettre les <bold> <ital> pour les commentaires . Cela surcharge le code plus que cela ne l'éclaire
redim est une aberration de VB(6, A, S), un tableau ça a une taille et point barre, donc quand tu redimensionnes, en vrai, ça crée un nouveau tableau d'une nouvelle taille et ça y copie tous les éléments (si y'a le mot clé preserve si je me souviens bien) =>