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 :

Déclarer deux classeurs ouvert [XL-2016]


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
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 119
    Par défaut Déclarer deux classeurs ouvert
    Bonjour a tous;

    Ma demande paraît simple mais je ne trouve rien sur les forums qui comble mes attentes.

    Je souhaiterais déclarer deux classeurs ouverts:

    F1 = TGRI (Tableau de Gestion du réseau incendie).xlsm 'source
    F2 = Export donnée 10.12.2020.xlsx 'cible

    Et pouvoir faire appel à eux à n'importe quel moment dans mon code (code en boucle). Je vous dépose un exemple de ce qu'il a été déjà fait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub SyncTGRISDIS() 'Construction
     
     
           Dim EF1 As Workbooks 'Source
        Dim F1 As Worksheet 'feuille source
        Dim EF2 As Workbooks 'Cible
        Dim F2 As Worksheet 'feuille Cible
     
        '---Déclaration du TGRI sur la variable "F1" d'un classeur déja ouvert
        Set EF1 = Workbooks("TGRI (Tableau de Gestion du réseau incendie).xlsm")
        Set F1 = EF1.Sheets("TGRI")
        '---Déclaration du dossier "export SDIS" sur la variable "F2" d'un classeur déja ouvert
        Set EF2 = Workbooks("Export donnée 10.12.2020.xlsx").Sheets("Feuil1")
        Set F2 = EF2.Sheets("Feuil1")

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wouairness Voir le message

    Bonjour,

    Vous avez une erreur dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Set EF2 = Workbooks("Export donnée 10.12.2020.xlsx").Sheets("Feuil1")
    EF2 étant un classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Set EF2 = Workbooks("Export donnée 10.12.2020.xlsx")
    Sinon quel est le problème si ces deux fichiers sont ouverts dans la même session ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 119
    Par défaut
    Bonjour Eric et merci pour ta réponse. Entre temps j'ai essayé plusieurs modification et toujours aucun résultat. je ne comprend pas pourquoi ma déclaration ne fonctionne pas alors que mes deux classeurs sont bien ouvert. Je te joint mon code actuel. j'ai essayé "worksheets" et "sheets" pour déclarer ma feuille mais mon code bloque sur la varible F1 au niveaux du Worksheets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim EF1 As Workbooks 'Source
        Dim F1 As Worksheet 'feuille source
        Dim EF2 As Workbooks 'Cible
        Dim F2 As Worksheet 'feuille Cible
     
        '---Déclaration du TGRI sur la variable "F1" d'un classeur déja ouvert
        Set EF1 = Workbooks("TGRI (Tableau de Gestion du réseau incendie).xlsm")
        Set F1 = EF1.Worksheets("TGRI").Select
        '---Déclaration du dossier "export SDIS" sur la variable "F2" d'un classeur déja ouvert
        Set EF2 = Workbooks("Export donnée 10.12.2020.xlsx")
        Set F2 = EF2.Worksheets("Feuil1").Select

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wouairness Voir le message
    Aux lignes Set F1 et Set F2, il ne faut pas de .Select à la fin.

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 119
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Aux lignes Set F1 et Set F2, il ne faut pas de .Select à la fin.
    méme résultat.

    Je te mets mon code complet on sait jamais.

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    Sub SyncTGRISDIS() 'Construction
     
        Dim DerLig_f2 As Long, a As Long
        Dim ID As String
        Dim x As Object
        Dim EF1 As Workbooks 'Source
        Dim F1 As Worksheet 'feuille source
        Dim EF2 As Workbooks 'Cible
        Dim F2 As Worksheet 'feuille Cible
     
        '---Déclaration du TGRI sur la variable "F1" d'un classeur déja ouvert
        Set EF1 = Workbooks("TGRI (Tableau de Gestion du réseau incendie).xlsm")
        Set F1 = EF1.Worksheets("TGRI")
        '---Déclaration du dossier "export SDIS" sur la variable "F2" d'un classeur déja ouvert
        Set EF2 = Workbooks("Export donnée 10.12.2020.xlsx")
        Set F2 = EF2.Worksheets("Feuil1")
     
     
     
    'affectation du codde de localisation des source
     
        Application.ScreenUpdating = False 'Evite les rafraîchissements de l'écran et augmente la vitesse d'exécution
        DerLig_f2 = F2.Range("A" & Rows.Count).End(xlUp).Row 'Dernière ligne de la feuille 2
        For a = 2 To DerLig_f2  ' la variable i prend successivement la valeur de la ligne 11 à la dernière ligne de la feuille 2
            ID = F2.Cells(a, "A")
            Set x = F1.Columns("K").Find(ID, LookIn:=xlValues, LookAt:=xlWhole) 'on recherche l'ID dans la colonne 2 (la B) de la feuille 1
            If Not x Is Nothing Then 'si x n'est pas rien alors:
                'pour chaque ligne i testée, on copie la plage qui va de la colonne B à la dernière colonne de la feuille 2 destination feuille 1 colonne B
    '-----Identification-----
                F2.Cells(a, "B") = F1.Cells(x.Row, "L") 'Commune
                F2.Cells(a, "C") = F1.Cells(x.Row, "N") 'Adresse
                F2.Cells(a, "D") = F1.Cells(x.Row, "Q") 'marque
                F2.Cells(a, "E") = F1.Cells(x.Row, "R") 'model
                F2.Cells(a, "F") = F1.Cells(x.Row, "S") 'renverssable
                F2.Cells(a, "G") = F1.Cells(x.Row, "T") 'pi/bi
                F2.Cells(a, "H") = F1.Cells(x.Row, "U") 'diamétre
                F2.Cells(a, "I") = F1.Cells(x.Row, "V") 'satut
                F2.Cells(a, "J") = F1.Cells(x.Row, "W") 'Anné de pose
                F2.Cells(a, "K") = F1.Cells(x.Row, "X") 'type de réseau
                F2.Cells(a, "L") = F1.Cells(x.Row, "Y") 'diamétre canalisation
                F2.Cells(a, "M") = F1.Cells(x.Row, "Z") 'Lieux de la source
                F2.Cells(a, "N") = F1.Cells(x.Row, "AA") 'Type de la source
                F2.Cells(a, "O") = F1.Cells(x.Row, "AB") 'Volume de la source
                F2.Cells(a, "P") = F1.Cells(x.Row, "AC") 'Surpresseur
                F2.Cells(a, "Q") = F1.Cells(x.Row, "O") 'Position X
                F2.Cells(a, "R") = F1.Cells(x.Row, "Y") 'Position Y
                F2.Cells(a, "S") = F1.Cells(x.Row, "AD") 'Etat du Dispositif
    '-----Controle Mécanique----
                F2.Cells(a, "AA") = F1.Cells(x.Row, "AM") 'etat général
                F2.Cells(a, "AB") = F1.Cells(x.Row, "AN") 'accés
                F2.Cells(a, "AC") = F1.Cells(x.Row, "AO") 'manipulation
                F2.Cells(a, "AD") = F1.Cells(x.Row, "AP") 'coffre
                F2.Cells(a, "AE") = F1.Cells(x.Row, "AQ") 'oriantation
                F2.Cells(a, "AF") = F1.Cells(x.Row, "AR") 'serrure
                F2.Cells(a, "AG") = F1.Cells(x.Row, "AS") 'socle
                F2.Cells(a, "AH") = F1.Cells(x.Row, "AT") 'carré de manoeuvre
                F2.Cells(a, "AI") = F1.Cells(x.Row, "AU") 'bouchons
                F2.Cells(a, "AJ") = F1.Cells(x.Row, "AV") 'raccord
                F2.Cells(a, "AK") = F1.Cells(x.Row, "AW") 'vidange
                F2.Cells(a, "AL") = F1.Cells(x.Row, "AX") 'clapet
                F2.Cells(a, "AM") = F1.Cells(x.Row, "AY") 'ptotection
                F2.Cells(a, "AN") = F1.Cells(x.Row, "AZ") 'BAC
                F2.Cells(a, "AO") = F1.Cells(x.Row, "BA") 'vanne
    '-----Signalisation-----
                F2.Cells(a, "AP") = F1.Cells(x.Row, "BB") 'signalement du BI
                F2.Cells(a, "AQ") = F1.Cells(x.Row, "BC") 'numérotation
                F2.Cells(a, "AR") = F1.Cells(x.Row, "BD") 'peinture
    '-----Gestion dossier----
                F2.Cells(a, "AS") = F1.Cells(x.Row, "BE") 'date
                F2.Cells(a, "AT") = F1.Cells(x.Row, "BG") 'sociétée
                F2.Cells(a, "AU") = F1.Cells(x.Row, "BH") 'controleur
                F2.Cells(a, "AV") = F1.Cells(x.Row, "BK") 'observation
                F2.Cells(a, "AW") = F1.Cells(x.Row, "BL") 'controle impossible
    '-----Controle hydraulique-----
                F2.Cells(a, "T") = F1.Cells(x.Row, "AE") 'Débit requis
                F2.Cells(a, "U") = F1.Cells(x.Row, "AF") 'Débit conforme
                F2.Cells(a, "V") = F1.Cells(x.Row, "AG") 'Débit réglementaire
                F2.Cells(a, "W") = F1.Cells(x.Row, "AH") 'pression statique
                F2.Cells(a, "X") = F1.Cells(x.Row, "AI") 'pression dinamique
                F2.Cells(a, "Y") = F1.Cells(x.Row, "AJ") 'debit a 1 BAR
                F2.Cells(a, "Z") = F1.Cells(x.Row, "AL") 'Pression max
            End If
        Next a 'on passe à la valeur suivante de i
        Application.ScreenUpdating = True
        MsgBox "Syncronisation terminé", vbInformation, "Programme de Syncronisation TGRI vers Classeur excel SDIS"
    End Sub
    Ne fait pas attention au commentaire, il s'agit d'un code récupérer d'un autre de mes classeurs.

    Je me demande , la fonction Workbooks prend bien les classeur .xlsm

  6. #6
    Membre Expert
    Homme Profil pro
    Formateur et développeur bureautique
    Inscrit en
    Mars 2007
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur et développeur bureautique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 587
    Par défaut
    Bonjour

    Attention, il y a des s en trop à la fin de Workooks. Ce n'est pas la collection qui nous intéresse ici, mais l'objet. Donc Workbook au lieu de Workbooks.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Dim EF1 As Workbook 'Source
        Dim EF2 As Workbook 'Cible
    En espérant que cela aide.

    Bonne journée

    Pierre Dumas

  7. #7
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2019
    Messages : 119
    Par défaut Solution
    Bonjour messieurs après vérification il s'agissait d'une erreur de frappe sur la déclaration de variable soit "Workbook" au lieu de "Workbooks".

    Merci de votre aide et a bientôt.

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

Discussions similaires

  1. [XL-2010] Lancer macro sur deux classeurs ouverts
    Par florent77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/05/2018, 11h34
  2. [XL-2007] Deux classeurs ouverts - copie de données de l'un à l'autre
    Par Accessifiante dans le forum Excel
    Réponses: 8
    Dernier message: 04/09/2014, 09h29
  3. [XL-2003] Gestion de menu personnalisé pour deux classeurs identiques ouverts
    Par Sacha_vba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/05/2010, 19h00
  4. [VBA-E]:copier entre deux tableaux sur deux classeurs
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 39
    Dernier message: 28/06/2006, 15h39
  5. [VBA-E]travail sur deux classeurs excel
    Par richou dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/04/2006, 10h59

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