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 :

Macros excel vba


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2017
    Messages : 4
    Par défaut Macros excel vba
    bonjour,

    je suis nouveau sur le site. j'ai une question concernant VBA. j'ai un fichier excel avec plusieurs tableaux. cependant après avoir fait tourner ma macro tout a fonctionné. le problème se pose pour l'an prochain car sur trois de mes tableaux (macro spécifiques à ces trois tableaux) ils changent de ligne du fait de l'insertion d'années pour la mise à jour. ma macro commence comme cela
    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
    Range("A5").Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
            Selection.End(xlDown).Select
     
            Selection.Offset(1).Select
            Cells(nb_lignes + 1, 1).Select
    comment faire pour sélectionner la cellule et qu'elle se mette à jour chaque année !
    merci de m'éclaircir..

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    En VBA, il est inutile, voir néfaste de sélectionner une cellule pour la modifier !

    La partie de code que tu as mis ci-dessus n'apporte aucune information sur ton problème.

    Détailles exactement ce que tu voudrais faire.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2017
    Messages : 4
    Par défaut
    Pour détailler j'ai une macro Vba qui fonctionne très bien avec plusieurs tableaux mis à jour ..Cependant du à cette mise à jour que j'effectue chaque année.. il y a un décalage sur les lignes et j'aimerai en fait ne plus à actualiser ce décalage.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2017
    Messages : 4
    Par défaut
    avec la mise à jour du fichier il y a un décalage chaque année ! donc je dois lui indiquer une position et cela pour 3 tableaux !
    y a quelqu'un je peux envoyé aussi le fichier !
    merci

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    Ta question n'est pas très claire ...
    Pour expliquer au mieux ton problème : donne-nous le code qui fait défaut. Dis-nous s'il y a un message d'erreur, lequel et où apparaît-il ? Joins éventuellement des captures d'écran pour illustrer ton problème, ça peut-être utile pour que nous visualisions la structure de ton classeur.
    Dans le code que tu nous donnes, j'ai du mal à comprendre le rapport avec ta question. Tu as une variable (nb_lignes) qui n'est pas définie. Donc c'est difficile pour nous de comprendre où tout cela mène. Et je ne comprends pas bien non plus les nombreux End(xlDown).
    En VBA, on utilise le moiSelect/Activate/ActiveSheet et leurs copains. Ils sont beaucoup utilisés par l'enregistreur de macro, mais ensuite, il faut adapter le code obtenu.
    N'écris pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A1").Select
    Selection.Value = "toto"

    Mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Value = "toto"
    A bientôt avec plus de précisions

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2017
    Messages : 4
    Par défaut
    voici mon code VBA

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Sub test()
    Dim wk1 As Workbook, wk2 As Workbook, baseSh, sht
    Dim nb As Integer, i As Integer, y As Integer, col As Integer, nba As Integer
    Dim add1 As String, t As String, nn As String, verif As String
    Dim n As Long
     
    Set wk1 = ThisWorkbook
    Set wk2 = Workbooks("Le Panel 2017 par région_fichiers_régionaux.xlsm")
    baseSh = Array("persp cad X taille", "persp sal X taille", "perps cad X grd secteur", "persp sal X grd secteur", "persp cad X dpt", "perps sal X dpt")
     
     
    For Each sht In Worksheets
    verif = sht.Name
      If sht.Name <> "feuil1" Then
      ligne1 = Application.Match("Par taille d'établissement", Sheets(sht.Name).Range("A:A"), 0) + 1
      ligne2 = Application.Match("Par département", Sheets(sht.Name).Range("A:A"), 0) - 3
      ligne3 = Application.Match("Par grands secteurs", Sheets(sht.Name).Range("A:A"), 0) + 1
     
      plg1 = Range(Cells(ligne1, 1), Cells(ligne2, 1)).Address
       nb = Application.CountA(Sheets(sht.Name).Range(plg1))
       nn = """" & sht.Name & """"
       col = 2
      For i = 0 To 1
         add1 = "'[" & wk2.Name & "]" & baseSh(i) & "'!"
         t = "MATCH(" & nn & "," & CStr(add1) & "$A:$A,0)"
         n = Evaluate(t)
          For y = 0 To nb - 1
            Sheets(sht.Name).Cells(ligne1 + y, col).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 3).Value
            Sheets(sht.Name).Cells(ligne1 + y, col + 1).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 4).Value
          Next y
          col = 6
        Next i
     
         col = 2
        For i = 2 To 3
         add1 = "'[" & wk2.Name & "]" & baseSh(i) & "'!"
         t = "MATCH(" & nn & "," & CStr(add1) & "$A:$A,0)"
         n = Evaluate(t)
          For y = 0 To 3
            Sheets(sht.Name).Cells(ligne3 + y, col).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 3).Value
            Sheets(sht.Name).Cells(ligne3 + y, col + 1).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 4).Value
          Next y
          col = 6
        Next i
     
     
        plg2 = Range(Cells(ligne2, 1), Cells(ligne2, 1)).Address
        nba = Application.CountA(Sheets(sht.Name).Range(plg2))
        nn = """" & sht.Name & """"
     
        col = 2
        For i = 4 To 5
         add1 = "'[" & wk2.Name & "]" & baseSh(i) & "'!"
         t = "MATCH(" & nn & "," & CStr(add1) & "$A:$A,0)"
         n = Evaluate(t)
          For y = 0 To nba - 1
            Sheets(sht.Name).Cells(ligne2 + y, col).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 3).Value
            Sheets(sht.Name).Cells(ligne2 + y, col + 1).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 4).Value
          Next y
          col = 6
        Next i
     
      End If
     
    Next
    End Sub
    le souci que j'ai c'est quand je fais tourner la macro presque tout marche sauf les lignes ou en fait la macro fonctionne mais ne se place pa au bon endroit pour le remplissage des données !!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Sheets(sht.Name).Cells(ligne2 + y, col).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 3).Value
            Sheets(sht.Name).Cells(ligne2 + y, col + 1).Value = wk2.Sheets(baseSh(i)).Cells(y + n, 4).Value

  7. #7
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    J'ai vraiment du mal à comprendre ton problème. Mais avant tout essayons de simplifier ton code. Tu utilises beaucoup de variables, presque trop, on s'y perd un peu ...
    Dimensionne sht comme feuille (Worksheet), puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets(sht.Name).Range(...) = ...
       'équivaut à:
    sht.Range(...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    plg1 = Range(Cells(ligne1, 1), Cells(ligne2, 1)).Address
     nb = Application.CountA(Sheets(sht.Name).Range(plg1))
        'Equivaut à
    nb = Application.CountA(sht.Range("A" & ligne1 & ":A" & ligne2))
    'ou
    nb = Application.CountA(sht.Range(Cells(ligne1, 1), Cells(ligne2, 1)))
    Ensuite regardons ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    nn = """" & sht.Name & """"
     add1 = "'[" & wk2.Name & "]" & baseSh(i) & "'!"
     t = "MATCH(" & nn & "," & CStr(add1) & "$A:$A,0)"
     n = Evaluate(t)
    add1 est déjà une chaîne de caractère, pas besoin de CStr. Ensuite, pourquoi n'utilise-tu pas Application.Match comme tu le fais auparavant ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n = Application.Match(sht.Name, wk2.baseSh(i).Range("A:A"), 0)
    C'est un peu plus simple et léger, non ?
    Au passage, tu écris verif = sht.Name, mais tu n'utilises jamais verif ...

    Enfin, ta question concerne-t-elle ligne1, ligne2 et ligne3? Est-ce que tu te demandes comment les définir? Quelles sont les lignes insérées d'une année sur l'autre? Pourrais tu envoyer une copie d'écrande ton doc en montrant où et comment tu insères des lignes d'une année sur l'autre. Et en expliquant ce que fait ton code sur ton classeur. (tu dis qu'il y a trois tableaux, mais un exemple suffit )

    Essaie déjà d'alléger ton code avec ce que je t'ai dit précédemment et reviens vers nous ensuite. N'oublie pas d'écrire ton code entre balises code (bouton #) !

Discussions similaires

  1. Appeler une dll ou un autre module vba depuis une macro excel vba
    Par technobiz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/11/2008, 14h24
  2. Réponses: 3
    Dernier message: 19/03/2008, 21h44
  3. Macro Excel VBA : création automatique de 140 graphes/graphiques
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/02/2007, 10h13
  4. macro excel vba
    Par fildupa dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/12/2006, 21h29

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