XL 2013 Macro pour copier automatiquement une matricule

anasimo

XLDnaute Occasionnel
Bonjour

cherche mac pour copier 1 matricule (j'ai déja testé la fonction IF, trop long)...j'explique

Dans la cellule D16 de la feuille "module" j'ai 1 matricule
je veux que cette matricule soit copiée dans la colonne B des feuilles BD1 BD2 et BD3 à chaque qu'il y a des données dans ces colonnes

feuilles BD1 BD2 et BD3
Capture29.JPG
 

Fichiers joints

xUpsilon

XLDnaute Occasionnel
Bonjour

VB:
Dim i as integer
i = 2

Do While Range("BD1!D" & i) <> ""
    Range("BD1!B & i") = Range("Module!D16")
    Range("BD2!B & i") = Range("Module!D16")
    Range("BD3!B & i") = Range("Module!D16")
    i = i +1
Loop
Est-ce que c'est cela que tu veux ?

Bonne continuation
 

anasimo

XLDnaute Occasionnel
Bonjour

VB:
Dim i as integer
i = 2

Do While Range("BD1!D" & i) <> ""
    Range("BD1!B & i") = Range("Module!D16")
    Range("BD2!B & i") = Range("Module!D16")
    Range("BD3!B & i") = Range("Module!D16")
    i = i +1
Loop
Est-ce que c'est cela que tu veux ?

Bonne continuation
bizarre marche pas....
juste une chose le code doit être copié une fois y a donnée dans la colonne D de chaque feuille (bd1,2 et3).
exemple: s'il y a données dans colonne D des feuilles BD1 et BD2 le code va être générer uniquement dans ces feuilles (pas BD3)...etc
 

xUpsilon

XLDnaute Occasionnel
Je ne suis pas sûr de comprendre ce que tu souhaites. La macro permet de remplir toutes les lignes des BD1 2 et 3 dans la colonne B avec le matricule indiqué dans "Module".

Que veux tu faire ?
 

anasimo

XLDnaute Occasionnel
Je ne suis pas sûr de comprendre ce que tu souhaites. La macro permet de remplir toutes les lignes des BD1 2 et 3 dans la colonne B avec le matricule indiqué dans "Module".

Que veux tu faire ?
Exactement...mais pas les lignes juste les cellules de la colonne B des feuilles bd1 2 et 3 s'il y a un tableau rempli
 

xUpsilon

XLDnaute Occasionnel
Qu'est ce qui ne marche pas ? Tu peux m'envoyer quelle ligne pose problème et quelle est l'erreur stp ?
 

xUpsilon

XLDnaute Occasionnel
Mmh, il y avait un problème d'activation de la feuille avant de pouvoir l'atteindre et l'utiliser visiblement. Du coup le coup fonctionnait (ou pas) en fonction de la feuille sur laquelle on était positionné.
Regarde avec le document ci-joint.

Bonne continuation
 

Fichiers joints

anasimo

XLDnaute Occasionnel
maintenant ça marche ...mais le soucis il se génère même si la feuille est vide....voir image

Capture32.JPG

il ne doit se générer que la colonne D des feuilles contiennent des données
 

xUpsilon

XLDnaute Occasionnel
Ah donc ça dépend de chaque feuille séparément ? Je croyais que tu avais les mêmes données sur chaque feuille plus ou moins, que les tableaux faisaient la même taille, et du coup j'ai basé la taille de la copie du terme sur la taille du tableau présent sur la feuille BD1.
D'où l'importance d'une question bien posée ;)

Regarde ci-joint,
Bonne continuation
 

Fichiers joints

jborm2b

XLDnaute Nouveau
Salut je t'ai fait ton fichier avec cette formule: =SI(ESTTEXTE(D2:D8);module!$D$16;"") . Je t'ai mis les cases en jaune la ou la formule est faites.
 

Fichiers joints

xUpsilon

XLDnaute Occasionnel
Salut jborm, le fil,
Si l'entité venait à être un nombre, la condition ESTTEXTE serait fausse, donc on ne peut pas appliquer ça. On peut appliquer si ESTVIDE = Faux en revanche.
@anasimo comment ça quand tu ajoutes d'autres données ?

Bonne continuation
 

jborm2b

XLDnaute Nouveau
Salut Anasimo tu as qu'à mettre sous forme de tableau. A chaque fois que tu rajoutes une ligne les formules restent.
Upsilon a raison utilise estvide, c'est plus adapté que esttexte.
 

anasimo

XLDnaute Occasionnel
Salut jborm, le fil,
Si l'entité venait à être un nombre, la condition ESTTEXTE serait fausse, donc on ne peut pas appliquer ça. On peut appliquer si ESTVIDE = Faux en revanche.
@anasimo comment ça quand tu ajoutes d'autres données ?

Bonne continuation
oui quand j'alimente le tableau par d'autre données.
La colonne D recevra que des données numériques
 

anasimo

XLDnaute Occasionnel
Voila je vais mettre un fichier qui comprend une macro qui marche bien et répond à mes attentes (j'ai récupéré un bout développé par Dranreb) ...et je veux la corriger et l'adapter à mon fichier (supprimer les codes en trop ...) et mettre les noms de feuilles (modules, BD1,2et3) au lieu de Feui1 et Feuil2

le code déja utilisé....je sais qu'il faut le nettoyer car y a des éléments de trop
VB:
Sub générer()
   Dim CelADéb As Range, NbLig As Long
   
   Set CelADéb = Feuil2.[A1000000].End(xlUp).Offset(1)
   NbLig = Feuil2.[D1000000].End(xlUp).Row + 1 - CelADéb.Row
   
   
   If NbLig > 0 Then
   With CelADéb.Resize(NbLig)
     .Formula = "=""" & Feuil1.[D16].Value _
           & """&TEXT(ROW()-" & CelADéb.Row - 1 & ","""")"
      
      .Value = .Value: End With

   
      End If
         
    End Sub
 

Fichiers joints

Dernière édition:

job75

XLDnaute Barbatruc
Bonjour anasimo, xUpsilon, jborm2b,

Voyez le fichier joint et cette macro dans le code de ThisWorkbook :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim matricule As Range, w As Worksheet
Set matricule = Sheets("module").[D16] 'cellule à adapter au besoin
If Sh.Name = matricule.Parent.Name Then
    If Intersect(Target, matricule) Is Nothing Then Exit Sub
    For Each w In Worksheets
        Workbook_SheetChange w, w.Cells(1) 'déclenche la macro
    Next
ElseIf UCase(Sh.Name) Like "BD#*" Then
    Application.EnableEvents = False 'désactive les évènements
    With Sh.Cells(1).CurrentRegion
        If .Rows.Count > 1 Then .Cells(2, 2).Resize(.Rows.Count - 1) = matricule 'remplissage de la 2ème colonne
    End With
    Application.EnableEvents = True 'réactive les évènements
End If
End Sub
La macro se déclenche quand on modifie une cellule quelconque dans une des feuilles.

A+
 

Fichiers joints

Dernière édition:

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas