IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA saisie formule Excel sur une colonne ajoutée [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Contrôle de gestion
    Inscrit en
    Mai 2022
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôle de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2022
    Messages : 24
    Par défaut VBA saisie formule Excel sur une colonne ajoutée
    Bonjour à tous,


    Je cherche à construire une macro pour importer certaines colonne de mon fichier Excel vers Access, cette partie c'est OK mais avant je dois :
    1. Convertir la date YYYYMMDD en date, code trouvé sur un forum et qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim x As Range
    Dim Workx As Range
     
    On Error Resume Next
    xTitleId = "Selection des plages à convertir dd/mm/aaaa"
    Set Workx = Application.Selection
    Set Workx = Application.InputBox("Range", xTitleId, Workx.Address, Type:=8)
       For Each x In Workx
           x.Value = DateSerial(Left(x.Value, 4), Mid(x.Value, 5, 2), Right(x.Value, 2))
           x.NumberFormat = "mm/dd/yyyy"
       Next

    2. Ajouter une colonne et y insérer une formule Excel sur le même nombre de lignes ou il y a des données dans le fichier. J'ai trouvé un code approchant et ai tenté de l'adapter en vain.
    => première partie, conversion en date : OK // une solution pour que je ne sois pas obligée de saisir les colonnes via l'inputBox mais que ca prenne toute la colonne C+F+G tant qu'il y a des données saisies ?
    => Ajout d'une colonne : OK, quelqu'un aurait une solution pour que je puisse la nommée ? Le but est de l'importer.
    => Je n'ai pas réussi à faire la boucle pour saisir ma formule Excel qui devrait me ramener le numéro de semaine ISO (c'est une solution intermédiaire parce que je n'ai pas trouver comment faire via VBA directement).

    Voici donc le code complet, il ne m'affiche pas de message d'erreur mais à partir des lignes Offset plus rien ne se passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     
    Sub TestAppli()
     
    'Conversion YYYYMMTT en date
    Dim x As Range
    Dim Workx As Range
    Dim y As Integer
     
    Application.ScreenUpdating = False
     
     
    On Error Resume Next
    xTitleId = "Selection des plages à convertir dd/mm/aaaa"
    Set Workx = Application.Selection
    Set Workx = Application.InputBox("Range", xTitleId, Workx.Address, Type:=8)
       For Each x In Workx
           x.Value = DateSerial(Left(x.Value, 4), Mid(x.Value, 5, 2), Right(x.Value, 2))
           x.NumberFormat = "mm/dd/yyyy"
       Next
     
     
    'Ajout d'une colonne + insert une formule pour avoir le numéro de semaine ISO
    With Columns("D:D")
       .Insert Shift:=xlToRight
     
     
    'Tentative boucle pour insertion formule sur le nombre de lignes comptées
          NumRows = Range("A1", Range("A1").End(xlDown)).Rows.Count
          ' Select cell a1.
          Range("A1").Select
          ' Establish "For" loop to loop "numrows" number of times.
          For y = 1 To NumRows
     
     
       .Offset(0, -1).FormulaR1C1 = "=NO.SEMAINE.ISO(C:C)"
       .Offset(0, -1).Copy
       .Offset(0, -1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
     
             ' Selects cell down 1 row from active cell.
             ActiveCell.Offset(1, 0).Select
          Next
          Application.ScreenUpdating = True
     
     
    End With
     
    End Sub

    Merci par avance,
    LRN

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 422
    Par défaut
    Bonjour,

    Un exemple avec les dates yyyymmdd en colonne 4. A adapter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Option Explicit
     
    Sub ConversionDate()
        Dim rCell As Range, kR As Long
        kR = 2
        While Cells(kR, 1) <> ""        '--- tant qu'il y a quelque chose en colonne 1
            '--- convertit le nombre en colonne 4 en date
            Cells(kR, 4) = DateSerial(Left(Cells(kR, 4), 4), Mid(Cells(kR, 4), 5, 2), Right(Cells(kR, 4), 2))
            kR = kR + 1
        Wend
    End Sub
     
    Sub AjoutSemaineISO()
        Dim kR As Long, kS As Integer
        Columns(4).Insert Shift:=xlToRight      '--- insère nouvelle colonne 4 (ancienne colonne 4 devient colonne 5)
        Cells(1, 4) = "Semaine"                 '--- titre colonne 4 créée
        kR = 2
        While Cells(kR, 1) <> ""                '--- tant qu'il y a quelque chose en colonne 1
            Cells(kR, 4) = Application.WorksheetFunction.IsoWeekNum(Cells(kR, 5))   '--- date supposée en colonne 5
            kR = kR + 1
        Wend
    End Sub
    Cordialement.
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Femme Profil pro
    Contrôle de gestion
    Inscrit en
    Mai 2022
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Contrôle de gestion
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2022
    Messages : 24
    Par défaut
    Bonjour,

    Merci pour la réponse, du coup un collègue à su me dépanner mais il a modifier toute la macro..

    Je reposte un sujet pour que la macro se fasse sur le fichier sélectionné à travers un bouton de formulaire Access.

    PI le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Sub TestAppli()
     
     
    I = 2
    While Cells(I, 1) <> "": I = I + 1: Wend
     
    For l = 2 To I - 1
    Cells(l, 3) = convertdat(Cells(l, 3))
    Cells(l, 6) = convertdat(Cells(l, 6))
    Cells(l, 7) = convertdat(Cells(l, 7))
    Next
    Columns("D:D").Insert Shift:=xlToRight
    Cells(1, 4) = "Semaine"
    For l = 2 To I - 1
    Cells(l, 4) = DatePart("ww", Cells(l, 3), vbMonday, vbFirstFourDays)
    Cells(l, 4).NumberFormat = "general"
    Next
     
     
     
    End Sub
     
     
    Function convertdat(dat)
    convertdat = DateSerial(Left(dat, 4), Mid(dat, 5, 2), Right(dat, 2))
    End Function

    Pour ma connaissance personnelle, a quoi sert le Option Explicit en ligne 1 ?

    Merci encore
    LRN

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 422
    Par défaut
    Il faut vraiment utiliser systématiquement Option Explicit. Plus d'explications sur cette page. Cela permet en particulier d'éviter des prises de tête suite à une simple faute de frappe sur un nom de variable (par exemple une lettre manquante).

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Filtrer fichier excel sur une colonne
    Par thovan dans le forum VB.NET
    Réponses: 7
    Dernier message: 17/04/2018, 16h56
  2. [XL-2016] VBA-comparer deux fichiers excel sur une colonne et ajouter des lignes d'un fichier vers l'autre
    Par axel.loiacono dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/05/2017, 16h26
  3. [VBA-Excel]Supprimer une colonne entiere basee sur une cellule
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/10/2006, 22h08
  4. [VBA-EXCEL]bloquer la saisie utilisateur sur une colonne
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 16/06/2006, 14h37
  5. [VBA-E] Requetes depuis Excel sur une Base Access sécurisée
    Par DhiSan dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/05/2006, 18h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo