Microsoft 365 Copier coller sous conditions d'un classeur a un autre VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Inconnu95

XLDnaute Nouveau
Salut à tous !

J'ai besoin de votre aide pour le problème suivant. J'ai deux classeurs. Le premier classeur sert à alimenter le deuxième pour les numéros de factures cependant il ne doit alimenter que les lignes correspondants au bon numéro de facture sur le deuxième classeur. Les colonnes à alimenter sont les colonnes N et O du classeur A vers le classeur B (chacun se trouvant à un emplacement différent), uniquement si les colonnes E, F, G,H,I,J,K,P correspondent sur les 2 classeurs. J'aimerais savoir s'il était possible de développer une macro dessus ou non.

Je vous met les fichiers en pièce jointe.

Merci de votre aide.
 

Pièces jointes

Solution
Bonjour,
Si votre plage est amenée à évoluer votre code devra être repris, préférez :
VB:
Sub InsertFormula()
    Dim Plage, Formule$
    Application.ScreenUpdating = False
    Set Plage = Range("N2:O" & [S65500].End(xlUp).Row)  ' Plage utile colonne O
    Formule = "=SI($S2='[navette-mac-1.xlsm]Accueil'!$S2;'[navette-mac-1.xlsm]Accueil'!N2;"""")"
    Plage.FormulaLocal = Formule    ' Collage formule
    Plage.Value = Plage.Value       ' Copier Coller valeur sur plage utile
    Application.ScreenUpdating = True
End Sub
Bonjour Inconnu,
Utilisez l'enregistreur de macro. En rajoutant les " nécessaires, cela donne :
VB:
ActiveCell.FormulaLocal = "=SI(S2='[navette-mac-1.xlsm]Accueil'!$S2;'[navette-mac-1.xlsm]Accueil'!$O2;"""")"
Remplacez ActiveCell par ce que vous voulez.
 
@BrunoM45 Je m'excuse pour cela n'ayant pas de réponse depuis plusieurs jours j'essayais de maximiser mes chances. Cependant une fois la solution trouvée je n'hésite pas à fermer mes sujets.

@sylvanu Cela fonctionne bien merci. Cependant j'aimerais ajouter la formule aussi ActiveCell.FormulaLocal = "=SI(S2='[navette-mac-1.xlsm]Accueil'!$S2;'[navette-mac-1.xlsm]Accueil'!$N2;"""")" et en faire une boucle svp. J'aimerais aussi qu'une fois la valeur apparaît la formule laisse place à la valeur.

Merci énormément de votre aide
 
Il faudrait que les 2 formules s'exécute tant que la colonne S contient du texte je vous joins le fichier pour que ce soit plus clair. J'ai réussi à trouver une formule pour le coller en valeur :

VB:
    Range("O2:O29").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
 

Pièces jointes

Dernière édition:
Voir PJ avec :
VB:
Sub InsertFormula()
    Dim Plage, Formule$
    Application.ScreenUpdating = False
    Set Plage = Range("O2:O" & [S65500].End(xlUp).Row)  ' Plage utile colonne O
    Formule = "=SI(S2='[navette-mac-1.xlsm]Accueil'!$S2;'[navette-mac-1.xlsm]Accueil'!$O2;"""")"
    Plage.FormulaLocal = Formule    ' Collage formule 1
    Set Plage = Range("N2:N" & [S65500].End(xlUp).Row)  ' Plage utile colonne N
    Formule = "=SI(S2='[navette-mac-1.xlsm]Accueil'!$S2;'[navette-mac-1.xlsm]Accueil'!$N2;"""")"
    Plage.FormulaLocal = Formule    ' Collage formule 2
    Application.ScreenUpdating = True
End Sub
 

Pièces jointes

Oups! Plus simple :
VB:
Sub InsertFormula()
    Dim Plage, Formule$
    Application.ScreenUpdating = False
    Set Plage = Range("O2:N" & [S65500].End(xlUp).Row)  ' Plage utile colonne O
    Formule = "=SI($S2='[navette-mac-1.xlsm]Accueil'!$S2;'[navette-mac-1.xlsm]Accueil'!N2;"""")"
    Plage.FormulaLocal = Formule    ' Collage formule 1
    Application.ScreenUpdating = True
End Sub
 

Pièces jointes

@sylvanu Impeccable merci beaucoup !! Cela fonctionne. voici le code une fois adapté :

VB:
Option Explicit
Sub InsertFormula()
    Dim Plage, Formule$
    Application.ScreenUpdating = False
    Set Plage = Range("O2:N" & [S65500].End(xlUp).Row)  ' Plage utile colonne O
    Formule = "=SI($S2='[navette-mac-1.xlsm]Accueil'!$S2;'[navette-mac-1.xlsm]Accueil'!N2;T2)"
    Plage.FormulaLocal = Formule    ' Collage formule 1
    Application.ScreenUpdating = True
        Range("N2:O29").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

@BrunoM45 Pouvez-vous mettre la solution dans le sujet clos svp ?
 
Bonjour,
Si votre plage est amenée à évoluer votre code devra être repris, préférez :
VB:
Sub InsertFormula()
    Dim Plage, Formule$
    Application.ScreenUpdating = False
    Set Plage = Range("N2:O" & [S65500].End(xlUp).Row)  ' Plage utile colonne O
    Formule = "=SI($S2='[navette-mac-1.xlsm]Accueil'!$S2;'[navette-mac-1.xlsm]Accueil'!N2;"""")"
    Plage.FormulaLocal = Formule    ' Collage formule
    Plage.Value = Plage.Value       ' Copier Coller valeur sur plage utile
    Application.ScreenUpdating = True
End Sub
 

Pièces jointes

Bonjour,
Une macro Sub Worksheet_BeforeRightClick doit être obligatoirement dans la feuille concernée, de plus la formule n'a rien à voir avec les post précédents.
Donc expliquez ce que vous voulez faire, ce sera plus simple.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
380
Réponses
2
Affichages
111
Réponses
5
Affichages
327
Retour