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 :

Coller x fois un objet a la suite


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    responsable formation
    Inscrit en
    Janvier 2020
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : responsable formation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 75
    Par défaut Coller x fois un objet a la suite
    Bonjour, je bloque depuis quelque temps sur le copier coller d un objet range. Je souhaite copier l'objet range en question et le coller un certain nombre de fois à la suite mais je n'y parviens pas. Pouvez vous m'aider .
    Voici le code que j ai commencer mais il me fait qu un seul copier/coller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 1 To icompte 'nombre de fois qu'il doit me répeter le coller
        oetatpersonnel.Copy oetatpersonnel.Offset(tcompte)
        Application.CutCopyMode = False
        Next i

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Avant "Next i", il faudrait incrémenter "tcompte" pour obtenir un nouveau déplacement.
    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       For i = 1 To icompte 'nombre de fois qu'il doit me répeter le coller
            oetatpersonnel.Copy oetatpersonnel.Offset(tcompte)
            tcompte=tcompte + 1
        Next i
    cela doit pouvoir s'écrire aussi comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        For i = 1 To icompte 'nombre de fois qu'il doit me répeter le coller
            oetatpersonnel.Offset(tcompte) = oetatpersonnel
            tcompte = tcompte + 1
        Next i
    Cdlt

  3. #3
    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 186
    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 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Beaucoup de choses à modifier dans ces lignes de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 1 To icompte 'nombre de fois qu'il doit me répeter le coller
        oetatpersonnel.Copy oetatpersonnel.Offset(tcompte)
        Application.CutCopyMode = False
    Next i
    Déjà en mettant la ligne de code Option Explicit en tête de module, tu aurais pu constater, le premier problème
    • En ligne 2 la variable tcompte qui devait sans doute être icompte vaut 0 donc le programme fait du "surplace" puisque le déplacement est de 0 ligne
    • ligne 2 toujours, ce n'est évidemment pas un déplacement de la valeur de icompte qui doit être effectué mais bien de icompte * par le nombre de lignes de la plage à copier
    • ligne 3, l'instruction Application.CutCopyMode = False ne sert à rien. Utile seulement avec le Copy/Paste


    Voici donc une procédure qui fonctionne et qui recopie 5 fois à la suite la plage A1:C5 de la feuille nommée Feuil1
    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
    Sub t()
      ' Déclaration et assignation des variables
      Const iCompte As Long = 5
      Dim oEtatPersonnel As Range
      Dim i As Long
      Set oEtatPersonnel = ThisWorkbook.Worksheets("Feuil1").Range("A1:C5")
      ' Début
      For i = 1 To iCompte 'nombre de fois qu'il doit me répeter le coller
        With oEtatPersonnel
        .Copy Destination:=.Offset(i * .Rows.Count)
        End With
      Next i
      ' Fin
      Set oEtatPersonnel = Nothing
    End Sub

    Petit conseil

    1. Il est important d'avoir l'instruction Option Explicit en tête de module et pour que ce soit automatique, il suffit de cocher Déclaration des variables obligatoire de la boîte de dialogue Options (Outils/Options... de l'éditeur VBA)
    2. Toujours déclarer ces variables
    3. Essayer autant que possible d'avoir le début de chaque mot du nom d'une variable en majuscule (ce que l'on nomme le Camel Case)
    4. A la place de i pour la variable de la boucle, j'aurais choisi Deplacement mais bon ce n'est pas le plus important mais c'est utile d'avoir des noms explicite pour les variables.


    A lire éventuellement, Utiliser les variables en VBA Excel

    [EDIT]
    Bonjour ARTURO83 et désolé pour le télescopage de nos réponses. J'étais en train de rédiger ma réponse pendant que tu publiais la tienne sans doute
    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

  4. #4
    Membre confirmé
    Homme Profil pro
    responsable formation
    Inscrit en
    Janvier 2020
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : responsable formation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 75
    Par défaut
    Bonjour merci pour cette réponse, je vous avais mis que la partie code qui m intéressais, voici mon code complet en cours d’écriture :
    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
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Private Sub Worksheet_Activate()
     
        Dim cnx As New ADODB.Connection
        Dim cmd As New ADODB.Command
        Dim rst As New ADODB.Recordset
        Dim resultat As Variant
        Dim oetatpersonnel As Range
        Dim icompte As Integer
        Dim tcompte As Integer
        Dim i As Integer
     
    'creation de l'objet etatpersonnel
        Set oetatpersonnel = Range("EtatPersonnelEtatPersonnel")
     
     
    'Création de la connexion
        cnx.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Garage\Desktop\Formation_CIS_SEMUR\Formation_CIS_SEMUR.accdb;Persist Security Info=False;"
        Set cmd.ActiveConnection = cnx
     
    'Création de la commande
        cmd.CommandType = adCmdText
        cmd.CommandText = "Select * From R_EtatPersonnel"
     
    'Execution de la commande
        rst.CursorLocation = adUseClient
        rst.Open cmd, , adOpenStatic, adLockBatchOptimistic
     
    'Compte le nombre d'enregistrement
        icompte = rst.RecordCount
        'Debug.Print (icompte)
     
    'Parcour des enregistrement
        'Do Until rst.EOF
        resultat = rst
        rst.MoveNext
        'Debug.Print resultat("Matricule")
        'Loop
        rst.MoveFirst
     
    'Affectation du résultat à une zone nommée
        Range("TitreEtatPersonnel") = resultat("Expr1")
        Range("MatriculeEtatPersonnel") = resultat("Matricule")
        Range("DateDeNaissanceEtatPersonnel") = resultat("DateDeNaissance")
        Range("AgeEtatPersonnel") = resultat("Age")
        Range("CommentaireEtatPersonnel") = resultat("LibelleObservation")
        Range("TelephoneEtatPersonnel") = resultat("Telephone")
        Range("EmailEtatPersonnel") = resultat("Email")
        Range("N°DeRueEtatPersonnel") = resultat("N° de rue")
        Range("RueEtatPersonnel") = resultat("Rue")
        Range("CodePostalEtatPersonnel") = resultat("Code Postal")
        Range("VilleEtatPersonnel") = resultat("Ville")
        Range("DateDIncorporationEtatPersonnel") = resultat("DateDIncorporation")
        Range("DateDEntreeCSEtatPersonnel") = resultat("DateDEntreeCS")
        Range("FonctionEtatPersonnel") = resultat("DernierDeDernierDeFonction")
        Range("DateDeLaVisiteMedicaleEtatPersonnel") = resultat("DateVisiteMedicale")
        Range("DateDuPermisAmbulanceEtatPersonnel") = resultat("DatePermisAmbulance")
        Range("DatePermisPLEtatPersonnel") = resultat("DatePermisPoidsLourd")
        Range("DateDeNominationEtatPersonnel") = resultat("DernierDeDateDeNomination")
     
    'Création de l'etat en mode continu
        tcompte = Range("EtatPersonnelEtatPersonnel").Rows.Count
        'Debug.Print tcompte
     
        For i = 1 To icompte
        oetatpersonnel.Copy oetatpersonnel.Offset(tcompte)
        Application.CutCopyMode = False
        Next i
     
     'Fermeture du recordset
        rst.Close
     
    'Initialisation des variables
        Set rst = Nothing
        Set cmd = Nothing
     
        resultat = ""
     
    End Sub

  5. #5
    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 186
    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 186
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suppose que c'est donc résolu. Merci de modifier le statut de la discussion.
    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

  6. #6
    Membre confirmé
    Homme Profil pro
    responsable formation
    Inscrit en
    Janvier 2020
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : responsable formation

    Informations forums :
    Inscription : Janvier 2020
    Messages : 75
    Par défaut
    Super merci ça marche encore merci.

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

Discussions similaires

  1. problème pour éxecuter 2 fois le même code à la suite
    Par cvdistri dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 09/07/2008, 00h50
  2. Réponses: 7
    Dernier message: 21/09/2007, 16h26
  3. DragDrop avec un objet qui le suit
    Par EmilyRose dans le forum Flash
    Réponses: 3
    Dernier message: 23/11/2006, 04h21
  4. Réponses: 2
    Dernier message: 19/07/2006, 01h12
  5. [Struts][classe Action]Mettre un objet en parametre (suite)
    Par julienOriano dans le forum Struts 1
    Réponses: 6
    Dernier message: 16/06/2004, 16h54

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