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

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

  • navette-mac-2.xlsm
    23 KB · Affichages: 1
  • navette-mac-1.xlsm
    28.7 KB · Affichages: 1
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

Inconnu95

XLDnaute Nouveau
@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
 

Inconnu95

XLDnaute Nouveau
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

  • navette-mac-2.xlsm
    23 KB · Affichages: 5
  • navette-mac-1.xlsm
    28.7 KB · Affichages: 2
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • navette-mac-2.xlsm
    24.1 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • navette-mac-2 (V2).xlsm
    24.3 KB · Affichages: 2

Inconnu95

XLDnaute Nouveau
@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 ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • navette-mac-2 (V3).xlsm
    22.2 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 099
Messages
2 085 269
Membres
102 845
dernier inscrit
Baticle.geo