Insérer une ligne puis copier/coller dans une 2ème feuille sans l'afficher

JerCaz

XLDnaute Occasionnel
Bonjour le forum,

Dans le cadre de la création d'un fichier excel partagé entre plusieurs utilisateurs, à des fins professionnelles, j'ai créé un document comportant plusieurs onglets.
Sollicitant votre aide depuis une connexion professionnelle ultra bridée, je ne suis malheureusement pas en mesure d'héberger sur "ci-joint" un exemple.
Cependant, j'arrive à héberger le fichier sur "archive-host" (par conséquent, je m'excuse par avance d'être hors charte).


Enfin bref, j'en arrive au vif du sujet.

Mon fichier contient plusieurs onglets:
- "coordonnateur"
- "3bcardio"
etc...

J'ai créé un UserForm qu'on exécute à partir de l'onglet "Coordonnateur".
Mon objectif est que pendant l'éxécution du UserForm, à la validation par le Bouton "OK", il y ait une insertion d'une nouvelle ligne entre les lignes 4 et 5 dans l'onglet en cours, puis le remplissage des cellules A5 à J5 se fait en fonction des infos renseignées dans les différents COmboBox, TextBox et CheckBox contenus dans ce UserForm.
Mais je souhaiterais que simultanément ET SANS L'AFFICHER, il y ait l'insertion d'une nouvelle ligne entre les lignes 3 et 4 de l'onglet "Coordonnateur", et un recopiage des données renseignées dans mon premier onglet.
Le code que j'ai inclu dans le UserForm est donc le suivant:

Code:
Private Sub CommandButton1_Click()
    'insérer une nouvelle ligne dans l'onglet actif
    Rows("5:5").Select
    Selection.Insert Shift:=xlDown
    Selection.RowHeight = 12.75
    Range("J5") = "Non"
    Range("A5").Select
    
    'remplir la nouvelle ligne de l'onglet du service
    Range("A5") = TextBox1
    Range("B5") = TextBox2
    Range("C5") = TextBox3
    Range("D5") = ComboBox1
    Range("E5") = ComboCard
    Range("F5") = ComboBox2
    Range("G5") = ComboBox3
    Range("H5") = TextBox4
    Range("I5") = ComboBox4
    Select Case CheckBox1.Value
        Case True: Range("J5") = "Oui"
        Case False: Range("J5") = "Non"
        Case Else: Range("J5") = "Non"
    End Select
    
    'copie la sélection dans l'onglet du coordonnateur
        Rows("5:5").Select
    Selection.Copy
    Sheets("Coordonnateur").Select
    Rows("4:4").Select
    Selection.Insert Shift:=xlDown
    Selection.RowHeight = 12.75
  Unload Me
End Sub

Le soucis avec ce code, c'est que l'onglet "Coordonnateur" s'affiche à l'écran, ce que je ne peux pas me permettre.

Voici un extrait de mon fichier (encore mille fois désolé de ne pas pouvoir utiliser "ci-joint")
Voir le Fichier : Brancardage.zip

Je sollicite donc votre aide pour éclairer ma lanterne et résoudre ce casse-tête qui devient prise de tête.
Vous remerciant grandement de vous pencher sur mon problème,
cordialement,
JerCaz
 

michel_m

XLDnaute Accro
Re : Insérer une ligne puis copier/coller dans une 2ème feuille sans l'afficher

Bonjour,

petites remarques au départ: tes lignes 65 à 68 remplies dans "bcardio" sont à éviter absolument, idem pour 77 à 80 dans "coordinateur"
(ca m'a forcer à utiliser une syntaxe peu habituelle pour trouver la première vide) la méthode d'insérer des lignes avec des "select" est très longue ainsi que les copy-paste d'où ma proposition
enfin, la hauteur de ligne par défaut sur ton classeur est 12,75 donc, inutile de de l'indiquer dans la macro
essaies

Code:
Si le bouton OK est cliqué
Private Sub CommandButton1_Click()
Dim lig1 As Long, lig2 As Long
Dim tablo
    'premiere ligne vide
    lig1 = Columns(1).Find("", Range("A4")).Row
ReDim tablo(9)
    'remplir la nouvelle ligne de l'onglet du service
    tablo(0) = TextBox1
    tablo(1) = TextBox2
    tablo(2) = TextBox3
    tablo(3) = ComboBox1
    tablo(4) = ComboCard
    tablo(5) = ComboBox2
    tablo(6) = ComboBox3
    tablo(7) = TextBox4
    tablo(8) = ComboBox4
    Select Case CheckBox1.Value
        Case True: tablo(9) = "Oui"
        Case False: tablo(9) = "Non"
        Case Else: tablo(9) = "Non"
    End Select
    
    Application.ScreenUpdating = False
    'reporte dans feuille cardio
    Range(Cells(lig1, 1), Cells(lig1, 10)) = tablo
    'reporte la sélection dans l'onglet du coordonnateur
     With Sheets("Coordonnateur")
         '1° ligne vide
            lig2 = .Columns(1).Find("", .Range("A3")).Row
            .Range(.Cells(lig2, 1), .Cells(lig2, 10)) = tablo
    End With
    Application.ScreenUpdating = True
Unload Me
End Sub
 
Dernière édition:

JerCaz

XLDnaute Occasionnel
Re : Insérer une ligne puis copier/coller dans une 2ème feuille sans l'afficher

Bonjour Michel_M

Ta proposition est tout simplement géniale !!!!

Je te remercie vraiment pour ton aide.
Pour les lignes 65 à 68 dans 3bcardio et 77 à 80 dans coordonnateur, je te prie de bien vouloir m'excuser: c'est un vestige d'un ancien test que j'ai mal purgé. C'est de ma faute.

J'avais du mal à trouver comment remplir la dernière ligne, c'est pour ça que je cherchais à contourner le problème en remplissant la première. Ce que tu me propose corrige donc énormément de soucis que je rencontrais par la suite.

Tu as donc non seulement répondu à ma demande, mais en plus, tu m'as aidé à corriger d'autres problèmes grace à tes explications.

Encore une fois, un grand merci pour ton aide!!!!
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 151
Membres
103 133
dernier inscrit
mtq