Resize qui resize mal

Résolu
GermPeru Messages postés 175 Statut Membre -  
GermPeru Messages postés 175 Statut Membre -
Bonjour a tous,

J´importe les données d´une table je les retravailles au travers d´une interface, je les stock dans un array et je les retranspose dans une autre table.

Au moment ou je les exporte dans ma deuxieme tables, les données se trouvent décalées d´une colone, cad non pas en colone A mais en B, voici ce que j´ai essayé et rien n´y fait j´ai toujours mes données dans ma colone B:
.Range("A" & NbLi + 1).Resize(UBound(TBMMP, 1), UBound(TBMMP, 2) + 1) = TBMMP
.cells(nbli+1,1).Resize(UBound(TBMMP, 1), UBound(TBMMP, 2) + 1) = TBMMP
.Range("A" & NbLi + 1).offset(0,-1).Resize(UBound(TBMMP, 1), UBound(TBMMP, 2) + 1) = TBMMP 'ceci ne fonctionne pas 


De plus a mon resize je lui rajoute une colone, j´ai déterminé ceci de facon empirique, mais je n´ai pas compris pourquoi. Je me suis dis que peut etre pcq j´utilise un array tbmmp() commence par 1, et que j´ai pas spécifié l' ordre base, mais dans ce cas cela vaudrait pour mes lignes...

Bref si quelqu´un m´a compris et domine les arrays() avec les resize et m´a compris, je le remercie d´avance pour l´aide car plus d´idée.

Merci

2 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir, si pas encore fait, je suggère d'ajouter
    option explicit
    en première ligne de ton module.
    0
    1. GermPeru Messages postés 175 Statut Membre
       
      Option Explicit
      
      Private Sub CmdVal_Click()
      Dim ili%, NbLi%, TBMMP()
      Dim R#, TB()
      With Sheets("DatosMP")
      NbLi = Application.WorksheetFunction.CountA(.Range("A:A"))
      R = RechTRUE("F2:F" & NbLi, TB())
      ReDim TBMMP(1 To R, 7)
      If R > 0 Then
          For ili = 0 To UBound(TB)
              TBMMP(ili + 1, 1) = .Cells(Range(TB(ili)).Row, 1) 'fecha
              TBMMP(ili + 1, 2) = .Cells(Range(TB(ili)).Row, 2) 'hora
              TBMMP(ili + 1, 3) = .Cells(Range(TB(ili)).Row, 3) 'usu
              TBMMP(ili + 1, 4) = .Cells(Range(TB(ili)).Row, 4) 'tipo
              TBMMP(ili + 1, 5) = .Cells(Range(TB(ili)).Row, 8) 'prod
              TBMMP(ili + 1, 6) = .Cells(Range(TB(ili)).Row, 5) 'N° ana
              TBMMP(ili + 1, 7) = .Cells(Range(TB(ili)).Row, 10) 'lote prov
          Next ili
      End If
      .Range("TMMP").EntireRow.Delete
      End With
      With Sheets("MuestraM")
      '.Unprotect "ppmdp"
      NbLi = Application.WorksheetFunction.CountA(.Range("A:A"))
      .Range("A" & NbLi + 1).Resize(UBound(TBMMP, 1), UBound(TBMMP, 2) + 1) = TBMMP
      '.Protect "ppmdp"
      End With
      Unload Me
      End Sub


      J´ai progressé grace a vous, et le option explicit c´est la base maintenant ;)
      0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    quel est le contenu de la dernière colonne dans ta table de destination?
    je pense que les données sont décalées d'une colonne dans TBMMP, ce n'est pas l'exportation qui pose problème, c'est soit l'importation, soit les manipulations de données.
    0
    1. GermPeru Messages postés 175 Statut Membre
       
      yg_be,

      la derniere ligne et la derniere colone dans ma table de destination sont vide.

      donc ce serait lors de l´importation. et avec un ordre base 0 par defaut qui me poserait pb... malgres que je definise mon arra de la facon suivante
      ReDim TBMMP(1 To R, 7)


      je test de ce pas
      Option Base 1
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > GermPeru Messages postés 175 Statut Membre
       
      comment remplis-tu TBMMP? peut-être dois-tu simplement le déclarer ainsi, et ne pas faire de redim:
      dim TBMMP as variant
      0
    3. GermPeru Messages postés 175 Statut Membre > GermPeru Messages postés 175 Statut Membre
       
      Ca l´air de fonctionner mais ....

      Function RechTRUE(ByVal Plage As String, ByRef TBadress() As Variant) As Long
      Dim Cherche, Ix As Long, PrAddress
      Ix = 1
          With Sheets("DatosMP").Range(Plage)
              Set Cherche = .Find(True)
              If Not Cherche Is Nothing Then
                  PrAddress = Cherche.Address
                  Do
                      ReDim Preserve TBadress(Ix)
                      TBadress(Ix) = Cherche.Address
                      Set Cherche = .FindNext(Cherche)
                      Ix = Ix + 1
                  Loop While Not Cherche Is Nothing And Cherche.Address <> PrAddress
              End If
          End With
          RechTRUE = Ix
          Set Cherche = Nothing
      End Function


      J' ai un autre pb maintenant cela me deconfigure cette fonction dont je ne suis pas l´auteur, ce qui fait que je ne vois pas ou est l´erreur ci ce n´est qu´il m´enregistre 2 fois la premiere adresse trouvée et lors du colage TBMMP cela me supprime la derniere ligne de ma table de destination... et cela me la met en vide, est ce que tu vois comment arranger ceci?

      Merci pour l´inspiration, ca m´aide fortement a progresser, car je ne voulais pas passer par une boucle et voulais vraiment comprendre ce resize avec un array...

      Merci
      0
    4. GermPeru Messages postés 175 Statut Membre
       
      Option Explicit
      Option Base 1
      
      Private Sub CmdVal_Click()
      Dim ili%, NbLi%, TBMMP()
      Dim R#, TB()
      With Sheets("DatosMP")
      NbLi = Application.WorksheetFunction.CountA(.Range("A:A"))
      R = RechTRUE("F2:F" & NbLi, TB())
      ReDim TBMMP(1 To R, 7)
      If R > 0 Then
          For ili = 0 To UBound(TB)
              TBMMP(ili + 1, 1) = .Cells(Range(TB(ili)).Row, 1) 'fecha
              TBMMP(ili + 1, 2) = .Cells(Range(TB(ili)).Row, 2) 'hora
              TBMMP(ili + 1, 3) = .Cells(Range(TB(ili)).Row, 3) 'usu
              TBMMP(ili + 1, 4) = .Cells(Range(TB(ili)).Row, 4) 'tipo
              TBMMP(ili + 1, 5) = .Cells(Range(TB(ili)).Row, 8) 'prod
              TBMMP(ili + 1, 6) = .Cells(Range(TB(ili)).Row, 5) 'N° ana
              TBMMP(ili + 1, 7) = .Cells(Range(TB(ili)).Row, 10) 'lote prov
          Next ili
      End If
      .Range("TMMP").EntireRow.Delete
      End With
      With Sheets("MuestraM")
      '.Unprotect "ppmdp"
      NbLi = Application.WorksheetFunction.CountA(.Range("A:A"))
      .Range("A" & NbLi + 1).Resize(UBound(TBMMP, 1), UBound(TBMMP, 2)) = TBMMP
      '.Protect "ppmdp"
      End With
      Unload Me
      End Sub


      J´ai tout simplement passé ma fonction dans un module, mis option base 1 et changer ma boucle.

      Merci pour l´inspiration yg_be ;)
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > GermPeru Messages postés 175 Statut Membre
       
      moi je ferais ceci:
      Function RechTRUE
      '...
      Ix = 0
      '...
                      ReDim Preserve TBadress(0 To Ix)
      0