Copier valeur d'une cellule d'une feuille vers une autre

  • Initiateur de la discussion Initiateur de la discussion amarbaix
  • Date de début Date de début

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 !

A

amarbaix

Guest
Bonjour

Dans ma colonne M (la colonne 13) de ma feuille "PLANS", j'ai fait une formule qui me donne un état de mes documents.
La formule de ma colonne M me donne 3 réponses possible : "Doc. en attente" ; "OK" ; " "
Idem avec la colonne M (la colonne 13) de ma feuille "Fiche technique".
Idem avec la colonne N (la colonne 13) de ma feuille "NC ; note de calcul".

La colonne 1 de ces trois feuilles donne le nom du document. La colonne 2, la version du document et la colonne 3, le nom

J'essaye depuis des jours de créer une macro qui me fait une liste (dans une feuille nommée "LISTE") des documents avec la valeur "Doc. en attente" et cela avec les trois feuilles ci-dessus (PLANS, Fiche technique, note de calcul)


J'ai essayé de faire une macro avec une feuille mais ça ne marche pas.

Sub Copy()
Dim Nom As String
Dim i, j As Integer
Sheets("PLANS").Select
i = 7
j = 2
Do
Nom = "Doc. en attente"
If Sheets("PLANS").Cells(i, 13).Value = Nom Then
Sheets("LISTE").Cells(j, 1).Value = Sheets("PLANS").Cells(i, 1).Value
i = i + 1
End If
j = j + 1
Loop While i = 1000
End Sub
 

Pièces jointes

Re : Copier valeur d'une cellule d'une feuille vers une autre

Bonjour amarbaix, bienvenue sur XLD,

La macro (dans Module1) se lance par Ctrl+A :

Code:
Sub DocEnAttente() 'raccourci clavier Ctrl+A
Dim Feuille, Ncol, critere$, lig&, i As Byte, plage As Range
Feuille = Array("PLANS", "Fiche technique", "NC ; note de calcul")
Ncol = Array(13, 13, 12)
critere = "Doc. en attente"
Sheets(critere).[3:65536].Clear
lig = 2 '1ère ligne de recopie
Application.ScreenUpdating = False
For i = 0 To UBound(Feuille)
  With Sheets(Feuille(i))
    .AutoFilterMode = False
    Set plage = .Range("A4", .[A65536].End(xlUp)).Resize(, Ncol(i))
    plage.AutoFilter Ncol(i), critere
    Set plage = plage.Offset(1).SpecialCells(xlCellTypeVisible)
    Set plage = Intersect(.[A:C], plage) 'on garde 3 colonnes
    plage.Copy Sheets(critere).Cells(lig, 1) 'restitution
    lig = lig + plage.Count / 3 'nouvelle ligne de recopie
    .AutoFilterMode = False
  End With
Next
Sheets(critere).Activate 'facultatif
End Sub
Fichier joint.

Il m'a paru naturel de nommer Doc. en attente la feuille de restitution.

Seules les 3 colonnes A:C sont conservées car les autres ne se correspondent pas toujours.

A+
 

Pièces jointes

Re : Copier valeur d'une cellule d'une feuille vers une autre

Bonjour amarbaix, Gorfael, le forum,

Une amélioration intéressante.

Pour chaque feuille, les colonnes à copier sont prédéterminées (colonnes communes) :

Code:
Sub DocEnAttente() 'raccourci clavier Ctrl+A
Dim Feuille, Ncol, GardeCol, critere$, lig&, i As Byte, plage As Range
Feuille = Array("PLANS", "Fiche technique", "NC ; note de calcul")
Ncol = Array(13, 13, 12)
GardeCol = Array("A:F,H:J", "A:C,E:J", "A:I") 'colonnes à copier
critere = "Doc. en attente"
Sheets(critere).[3:65536].Clear
lig = 3 '1ère ligne de recopie
Application.ScreenUpdating = False
For i = 0 To UBound(Feuille)
  With Sheets(Feuille(i))
    .AutoFilterMode = False
    Set plage = .Range("A4", .[A65536].End(xlUp)).Resize(, Ncol(i))
    plage.AutoFilter Ncol(i), critere
    Set plage = plage.Offset(1).SpecialCells(xlCellTypeVisible)
    Set plage = Intersect(.Range(GardeCol(i)), plage) 'choix des colonnes
    plage.Copy Sheets(critere).Cells(lig, 1) 'restitution
    lig = lig + Intersect(.[A:A], plage).Count 'nouvelle ligne de recopie
    .AutoFilterMode = False
  End With
Next
Sheets(critere).Activate 'facultatif
End Sub
Fichier (2).

A+
 

Pièces jointes

Dernière édition:
Re : Copier valeur d'une cellule d'une feuille vers une autre

Bonjour

Encore merci pour tout.

Pour que la macro "DocEnattente" soit parfaite, il faudrait qu'elle réalise les macros màjplans, màjFT, màjPE et màjNC au préalable

Au-dessus des lignes correspondant à chaque feuille, il faudrait indiquer dans la colonne A en gras souligné le nom de celle-ci

Après il faudrait supprimer les lignes vides entre.
J'avais mis la formule suivante mais ça ralentit vraiment tout
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp


A+
 

Pièces jointes

Re : Copier valeur d'une cellule d'une feuille vers une autre

Re,

Pour que la macro "DocEnattente" soit parfaite, il faudrait qu'elle réalise les macros màjplans, màjFT, màjPE et màjNC au préalable

Appelez-les donc en début de macro :

Code:
Sub DocEnAttente() 'raccourci clavier Ctrl+A
Dim Feuille, Ncol, GardeCol, critere$, lig&, i As Byte, plage As Range
màjplans
màjFT
màjPE
màjNC
'reste du code
End Sub
Au-dessus des lignes correspondant à chaque feuille, il faudrait indiquer dans la colonne A en gras souligné le nom de celle-ci

Voici donc la version (3) :

Code:
Sub DocEnAttente() 'raccourci clavier Ctrl+A
Dim Feuille, Ncol, GardeCol, critere$, lig&, i As Byte, plage As Range
Feuille = Array("PLANS", "Fiche technique", "NC ; note de calcul")
Ncol = Array(13, 13, 12)
GardeCol = Array("A:F,H:J", "A:C,E:J", "A:I") 'colonnes à copier
critere = "Doc. en attente"
Sheets(critere).[3:65536].Clear
lig = 4 '1ère ligne de recopie après le nom de la feuille
Application.ScreenUpdating = False
For i = 0 To UBound(Feuille)
  With Sheets(Feuille(i))
    With Sheets(critere).Cells(lig - 1, 1) 'nom en gras et souligné
      .Value = Feuille(i)
      .Font.Bold = True
      .Font.Underline = xlUnderlineStyleSingle
    End With
    .AutoFilterMode = False
    Set plage = .Range("A4", .[A65536].End(xlUp)).Resize(, Ncol(i))
    plage.AutoFilter Ncol(i), critere
    Set plage = plage.Offset(1).SpecialCells(xlCellTypeVisible)
    Set plage = Intersect(.Range(GardeCol(i)), plage) 'choix des colonnes
    plage.Copy Sheets(critere).Cells(lig, 1) 'restitution
    lig = lig + Intersect(.[A:A], plage).Count 'nouvelle ligne de recopie
    .AutoFilterMode = False
  End With
Next
Sheets(critere).Activate 'facultatif
End Sub
A+
 

Pièces jointes

Re : Copier valeur d'une cellule d'une feuille vers une autre

Re,

Bon, je ne m'étais pas occupé de votre dernier fichier.

Vos 4 macros de mise à jour ne me satifaisant pas du tout, je les ai revues :

Code:
Sub MAJ(W As Worksheet) 'complète les formules de la feuille W colonnes K:M
Dim lig1&, lig2&
lig1 = W.[L65536].End(xlUp).Row 'dernière ligne colonne L
lig2 = W.[A65536].End(xlUp).Row 'dernière ligne colonne A
If lig2 > lig1 Then W.Range("K" & lig1 & ":M" & lig1).AutoFill W.Range("K" & lig1 & ":M" & lig2)
End Sub

Sub BoutonMAJ() 'à affecter aux boutons
MAJ ActiveSheet
End Sub
Bien entendu, la macro DocEnAttente appelle la macro MAJ avant de traiter chaque feuille.

Votre fichier complété.

A+
 

Pièces jointes

Dernière édition:
Re : Copier valeur d'une cellule d'une feuille vers une autre

Re,

Un petit must, exécuter la macro DocEnAttente quand on active la feuille Doc. en attente :

Code:
Private Sub Worksheet_Activate()
DocEnAttente
End Sub
Fichier (2).

A+
 

Pièces jointes

Re : Copier valeur d'une cellule d'une feuille vers une autre

Re,

Bien entendu, on peut traiter la feuille EN RETARD de la même manière que Doc. en attente.

Il suffit de modifier légèrement la macro (Ncol et critère).

A priori, il n'y a pas de Date IN ou Approbation, on peut ne pas copier ces colonnes.

Fichier (3).

A+
 

Pièces jointes

Re : Copier valeur d'une cellule d'une feuille vers une autre

Bonjour amarbaix, le forum,

Pour alléger le code on peut paramétrer la macro Liste avec les arguments Feuille, Ncol, GardeCol, critere.

Je roule tout seul mais avec cela on aura fait le tour du problème.

Fichier (4).

Edit : le code est "allégé" mais entre les versions (3) et (4) le poids du fichier augmente de 21 Ko...

Au lieu de 2 macros il y en a 3 en effet.

A+
 

Pièces jointes

Dernière édition:
Re : Copier valeur d'une cellule d'une feuille vers une autre

Bonjour,

Très impressionné par le résultat obtenu, je vais regarder les macros pour tenter d'en comprendre une partie pour les adapter à mes besoins.
Je n'ai pas de question, juste du respect et des compliments.

Cordialement
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
15
Affichages
786
Retour