Insertion d'une ou plusieurs lignes via userform

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

bonjour bebere,

sa marche bien cette fois ci ^ merci, j'aurais juste voulu savoir dans ce moceau de code:

Code:
.Cells(1, .Cells(1, 256).End(xlToLeft).Column + 1) = "vente" & C
.Cells(1, .Cells(1, 256).End(xlToLeft).Column + 1) = "achat" & C
Par contre, j'aimerais que vente et achat ne soit pas les valeurs par défault car les entetes pourraient avoir des noms différents les unes des autres à l'avenir.

Par exemple pour les noms d'entetes sa sera Piece 1246-vente, Piece 1246-achat, Piece 2347-vente, Piece 2347-achat....

a bientot,

Vassili
 

Bebere

XLDnaute Barbatruc
Re : Insertion d'une ou plusieurs lignes via userform

bonjour Vassili
tu ajoutes ce code dans un module

Function ExtraitNum(Chaîne)
Dim Mot As String, C As Integer, X As Integer
Mot = "########"

For X = 1 To Len(Chaîne)
If Mid(Chaîne, X, 1) Like "#" Then
C = C + 1
End If
Next

Mot = Left(Mot, C)
For X = 1 To Len(Chaîne)
If Mid(Chaîne, X, 4) Like Mot Then
ExtraitNum = Mid(Chaîne, X, 4)
End If
Next

End Function

dans module4 tu mets ces 2 lignes à la place des 2 existantes(parties en commentaires,càd après ')

X = ExtraitNum(.Cells(1, DerCol)) 'Mid(.Cells(1, DerCol), 6) + 1 'extrait le numeric de la dernière colonne +1
Y = ExtraitNum(Tbl(1, UBound(Tbl, 2))) 'Mid(Tbl(1, UBound(Tbl, 2)), 6) 'extrait le numeric de la dernière colonne de tbl
à bientôt
 

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

Bonjour bebere,

J'aurais voulu savoir ce que je remplace pour les # juste une précision pour cette partie de code:

Code:
Mot = "########"

For X = 1 To Len(Chaîne)
If Mid(Chaîne, X, 1) Like "#" Then
C = C + 1
End If
Next
Merci et a bientot

vassili
 

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

bonjour bebere,

Il y a une rectification sur les entetes, en faite je pense qu'il serait plus judicieux de copié toute les entetes et les comparer a celle déjà présente sa sera plus simple si cela est possible car la le code fais une identification de plusieurs mots qui sont similaires comme suit:

Code:
        Mot = .Cells(1, DerCol)
        Motd = Mid(Mot, 1, InStr(Mot, " "))    'extrait piece
        Motf = Mid(Mot, InStrRev(Mot, "-"))     'extrait achat
        Mot = .Cells(1, DerCol - 1)
        Motf1 = Mid(Mot, InStrRev(Mot, "-"))     'extrait vente
Merci et à bientôt,

Vassili
 

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

Re-bonjour bebere,

Le code que tu avais utilisé pour l'update me convenait parfaitement sauf qu'il n'ajoutait pas de colonne en plus si le fichier exemple contenait plus de colonnes, est ce qu'il serait possible de rajouter une boucle qui permet de rajouter ces colonnes sur ce code ci-dessous?:

Code:
Sub UpdateDataBis()
    Dim Ld As Long, Lf As Long, C As Integer
    Dim Wb As Workbook, Fichier As String

    Fichier = Application.GetOpenFilename

    If Fichier = "" Then Exit Sub

    Set Wb = Workbooks.Open(Fichier)

    Application.ScreenUpdating = False

    With Wb.ActiveSheet
        Ld = .Cells.Find("PDS").Row
        Col = .Cells(Ld, 256).End(xlToLeft).Column
        Lf = .Cells(65536, 1).End(xlUp).Row
        Tbl = .Range(.Cells(Ld, 1), .Cells(Lf, Col))
    End With

    Wb.Close savechanges = False

    With ThisWorkbook.ActiveSheet
        Li = .Cells(65536, 1).End(xlUp).Row    ' + 1
        Col = .Cells(4, 256).End(xlToLeft).Column
        For C = 1 To UBound(Tbl, 2)
            Set cel = .Rows(4).Find(Tbl(1, C))
            If Not cel Is Nothing Then
                For L = 2 To UBound(Tbl, 1)
                    .Cells(Li + L - 1, cel.Column) = Tbl(L, C)
                    If Tbl(L, C) = "" Then .Cells(Li + L - 1, cel.Column) = 0
                Next
            Else
                Col = Col + 1
                If Col > UBound(Tbl, 2) Then Exit For
                .Cells(4, Col) = Tbl(1, C)
                For L = 5 To Li
                .Cells(L, Col) = 0
                Next
                For L = 2 To UBound(Tbl, 1)
                    .Cells(Li + L - 1, Col) = Tbl(L, C)
                    If Tbl(L, C) = "" Then .Cells(Li + L - 1, Col) = 0
                Next
            End If
        Next

        If Col > UBound(Tbl, 2) Then
            Lf = .Cells(65536, 1).End(xlUp).Row
            For C = UBound(Tbl, 2) + 1 To Col
                For L = Li + 1 To Lf
                    .Cells(L, C) = 0
                Next
            Next
        End If

    End With
Merci et à bientot,

Vassili
 

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

Bonjour bebere,

J'ai repris le code que je t'ai poster ci-dessus, car j'ai changer de manière définitive le nom des entetes (c'est pour cela que j'ai repris celui-ci). Il marche trés bien sauf que:

Si je rajoute des colonnes avec des chiffres dans le fichier "exemple" l'insertion bloque àprés la colonne qui n'est pas mise à jour dans l'ensemble des colonnes.

J'aimerais que dans les colonnes qui sont déjà importées dans fichier de base on puisse importées de nouvelles colonnes entre les colonnes qui sont déjà dans cette même base.

Je t'envoie les deux fichiers

http://cjoint.com/?2dstDzNvHLl
http://cjoint.com/?2dstElokdzK

Merci beaucoup et à bientot,

Vassili
 

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

Bonjour bebere,

Sa marche trés bien pour l'ajout des colonnes sauf que l'ordre des colonnes à changer.
En effet, lorque j'importe le fichier exemple il doit y avoir l'ordre des colonne qui soit conserver pour la feuille du fichier base.
Les colonnes doivent s'importées et être dans même ordre que dans le fichier exemple.


Autre point important que je n'ai pas cité est ce qu'il est possible de mettre un inputbox pour insérer le numéro de l'année sur la colonne A du fichier base avec la zone de séléction qui prend en compte toute les lignes qui viennent d'étre importé.
Ou alors est ce qu'il serait pas plus simple de faire cela dans le fichier "exemple"?

Voir la pièce jointe Exemple (1) (1).xls

Merci et à bientôt,

Vassili
 

Fichiers joints

Dernière édition:

Bebere

XLDnaute Barbatruc
Re : Insertion d'une ou plusieurs lignes via userform

Vassili
dans le fichier exemple tu as un code qui s'exécute à l'ouverture du classeur
il se trouve dans thisworkbook évènement workbook_open
dans testvassiliv7 une inputbox au début du code et un tri à la fin
à bientôt
 

Fichiers joints

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

bonjour bebere,

Le trie ne doit pas se faire de façon alphabétique mais suivant l'ordre des colonnes importées, elles ne doivent pas changer de sens. Le fichier exemple que je te joint ci-dessous est l'exemple type de ce qu'il faut importé.


Voir la pièce jointe Exemple (1) (1).xls

Pour l'inputbox il n'est pas nécessaire de mettre la date juste le numéro de l'année suffit.

Merci et a bientot,

Vassili
 

Fichiers joints

Dernière édition:

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

bonjour bebere,

C'est bon c'est la dernière ^^ je te remercie beaucoup de ta disponiblité pour répondre à toute mes questions et encore merci de m'avoir aidé.

a bientot

Vassili
 

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

bonjour bebere,

En fait sa marche pas tout à fait comme prévu pour la partie update j'ai un problème consernant toujours cette ordre des colonnes.
Le problème est d'origine, du dernier fichier que tu m'a envoyé. En effet, l'ordre des colonnes est un peu mélangé lorsque j'ajoute ou supprime des colonnes lors d'une importation. J'ai tester avec le fichier exemple et TestVassiliV7 (dernier fichier base), et même la sa ne marche pas comme prévu (je me suis trop emballé :/).
Le but était d'avoir les colonnes de départ qui sont stockés dans la base + les colonnes d'arrivées c'est à dire les colonnes qui ont été importées, tout en gardant l'ordre définie via entre deux fichiers:

Ensuite j'ai un autre et ultime soucis sur ce fichier c'est que si je veux importer des données d'années antérieures à celle qui sont déjà présente dans la feuille.

Ainsi, ces données se mette à la suite alors que j'aimerais que sa compare si l'année et inférieur ou supérieur aux années précédement importé dans la base pour sa se mette au bonne endroit.

Pour les entetes je te montre via un exemple,

Exemple:

L'odre des colonnes dans la base:

Année
amortisseur Smlf type 1
amortisseur Smlf type 2
frein Limdh type 1
frein Limdh type 2
Cable classe A type 1
Cable classe A type 2
Cable classe B type 1
Cable classe B type 2

L'ordre des colonnes aprés la feuille importé:

Année
amortisseur Smlf type 1
amortisseur Smlf type 2
frein Limdh type 1
frein Limdh type 2
Cable classe A type 1
Silent block Amola type 1
Silent block Amola type 2
Cable classe A type 2
Cable classe B type 1
Cable classe B type 2
Fusible A hkl
Fusible B hkl

Dans l'ordre souhaité:


Année
amortisseur Smlf type 1
amortisseur Smlf type 2
frein Limdh type 1
frein Limdh type 2
Silent block Amola type 1
Silent block Amola type 2
Cable classe A type 1
Cable classe A type 2
Cable classe B type 1
Cable classe B type 2
Fusible A hkl
Fusible B hkl

Voila je te remercie et à bientôt,

Vassili
 
Dernière édition:

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

Bonjour bebere,

J'ai une erreur de type 1004 sur le code :

Code:
.Range("A1").Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
                   False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
Aprés lorsque j'importe des données pour l'année numéro 3 qui est inférieur à l'année 4 dans la base sa m'importe les données à la suite alors que j'aurais voulu que sa se mette au début c'est à dire à partir de la ligne 2.

Merci et à bientôt,

Vassili
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : Insertion d'une ou plusieurs lignes via userform

Vassili
cette ligne fait le tri croissant sur la colonne année,comme suit içi c'est bon
.Range("A1").Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
 

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

Re bonjour bebere,

C'est bon sa marche trés bien ya du avoir un truc qui n'allait pas je te remercie.

A bientôt et bon week end,

Vassili
 

vassili

XLDnaute Occasionnel
Re : Insertion d'une ou plusieurs lignes via userform

Bonjour bebere,

Alors j'ai le même problème que je t'avai expliqué sur excel 2000 (version sur laquelle je travaille) alors que sur le 2003 sa marche y'a t'il une solution?

Merci et à bientôt

Ps: J'ai mis excel 2003 en titre de topic pensant que sa n'influrait pas d'erreur si je bossais sur excel 2000 :s
 
Dernière édition:

Bebere

XLDnaute Barbatruc
Re : Insertion d'une ou plusieurs lignes via userform

bonjour Vassili
essaye avec cette ligne
.Range("A1").Sort Key1:=.Range("A2"), Order1:=xlAscending, Header:=xlGuess
ou enregistre une macro et dans le code ou tu as une erreur,supprime ce qui ne convient pas en comparant
à bientôt
 

Discussions similaires


Haut Bas