Signaler

Modification de 3 classeurs

Posez votre question mir.kan 60Messages postés mardi 6 septembre 2016Date d'inscription 23 septembre 2016 Dernière intervention - Dernière réponse le 23 sept. 2016 à 16:53
Bonjour,
J'ai un petit problème qui me tracasse depuis une semaine... n'étant pas énormément doué en VBA (et autres langages ), je fais appel à toute âme charitable ici présente...
Mon besoin : J'ai un classeur Excel (de plusieurs feuilles) et . On ajoute et modifie régulièrement des lignes à la première feuille du premier classeur qui contient 23 colonnes. Parmi ces 23 colonnes on a une colonne qui contient que les noms de domaines (RH,SM,SU) qui sont en effet séparés dans des classeurs différents et fermés.ET j'aimerais en cas de modification de mon domaine dans la feuille 1 de mon 1er classeur que ça modifie automatique le domaine dans les autres classeurs fermés en l'occurrence le classeur concerné par la modification.
exemple si le domaine était SM avant modification , et si il a été changé en RH j'aimerais qu'on l supprime sur SM et on le transfère sur RH
voici mon code mais ca m'affiche toujours une erreur
Private Sub ModifierPlanDansBDD_Bouton_Click()
    
    If (Me.ReferencePlan_Champ = "" _
    Or Me.SitePlan_Liste = "" _
    Or Me.Entreprise_Liste = "" _
    Or Me.DomainePlan_Liste = "" _
    Or Me.DateDemandePlan_Champ = "") Then
        'Message d'erreur de saisie
        MsgBox _
        "Au moins l'un des champs suivants n'est pas rempli :" & vbCrLf & vbCrLf & _
        "- Référence" & vbCrLf & _
        "- Site " & vbCrLf & _
        "- Entreprise " & vbCrLf & _
        "- Domaine" & vbCrLf & _
        "- Date de la demande de création/renouvellement", _
        vbOKOnly + vbExclamation, _
        "Champs critiques incomplets"
    Else
        'Déclaration de la variable Confirmation de type VbMsgBoxResult
        'Cette variable représente la réponse de l'utilisateur à la confirmation d'ajout de données
        Dim Confirmation As VbMsgBoxResult
        'Demande de confirmation de la modification des informations et affectation de la valeur de la réponse à la variable Confirmation
        Confirmation = MsgBox( _
        "Confirmez-vous la modification des informations saisies dans le formulaire dans la base de données ?", _
        vbYesNo + vbQuestion, _
        "Confirmation d'ajout des informations")
    End If
    'Ajout des données si confirmation
    If (Confirmation = vbYes) Then
        Dim EtatAttenteDocuments As String
        If (Me.EnAttenteDocumentsOui_Option = True) Then
            EtatAttenteDocuments = "Oui"
        ElseIf (Me.EnAttenteDocumentsNon_Option = True) Then
            EtatAttenteDocuments = "Non"
        End If
        Dim EtatAttenteDateRDV As String
        'Affectation de la valeur de l'état à la variable EtatAttenteDateRDV
        If (Me.EnAttenteDateRDVOui_Option = True) Then
            EtatAttenteDateRDV = "Oui"
        ElseIf (Me.EnAttenteDateRDVNon_Option = True) Then
            EtatAttenteDateRDV = "Non"
        End If
        'Déclaration de la variable EtatARenouveler de type String
        'Cette variable représente l'état au sujet du renouvellement du Plan 
        Dim EtatARenouveler As String
        'Affectation de la valeur de l'état à la variable EtatARenouveler
        If (Me.ARenouvelerOui_Option = True) Then
            EtatARenouveler = "Oui"
        ElseIf (Me.ARenouvelerNon_Option = True) Then
            EtatARenouveler = "Non"
        End If
        'Déclaration de la variable EtatSigne de type String
        'Cette variable représente l'état au sujet de la signature du Plan 
        Dim EtatSigne As String
        'Affectation de la valeur de l'état à la variable EtatSigne
        If (Me.PlanSigneOui_Option = True) Then
            EtatSigne = "Oui"
        ElseIf (Me.PlanSigneNon_Option = True) Then
            EtatSigne = "Non"
        End If
        'Déclaration de la variable EtatArchive de type String
    Dim EtatArchive As String
        'Affectation de la valeur de l'état à la variable EtatArchive
        If (Me.PlanArchiveOui_Option = True) Then
            EtatArchive = "Oui"
        ElseIf (Me.PlanArchiveNon_Option = True) Then
            EtatArchive = "Non"
        End If
        'Déclaration de la variable VisiteSignatureConfondues de type String
       Dim VisiteSignatureConfondues As String
        'Affectation de la valeur de l'état à la variable VisiteSignatureConfondues
        If (Me.VisiteSignatureConfonduesOui_Option = True) Then
            VisiteSignatureConfondues = "Oui"
        ElseIf (Me.VisiteSignatureConfonduesNon_Option = True) Then
            VisiteSignatureConfondues = "Non"
        End If
        'Déclaration de la variable ReferenceAvantModification de type String
        'Cette variable représente la valeur de la référence du Plan avant la modification
        Dim ReferenceAvantModification As String
        'Affectation de la valeur de la référence avant la modification
        ReferenceAvantModification = ActiveCell
        'Déclaration de la variable SiteAvantModification de type String
        Dim SiteAvantModification As String
        'Affectation de la valeur du site avant la modification
        SiteAvantModification = ActiveCell.Offset(0, 1)
      Dim EntrepriseAvantModification As String
        'Affectation de la valeur du nom de l'Entreprise avant la modification
        EntrepriseAvantModification = ActiveCell.Offset(0, 2)
        'Déclaration de la variable DomaineAvantModification de type String
        'Cette variable représente la valeur du domaine avant la modification
        Dim DomaineAvantModification As String
        'Affectation de la valeur du domaine avant la modification
        DomaineAvantModification = ActiveCell.Offset(0, 3)
        'Sélection de la feuille "Plans "
        LesPlans.Activate
        'Déclaration de la variable LigneModifiee de Type Long
        'Cette variable représente le numéro de la ligne de modification où l'on modifiera les données
        Dim LigneModifiee As Long
        'Affectation du numéro de la ligne de modification à la variable LigneModifiee
        LigneModifiee = 10 + Me.PlanModifier_Liste.ListIndex
        If (Cells(LigneModifiee, 1) <> ReferenceAvantModification _
        Or Cells(LigneModifiee, 2) <> SiteAvantModification _
        Or Cells(LigneModifiee, 3) <> EntrepriseAvantModification _
        Or Cells(LigneModifiee, 4) <> DomaineAvantModification) Then
            MsgBox "La sélection présente une erreur, aucune modification n'est faite par précaution de préservation des données.", _
            vbOKOnly + vbInformation, _
            "Modification annulée"
        Else
            With LesPlans
                .Cells(LigneModifiee, 1) = Me.ReferencePlanChamp
                If (Me.EmplacementPlan_Champ <> "") Then
                    .Hyperlinks.Add .Cells(LigneModifiee, 1), Me.EmplacementPlan_Champ
                End If
                .Cells(LigneModifiee, 2) = Me.SitePlan_Liste
                .Cells(LigneModifiee, 3) = Me.Entreprise_Liste
                .Cells(LigneModifiee, 4) = Me.DomainePlan_Liste
                .Cells(LigneModifiee, 5) = Me.DateDebutPlan_Champ
                .Cells(LigneModifiee, 6) = Me.DateFinPlan_Champ
                .Cells(LigneModifiee, 7) = Me.LocauxConcernesPlan_Champ
                .Cells(LigneModifiee, 8) = Me.DescriptifInterventionPlan_Champ
                .Cells(LigneModifiee, 9) = Me.PremierContactEntreprise_Champ
                .Cells(LigneModifiee, 10) = Me.NumeroTelephonePremierContact_Champ
                .Cells(LigneModifiee, 11) = Me.NumeroPortablePremierContactEntreprise_Champ
                .Cells(LigneModifiee, 12) = Me.CourrielPremierContactEntreprise_Champ
                .Cells(LigneModifiee, 13) = Me.SecondContactEntreprise_Champ
                .Cells(LigneModifiee, 14) = Me.NumeroTelephoneSecondContactEntreprise_Champ
                .Cells(LigneModifiee, 15) = Me.NumeroPortableSecondChargeAffaires_Champ
                .Cells(LigneModifiee, 16) = Me.CourrielSecondContactEntreprise_Champ
                .Cells(LigneModifiee, 17) = Me.InformationsUtilesEntreprise_Champ
                .Cells(LigneModifiee, 18) = Me.ResponsableSite_Champ
                .Cells(LigneModifiee, 19) = Me.NumeroInterneResponsableSite_Champ
                .Cells(LigneModifiee, 20) = Me.NumeroPortableResponsableSiteChamp
                .Cells(LigneModifiee, 21) = Me.CourrielResponsableSite_Champ
                .Cells(LigneModifiee, 22) = Me.RepresentantSite_Champ
            End With
            'Sélection de la nouvelle ligne ajoutée
            LesPlans.Cells(LigneModifiee, 1).EntireRow.Select
            'Copie de la ligne sélectionnée
            Selection.Copy
            'Déclaration de la variable Adressecréationdomaine de type String
            'Cette variable représente l'adresse du fichier Excel des Plans en création par domaine dans l'arborescence
            Dim AdresseCréationDomaine As String
            'Affectation de l'adresse de base à la variable AdresseCréationDomaine
            'On affecte donc le chemin de l'emplacement du fichier puis on ajoute le domaine choisi pour le nom du fichier auquel on ajoute ensuite l'extension
            AdresseFichierEnCreationDomaine = "mi/desktop" & Me.DomainePlan_Liste & ".xlsm"
            'Déclaration de la variable ClasseurEnCreationDomaine de type Workbook
            'Cette variable représente le classeur dans lequel on va inscrire les données
            Dim ClasseurEnCreationDomaine As Workbook
            'Affectation du bon classeur selon son domaine à la variable ClasseurEnCreationDomaine
            Set ClasseurEnCreationDomaine = Application.Workbooks.Open(AdresseCréationDomaine)
            'Sélection du classeur ouvert
            ClasseurEnCreationDomaine.Activate
            'Sélection de la feuille "Plans " du classeur ouvert
            ClasseurEnCreationDomaine.Sheets("Plans ").Activate
            'Déclaration de la variable LigneCopieePlan de Type Long
            'Cette variable représente le numéro de la ligne copiée où l'on copiera les données
            Dim LigneCopieePlan As Long
            'Affectation du numéro de la ligne de début de données à la variable LigneCopieePlan
            LigneCopieePlan = 4
            'Déclaration de la variable LigneFinDonneesDomaine de Type Long
            'Cette variable représente le numéro de la ligne où finit le contenu des données du classeur des Plans en création par domaine
            Dim LigneFinDonneesDomaine As Long
            'Affectation du numéro de la ligne où finit le contenu des données à la variable LigneDebutDonnees
            LigneFinDonneesDomaine = ClasseurEnCreationDomaine.Sheets("Plans ").[A1048576].End(xlUp).Row
            'Recherche de la ligne correspondant au plan à modifier dans la feuille "Plans " du classeur par domaine
            While ((Cells(LigneCopieePlan, 1) <> ReferenceAvantModification _
            Or Cells(LigneCopieePlan, 2) <> SiteAvantModification _
            Or Cells(LigneCopieePlan, 3) <> EntrepriseAvantModification _
            Or Cells(LigneCopieePlan, 4) <> DomaineAvantModification) _
            And LigneCopieePlan <= LigneFinDonneesDomaine)
                LigneCopieePlan = LigneCopieePlan + 1
            Wend
            'Vérification que l'on a bien trouvé la correspondance dans la feuille "Plans 
            If (LigneCopieePlan > LigneFinDonneesDomaine) Then
                MsgBox "Correspondance non trouvée dans la feuille [Plans] du classeur [Plans de Prévention " & DomaineAvantModification & "]" & vbCrLf & vbCrLf & _
                "La modification ne s'est donc pas effectuée dans le fichier correspondant au domaine.", _
                vbExclamation + vbOKOnly, _
                "Pas de correspondance dans la feuille [Plans] du classeur [Plans " & DomaineAvantModification & "]"
            Else
                'Sélection de la cellule correspondant à la référence du Plan de Prévention à dupliquer
                'ClasseurEnCreationDomaine.Sheets("Plans ").Cells(LigneCopieePlan, 1).Select
                 ActiveSheet("Plans ").Cells(LigneCopieePlan, 1).Select
                'Collage des données sur la ligne
                Selection.PasteSpecial 
                'Fermeture du classeur Excel
                ClasseurEnCreationDomaine.Close (True)
                'Sélection de la feuille "Suivis de visite et signature"
                LesSuivisVisiteSignature.Activate
                'Affectation du numéro de la ligne de début des données à la variable LigneModifiee
                LigneModifiee = 10
                'Déclaration de la variable LigneFinDonnees de Type Long
                'Cette variable représente le numéro de la ligne où finit le contenu des données
                Dim LigneFinDonnees As Long
                'Affectation du numéro de la ligne où finit le contenu des données à la variable LigneFinDonnees
                LigneFinDonnees = LesSuivisVisiteSignature.[A1048576].End(xlUp).Row
               While ((Cells(LigneModifiee, 1) <> ReferenceAvantModification _
                Or Cells(LigneModifiee, 2) <> SiteAvantModification _
                Or Cells(LigneModifiee, 3) <> EntrepriseAvantModification _
                Or Cells(LigneModifiee, 4) <> DomaineAvantModification) _
                And LigneModifiee <= LigneFinDonnees)
                    LigneModifiee = LigneModifiee + 1
                Wend
                'Vérification que l'on a bien trouvé la correspondance dans la feuille "Suivis de visite et signature"
                If (LigneModifiee > LigneFinDonnees) Then
                    MsgBox "Correspondance non trouvée dans la feuille [Suivis de visite et signature] du classeur [Gestion des Plans & vbCrLf & vbCrLf & _
                    "La modification ne s'est donc pas effectuée sur cette feuille.", _
                    vbExclamation + vbOKOnly, _
                    "Pas de correspondance dans la feuille [Suivis de visite et signature] du classeur [Gestion des Plans]"
                Else
                    With LesSuivisVisiteSignature
                        .Cells(LigneModifiee, 1) = Me.ReferencePlan_Champ
                        If (Me.EmplacementPlan_Champ <> "") Then
                            .Hyperlinks.Add .Cells(LigneModifiee, 1), Me.EmplacementPlanPrevention_Champ
                        End If
                        .Cells(LigneModifiee, 2) = Me.SitePlan_Liste
                        .Cells(LigneModifiee, 3) = Me.Entreprise_Liste
                        .Cells(LigneModifiee, 4) = Me.DomainePlan_Liste
                        .Cells(LigneModifiee, 5) = EtatAttenteDocuments
                        .Cells(LigneModifiee, 6) = EtatAttenteDateRDV
                        .Cells(LigneModifiee, 7) = EtatARenouveler
                        .Cells(LigneModifiee, 8) = EtatSigne
                        .Cells(LigneModifiee, 9) = EtatArchive
                        .Cells(LigneModifiee, 10) = Me.CommentaireEtatPlan_Champ
                        .Cells(LigneModifiee, 11) = VisiteSignatureConfondues
                        .Cells(LigneModifiee, 12) = Me.ContactEntreprisevisite_Champ
                        .Cells(LigneModifiee, 13) = Me.ResponsableSiteVisite_Champ
                        .Cells(LigneModifiee, 14) = Me.ChargeAffairesVisite_Champ
                        .Cells(LigneModifiee, 15) = Me.DatePrevueVisiteSite_Champ
                        .Cells(LigneModifiee, 16) = Me.AdresseVisiteSite_Champ
                        .Cells(LigneModifiee, 17) = Me.CommentaireGestionVisiteSite_Champ
                        .Cells(LigneModifiee, 18) = Me.ContactEntrepriseExterieureSignature_Champ
                        .Cells(LigneModifiee, 19) = Me.ResponsableSiteSignature_Champ
                        .Cells(LigneModifiee, 20) = Me.ChargeAffairesSignature_Champ
                        .Cells(LigneModifiee, 21) = Me.DatePrevueSignature_Champ
                        .Cells(LigneModifiee, 22) = Me.AdresseSignature_Champ
                        .Cells(LigneModifiee, 23) = Me.CommentaireGestionSignature_Champ
                    End With
                    'Sélection de la ligne modifiée
                    LesSuivisVisiteSignature.Cells(LigneModifiee, 1).EntireRow.Select
                    'Copie de la ligne sélectionnée
                    Selection.Copy
                    'Affectation du bon classeur selon son domaine à la variable ClasseurEnCreationDomaine
                    Set ClasseurEnCreationDomaine = Application.Workbooks.Open(AdresseCréationDomaine)
                    'Sélection du classeur ouvert
                    ClasseurEnCreationDomaine.Activate
                    'Sélection de la feuille "Suivis de visite et signature" du classeur ouvert
                    ClasseurEnCreationDomaine.Sheets("Suivis de visite et signature").Activate
                    'Affectation du numéro de la ligne de début de données à la variable LigneCopieePlan
                    LigneCopieePlan = 4
                    'Affectation du numéro de la ligne où finit le contenu des données à la variable LigneFinDonneesDomaine
                    LigneFinDonneesDomaine = ClasseurEnCreationDomaine.Sheets("Suivis de visite et signature").[A1048576].End(xlUp).Row
                    While ((Cells(LigneCopieePlan, 1) <> ReferenceAvantModification _
                    Or Cells(LigneCopieePlan, 2) <> SiteAvantModification _
                    Or Cells(LigneCopieePlan, 3) <> EntrepriseAvantModification _
                    Or Cells(LigneCopieePlan, 4) <> DomaineAvantModification) _
                    And LigneCopieePlan <= LigneFinDonneesDomaine)
                        LigneCopieePlan = LigneCopieePlan + 1
                    Wend
                    'Vérification que l'on a bien trouvé la correspondance dans la feuille "Suivis de visite et signature"
                    If (LigneCopieePlan > LigneFinDonneesDomaine) Then
                        MsgBox "Correspondance non trouvée dans la feuille [Suivis de visite et signature] du classeur [Plans de Prévention " & DomaineAvantModification & "]" & vbCrLf & vbCrLf & _
                        "La modification ne s'est donc pas effectuée dans le fichier correspondant au domaine.", _
                        vbExclamation + vbOKOnly, _
                        "Pas de correspondance dans la feuille [Suivis de visite et signature] du classeur [Plans de Prévention " & DomaineAvantModification & "]"
                    Else
                        'Sélection de la cellule correspondant à la référence du Plan à modifier
                        ClasseurEnCreationDomaine.Sheets("Suivis de visite et signature").Cells(LigneCopieePlan, 1).Select
                        'Collage des données sur la ligne
                        Selection.PasteSpecial
                        'Fermeture du classeur Excel
                        ClasseurEnCreationDomaine.Close (True)
                    End If
                End If
            End If
        End If
        'Sélection de la feuille "Suivis de visite et signature"
        LesSuivisVisiteSignature.Activate
        [A10:ZZ1048576].Sort [A10]
        'Sélection de la feuille "Plans de Prévention"
        LesPlansPrevention.Activate
        [A10:ZZ1048576].Sort [A10]
      
        Unload Me
    End If
End Sub
Afficher la suite 
Utile
+0
moins plus
Bonjour,

Lorsque tu mets du code, il faut utiliser les balises Code !!!
Voir : http://www.commentcamarche.net/faq/4622-ccm-astuces-et-conseils-pour-la-redaction#code

Mais il est inutile de mettre un code aussi long : personne ne l'exploitera
Il est préférable de cibler le problème et de mettre un code simplifié qui y correspond ou de joindre le fichier via http://cjoint.com/

Rappel : Un code qui se base sur l'utilisation de la cellule active est une très grande source de dysfonctionnements !
L'emploi de Select, ActiveCell, Selection, ... est à bannir, il est préférable d'utiliser une référence à un objet déclaré qu'il soit actif ou non.
Patrice33740 4979Messages postés dimanche 13 juin 2010Date d'inscription 23 septembre 2016 Dernière intervention - 23 sept. 2016 à 15:44
Mets ton dernier fichier sur http://cjoint.com/
Et détailles la manipulation qui provoque le pb
Répondre
mir.kan 60Messages postés mardi 6 septembre 2016Date d'inscription 23 septembre 2016 Dernière intervention - 23 sept. 2016 à 16:07
voici le lien http://www.cjoint.com/c/FIxogNnXnjN
le code se trouve au niveau de la feuille modiferunplan
Répondre
Patrice33740 4979Messages postés dimanche 13 juin 2010Date d'inscription 23 septembre 2016 Dernière intervention - 23 sept. 2016 à 16:37
lorsque je fais modifier un plan il n'y a pas de bug !

Re : détailles la manipulation exacte qui provoque le pb
Répondre
mir.kan 60Messages postés mardi 6 septembre 2016Date d'inscription 23 septembre 2016 Dernière intervention - 23 sept. 2016 à 16:44
Quand vous cliquez sur l'onglet modifier ,il y'a un formulaire qui s'ouvre.Le bug apparait quand on essaie de changer le domaine
Répondre
mir.kan 60Messages postés mardi 6 septembre 2016Date d'inscription 23 septembre 2016 Dernière intervention - 23 sept. 2016 à 16:53
J'ai choisi mon plan à modifier et j'ai ensuite changé mon domaine et quand je clique sur le bouton modifier il m'affiche un message d'erreur .En faite il change juste le domaine au niveau du classeur ouvert mais pas sur les autres classeurs fermés.

merciii
Répondre
Ajouter un commentaire

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !