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 :

macro, variable et boucle [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Par défaut macro, variable et boucle
    Bonjour à tous,

    Je débute un peu dans le maniement des variables et des boucles en VBA, je comprend la logique, car je développe en PHP.

    Voici ce que je souhaite faire.

    - J'ai des données dans une feuille de calcul qui doivent mettre à jour les données d'un autre onglet (base source) via une macro.
    - J'ai une cellule qui me sert de pivot (clé unique) entre les deux onglets.

    Voici mon script vba qui fonctionne pour une ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim maVariable As String
        maVariable = Range("B19")
        Sheets("bdd_suivi").Select
        Range("A1").Select
        Cells.Find(What:=maVariable, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
            .Activate
        Sheets("ecran_modif").Select
        Range("b19:G19").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("bdd_suivi").Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
    dans le script ci-dessus, j'ai deux besoins.

    1°) comment passer d'une ligne à l'autre pour les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maVariable = Range("B19")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("b19:G19").Select

    ps : j'ai besoin de mettre le chiffre "19" en variable et je ne sais pas comment faire.

    Pour être plus clair, mon B19 pour la première ligne devient B20 pour la suivante et ainsi de suite sur environ 60 lignes.

    2°) comment créer une boucle pour que l'incrémentation des 60 lignes génère automatiquement la variable (B19,B20...B60,B61...)

    Avec une condition supplémentaire : Si il n'y a pas de valeur identique dans la recherche "Cells.Find" alors on stop la macro.

    Merci de votre soutient.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 169
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un code pour écrire dans les cellules B19 à B29 de la feuille "Feuil1" du classeur où se trouve le code VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
    Sub Ecriture()
     Dim maLigne As Long, r As Long
     maLigne = 19
     With ThisWorkbook.Worksheets("Feuil1")
      For r = maLigne To 29
       .Range("B" & r) = "Ecriture sur ligne " & r
      Next r
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Re,
    voici comment j'ai compris le code (sans avoir testé), je suis peut-être à coté de la plaque :
    En reprenant le code original
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim maVariable As String, i As Long, ch As Range
     
    For i = 19 To 79
        maVariable = Range("B" & i)
        With Sheets("bdd_suivi")
            Set ch = .Cells.Find(What:=maVariable, After:=.Range("A1"), LookIn:=xlFormulas, LookAt:= _
                xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
            If Not ch Is Nothing Then
                .Range(ch.Address) = Sheets("ecran_modif").Range("b" & i, "G" & i)
            Else
                Exit Sub
            End If
        End With
    Next i
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir à tous
    une autre proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim v As Range, c As Range
     
    Application.ScreenUpdating = False
    With Sheets("bdd_suivi")
        For Each v In Sheets("ecran_modif").Range("B19:B79")
            Set c = .UsedRange.Find(v.Value, LookIn:=xlValues, LookAt:=xlPart)
            If Not c Is Nothing Then
                c.Resize(1, 6).Value = v.Resize(1, 6).Value
                Set c = Nothing
            Else
                Exit Sub
            End If
        Next v
    End With

  5. #5
    Membre éclairé Avatar de Giantrick
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    300
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 300
    Par défaut
    Bonjour,

    Merci Dom, je pense que je ne suis pas loin avec ton code.

    Juste que ce qu'il donne comme résultat n'est pas totalement ce que j'attends.

    En effet, dans mon onglet : "bdd_suivi" il trouve bien les bonnes cellules, mais il vide chacune de celles-ci.

    A la place, je voudrais qu'il me recopie l'intégralité de la ligne de la cellule (B19 à G19) de l'onglet "ecran_modif" dans l'onglet "bdd_suivi" dès qu'il trouve le pivot via la recherche précédente de la fonction.

    Merci de la suite....

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

Discussions similaires

  1. Réponses: 40
    Dernier message: 04/11/2016, 17h28
  2. Réponses: 2
    Dernier message: 03/10/2013, 10h45
  3. Macro variables dans boucles
    Par Mamouthy dans le forum Macro
    Réponses: 5
    Dernier message: 21/03/2013, 15h57
  4. Boucle sur une macro variable
    Par Goris dans le forum Macro
    Réponses: 2
    Dernier message: 24/08/2012, 11h09
  5. Réponses: 3
    Dernier message: 05/12/2008, 08h45

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