Signaler

Resize qui resize mal [Résolu]

Posez votre question GermPeru 159Messages postés mercredi 7 décembre 2016Date d'inscription 14 novembre 2017 Dernière intervention - Dernière réponse le 13 nov. 2017 à 17:42 par GermPeru
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
Utile
+0
plus moins
bonsoir, si pas encore fait, je suggère d'ajouter
option explicit
en première ligne de ton module.
GermPeru 159Messages postés mercredi 7 décembre 2016Date d'inscription 14 novembre 2017 Dernière intervention - 20 sept. 2017 à 20:05
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 ;)
Répondre
Donnez votre avis
Utile
+0
plus moins
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.
GermPeru 159Messages postés mercredi 7 décembre 2016Date d'inscription 14 novembre 2017 Dernière intervention GermPeru - 20 sept. 2017 à 20:27
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
Répondre
yg_be 3794Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 17 novembre 2017 Dernière intervention - 20 sept. 2017 à 21:24
moi je ferais ceci:
Function RechTRUE
'...
Ix = 0
'...
                ReDim Preserve TBadress(0 To Ix)
Répondre
GermPeru 159Messages postés mercredi 7 décembre 2016Date d'inscription 14 novembre 2017 Dernière intervention - 20 sept. 2017 à 21:23
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 ;)
Répondre
yg_be 3794Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 17 novembre 2017 Dernière intervention - 20 sept. 2017 à 23:26
si tout fonctionne, peux-tu marquer comme résolu?
Répondre
GermPeru 159Messages postés mercredi 7 décembre 2016Date d'inscription 14 novembre 2017 Dernière intervention - 13 nov. 2017 à 17:42
Bjr, dsl de l´oubli qui date un peu....
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !