Microsoft 365 vba multiplier une colonne et format date

Céline49

XLDnaute Junior
Bonjour à la communauté,

Je bloque sur 3 aspects dans ma macro:
1/ Comment faire pour garder dans mon onglet "pour import" la 1ère ligne dans lesquels j'ai le libellé de chaque colonne
2/ Je n'arrive pas à multiplier ma colonne E de l'onglet "pour import" par 12. J'ai un débogage à ce niveau lors de l'exécution de la macro
3/ Comment transformer en format date JJ/MM/AAAA la colonne 3 de mon onglet "pour import" car à la recopie entre onglet je perds le format initial.

Si l'écriture de mes formules peuvent être optimiser, n'hésitez pas !!☺

Merci pour votre aide à la communauté
 

Pièces jointes

  • Pour import immobilisation dans Tiime.xlsm
    37.5 KB · Affichages: 11

Phil69970

XLDnaute Barbatruc
Bonjour @Céline49 et Jean Marie

Je te propose ce fichier
Par contre il y a des choses bizarres dans ta demande
1702128334544.png


A ta disposition pour modif éventuelle ;)

Merci de ton retour
 

Pièces jointes

  • Copie vers feuille import V1.xlsm
    62.9 KB · Affichages: 4

ChTi160

XLDnaute Barbatruc
Re
je n'ai pas de mauvaise intention lol
j'ai juste adapté le Travail de Philippe Lol(Perfectible)
VB:
Sub Copie()
Application.ScreenUpdating = False
Dim i&, j&, Derlig&, DerligDst&
Dim Ws1 As Worksheet, Ws2 As Worksheet
Dim cellule as range
Set Ws1 = Worksheets("Extract")     ' Source
Set Ws2 = Worksheets("Pour Import") ' Destination

Derlig = Ws1.Range("A" & Rows.Count).End(xlUp).Row
DerligDst = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1

For i = 6 To Derlig
    With Ws1
        ar = Array(.Range("Q" & i), .Range("I" & i), .Range("L" & i), .Range("M" & i), .Range("R" & i) * 12, .Range("T" & i), .Range("B" & i), .Range("I" & i), .Range("P" & i), .Range("M" & i), .Range("AA" & i))
       With Ws2.Range("A" & DerligDst & ":L" & DerligDst)
           .Value = ar
     ' Boucle à travers chaque cellule de la plage
   
    End With
        DerligDst = Ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
    End With
Next i
DerligDst = Ws2.Range("A" & Rows.Count).End(xlUp).Row
  For Each cellule In Ws2.Range("E2:E" & DerligDst)
        ' Vérifiez si la cellule contient une valeur numérique
        If IsNumeric(cellule.Value) Then
            ' Multipliez le contenu de la cellule par le facteur
            cellule.Value = cellule.Value * 12
        Else
            ' Gérez le cas où la cellule ne contient pas une valeur numérique
            MsgBox "La cellule " & cellule.Address & " ne contient pas une valeur numérique."
        End If
    Next cellule
MsgBox "Valeur copiée", vbInformation, "Copie effectuée"

End Sub
Excuse moi Patrick Mdr !
Jean marie
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Céline, Chti, Phil, Patrick,
Un essai en PJ avec :
VB:
Sub ImmoTiime()
Dim ws As Worksheet
Dim colonne As Range
Set E = Sheets("extract")
Set I = Sheets("pour import")
Colonnes = Array(17, 9, 12, 13, 18, 20, 2, 9, 16, 13, 27)   ' Le tableau contient les N° de colonnes à copier
    'Supprimer les 4 premières lignes et efface Import
    E.Rows("1:4").Delete
    I.Range("A2:L10000").ClearContents
    Lmax = E.[A100000].End(xlUp).Row                        ' Dernière ligne de Extract
    For N = 1 To 11                                         ' Remplissage colonnes
        Ncol = Colonnes(N - 1)
        I.Range(I.Cells(2, N), I.Cells(Lmax, N)) = E.Range(E.Cells(2, Ncol), E.Cells(Lmax, Ncol)).Value
    Next N
    I.Range(I.Cells(2, 12), I.Cells(Lmax, 12)) = E.Range("E8").Value    ' Copie E8 en colonne 12
    For C = 2 To Lmax                                       ' Multiplie chaque Durée par 12
        I.Cells(C, "E") = 12 * I.Cells(C, "E")
    Next C
End Sub
 

Pièces jointes

  • Pour import immobilisation dans Tiime.xlsm
    34 KB · Affichages: 1
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour
je vous propose quelque chose d'un peu différent
a finir pour la colonne 12 en feuille import
vous allez voir c'est facile
je base tout sur le fait que application.index permet de tordre dans tout les sens une variable tableau
y compris l'ordre des colonnes et même des lignes si vous voulez

VB:
Sub ImmoTiime()
    Dim E As Worksheet, I As Worksheet, Rng As Range, LmaX&, ColMax&, Lignes, colonnes, TbL, Lig&

    Set E = Sheets("extract")
    Set I = Sheets("pour import")

    'les dimensions de la plage
    LmaX = E.[A100000].End(xlUp).Row                        ' Dernière ligne de Extract
    ColMax = E.Cells(1, 1).CurrentRegion.Columns.Count' je dimensionne au plus grand

    'la plage
    Set Rng = E.Range(E.Cells(6, 1), E.Cells(LmaX, ColMax))

    
    'Création et redimensionnement dela variable  tableau((TbL)) et exeption et ordre des colonnes
    Lignes = Evaluate("ROW(1:" & (LmaX - Rng.Row) + 1 & ")")    'toute les lignes
    colonnes = Array(17, 9, 12, 13, 18, 20, 2, 9, 16, 13, 27)   ' array des colonnes à copier + different ordered
    TbL = Application.Index(Rng.Value, Lignes, colonnes) 'compil unordered of two-dimensional array variable

    'eventuelles modifs dans la variable Tableau((TbL))
    For Lig = 1 To UBound(TbL)
        TbL(Lig, 4) = TbL(Lig, 4) * 12    'augmentation de la durée d'amortissement(*12)'si j'ai bien compris l'intention
        TbL(Lig, 3) = CDate(TbL(Lig, 3))    'certaines date sont du texte on corrige
        TbL(Lig, 9) = CDate(TbL(Lig, 9))    'certaines date sont du texte on corrige
        'etc...
        'FAIRE LES MODIF QUE L'ON VEUX ICI
    Next

    'injection dans la feuille Import
    With I.Cells(2, 1)
        .Resize(10000, 100).ClearContents
        .Resize(UBound(TbL), UBound(TbL, 2)) = TbL
    End With




End Sub
 

Céline49

XLDnaute Junior
Bonjour @Céline49 et Jean Marie

Je te propose ce fichier
Par contre il y a des choses bizarres dans ta demande
Regarde la pièce jointe 1185799

A ta disposition pour modif éventuelle ;)

Merci de ton retour
Bonjour Phil69970, merci pour cette macro qui effectivement est bien plus courte que la pauvre tentative de macro. Peux-tu me l'expliquer un peu pour que j'essaie de progresser ??!! Elle fonctionne correctement. J'ai juste la dernière colonne de l'onglet "pour import" qui me pose problème car il faudrait que sur chaque ligne je récupère la valeur présente en E8 de mon onglet "consigne" et idéalement à ne compléter cette ligne que si j'ai une valeur (autre que zéro) dans la colonne K de l'onglet "pour import" (= la présence d'amort antérieurs). Merci à toi et merci pour ton temps.
 

Céline49

XLDnaute Junior
Bonjour,

Je vois que vous avez pleins d'approches différentes pour la même demande. C'est trop génial d'essayer de comprendre le raisonnement de chacun !
Je suis repartie du fichier de Phil69970. J'ai 2 modif quand je fais mes tests : il faudrait ne retenir que les 7 premiers chiffres (de gauche) dans la colonne G (numéro de compte) dans l'onglet de destination "pour import" et il faudrait que la date (colonne C et I) soit au format date (j'ai récupéré sur une base de données avec un format € et mon logiciel de destination n'apprécie pas du tout ce format !). Merci par avance et bonnes fêtes de fin d'année à toute la communauté.
 

Pièces jointes

  • Pour import V3.xlsm
    48.6 KB · Affichages: 2

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@Céline49

Je te propose ce fichier avec la modification sur les 7 caractères de la colonnes G
il faudrait ne retenir que les 7 premiers chiffres (de gauche) dans la colonne G (numéro de compte) dans l'onglet de destination "pour import"

Par contre j'ai rien compris à ton explication
il faudrait que la date (colonne C et I) soit au format date (j'ai récupéré sur une base de données avec un format €
Les colonnes C et I sont déjà au format date !!! 🤔

1703940411554.png


N'oublie pas de valider la solution qui te convient

Bonne fêtes
 

Pièces jointes

  • Copie vers feuille import V3.xlsm
    48.7 KB · Affichages: 1

Céline49

XLDnaute Junior
Rebonjour
est-ce possible de mettre à blanc le contenu (hors entête) de l'onglet "pour import" au début de la macro (avant import des données)?
et est-ce possible à la fin de la macro d'enregistrer l'onglet "pour import" au format csv (séparateur point virgule) et de s'arrêter à la boite de dialogue d'enregistrement pour que chacun puisse choisir l'emplacement d'enregistrement et le nom du fichier.
Par avance un grand merci
 

Pièces jointes

  • Pour import V5.xlsm
    49 KB · Affichages: 0

Céline49

XLDnaute Junior
J'ai un autre problème, sur la dernière ligne, il semblerait qu'il y ai des données que je ne visualise pas car mon nouveau logiciel me mets toujours un message d'erreur lié à cette dernière ligne. Lorsque je supprime les "données", je n'ai plus de problème après
 

Statistiques des forums

Discussions
314 729
Messages
2 112 268
Membres
111 481
dernier inscrit
zrk