XL 2013 VBA - inscription de données sur plusieurs lignes

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 !

Roseline

XLDnaute Occasionnel
Bonjour,
J'ai besoin de votre aide. Vous trouvez mon fichier joint.
J'ai un onglet #1 dans lequel les données seront inscrites. Mes données se transfère dans mon onglet Feuil1 et se positionne au bon endroit. Ce que j'aimerais c'est que si un chiffre est indiqué dans une des cases en rouge, lors de l'envoi des données sur la Feuil1, toutes les autres informations se répètent en avant du numéro. C'est peut-être avec la fonction LOOP mais je ne sais pas du tout comment l'adapter.
Merci de m'aider.
 

Pièces jointes

Bonsoir Roseline,
Le mot de passe VBA n'était pas utile, et bien sûr superflu. 🙂
En PJ un essai avec :
VB:
Sub Transfert()
Application.ScreenUpdating = False
With Sheets("1")
   If .Range("C8") <> "" Then Stocke .Range("C8")
   If .Range("C9") <> "" Then Stocke .Range("C9")
   If .Range("D8") <> "" Then Stocke .Range("D8")
   If .Range("D9") <> "" Then Stocke .Range("D9")
End With
End Sub
Sub Stocke(Valeur)
DL = 1 + Sheets("Feuil2").Range("A65500").End(xlUp).Row
With Sheets("Feuil2")
    .Cells(DL, "A") = Sheets("1").[B3]
    .Cells(DL, "B") = Sheets("1").[D3]
    .Cells(DL, "C") = Sheets("1").[C7]
    .Cells(DL, "D") = Valeur
End With
End Sub
 

Pièces jointes

Bonsoir Roseline,
Le mot de passe VBA n'était pas utile, et bien sûr superflu. 🙂
En PJ un essai avec :
VB:
Sub Transfert()
Application.ScreenUpdating = False
With Sheets("1")
   If .Range("C8") <> "" Then Stocke .Range("C8")
   If .Range("C9") <> "" Then Stocke .Range("C9")
   If .Range("D8") <> "" Then Stocke .Range("D8")
   If .Range("D9") <> "" Then Stocke .Range("D9")
End With
End Sub
Sub Stocke(Valeur)
DL = 1 + Sheets("Feuil2").Range("A65500").End(xlUp).Row
With Sheets("Feuil2")
    .Cells(DL, "A") = Sheets("1").[B3]
    .Cells(DL, "B") = Sheets("1").[D3]
    .Cells(DL, "C") = Sheets("1").[C7]
    .Cells(DL, "D") = Valeur
End With
End Sub
C'est exactement ce que je voulais, merci énormément de votre aide.
Je vous souhaite une excellente journée 🙂
 
Bonsoir Roseline,
Le mot de passe VBA n'était pas utile, et bien sûr superflu. 🙂
En PJ un essai avec :
VB:
Sub Transfert()
Application.ScreenUpdating = False
With Sheets("1")
   If .Range("C8") <> "" Then Stocke .Range("C8")
   If .Range("C9") <> "" Then Stocke .Range("C9")
   If .Range("D8") <> "" Then Stocke .Range("D8")
   If .Range("D9") <> "" Then Stocke .Range("D9")
End With
End Sub
Sub Stocke(Valeur)
DL = 1 + Sheets("Feuil2").Range("A65500").End(xlUp).Row
With Sheets("Feuil2")
    .Cells(DL, "A") = Sheets("1").[B3]
    .Cells(DL, "B") = Sheets("1").[D3]
    .Cells(DL, "C") = Sheets("1").[C7]
    .Cells(DL, "D") = Valeur
End With
End Sub
Allo,
Tout fonctionne parfaitement mais j'ai une interrogation. Je désire envoyer les informations dans un autre fichier mais je suis incapable de modifier la commande. Peux-tu m'aider svp
 
Bonsoir Roseline,
Il faut que le second fichier soit ouvert, dans ce cas testez :
VB:
Sub Essai()
DL = 5
With Workbooks("Bob2.xlsx").Sheets("Feuil2")
    .Cells(DL, "A") = Sheets("Feuil2").[B3]
    .Cells(DL, "B") = Sheets("Feuil2").[D3]
    .Cells(DL, "C") = Sheets("Feuil2").[C7]
End With
End Sub
Dans cet exemple le second fichier s'appelle Bob2.xlsx.
 
Bonsoir Roseline,
Il faut que le second fichier soit ouvert, dans ce cas testez :
VB:
Sub Essai()
DL = 5
With Workbooks("Bob2.xlsx").Sheets("Feuil2")
    .Cells(DL, "A") = Sheets("Feuil2").[B3]
    .Cells(DL, "B") = Sheets("Feuil2").[D3]
    .Cells(DL, "C") = Sheets("Feuil2").[C7]
End With
End Sub
Dans cet exemple le second fichier s'appelle Bob2.xlsx.
Ca ne fonctionne pas, il ne copie rien du tout dans le nouveau fichier. Je ne comprend pas, pouvez-vous m'éclairer svp?
Merci
 
Bonjour Roseline,
Cette ligne ne peut pas marcher, la feuille source s'appelle "1"
Code:
.Cells(DL, "A") = Sheets("Feuil2").[B3]
mais
.Cells(DL, "A") = Sheets("1").[B3]
Donc :
VB:
Sub Essai()
' Pour essai
    Sheets("1").[C8] = Sheets("1").[C8] + 1
    Sheets("1").[C9] = Sheets("1").[C9] + 1
    Sheets("1").[D8] = Sheets("1").[D8] + 1
    Sheets("1").[D9] = Sheets("1").[D9] + 1
    
' Transfert
With Workbooks("ClasseurV2.xlsx").Sheets("Feuil2")
    DL = .Range("A65500").End(xlUp).Row + 1
    .Cells(DL, "A") = Sheets("1").[C8]
    .Cells(DL, "B") = Sheets("1").[C9]
    .Cells(DL, "C") = Sheets("1").[D8]
    .Cells(DL, "D") = Sheets("1").[D9]
End With
End Sub
Voir PJ.
 

Pièces jointes

Bonjour Roseline,
Cette ligne ne peut pas marcher, la feuille source s'appelle "1"
Code:
.Cells(DL, "A") = Sheets("Feuil2").[B3]
mais
.Cells(DL, "A") = Sheets("1").[B3]
Donc :
VB:
Sub Essai()
' Pour essai
    Sheets("1").[C8] = Sheets("1").[C8] + 1
    Sheets("1").[C9] = Sheets("1").[C9] + 1
    Sheets("1").[D8] = Sheets("1").[D8] + 1
    Sheets("1").[D9] = Sheets("1").[D9] + 1
   
' Transfert
With Workbooks("ClasseurV2.xlsx").Sheets("Feuil2")
    DL = .Range("A65500").End(xlUp).Row + 1
    .Cells(DL, "A") = Sheets("1").[C8]
    .Cells(DL, "B") = Sheets("1").[C9]
    .Cells(DL, "C") = Sheets("1").[D8]
    .Cells(DL, "D") = Sheets("1").[D9]
End With
End Sub
Voir PJ.
Oui ca fonctionne sauf que je veux que ma cellule B3, D3 et C6 et C7 se recopie tout le temps selon le nombre de données entrée dans les cases en rouges mais sur des lignes différentes
Ex: Initiation - Date - Solde - Réduit - 4
Initiation - Date - Solde - Réduit -11
et ainsi de suis tant que j'ai des données d'inscrite dans les cellules c8 à D9
Merci encore de ton aide si précieuse
 
C'était un exemple. Le problème était le transfert dans un autre fichier. C'est tout.
Pour résoudre votre problème initial reprenez la macro initiale, modifiée avec le nouveau transfert :
VB:
Sub Transfert()
Application.ScreenUpdating = False
With Sheets("1")
   If .Range("C8") <> "" Then Stocke .Range("C8")
   If .Range("C9") <> "" Then Stocke .Range("C9")
   If .Range("D8") <> "" Then Stocke .Range("D8")
   If .Range("D9") <> "" Then Stocke .Range("D9")
End With
End Sub
Sub Stocke(Valeur)
With Workbooks("ClasseurV2.xlsx").Sheets("Feuil2")
    DL = .Range("A65500").End(xlUp).Row + 1
    .Cells(DL, "A") = Sheets("1").[B3]
    .Cells(DL, "B") = Sheets("1").[D3]
    .Cells(DL, "C") = Sheets("1").[C7]
    .Cells(DL, "D") = Valeur
End With
End Sub
 
C'était un exemple. Le problème était le transfert dans un autre fichier. C'est tout.
Pour résoudre votre problème initial reprenez la macro initiale, modifiée avec le nouveau transfert :
VB:
Sub Transfert()
Application.ScreenUpdating = False
With Sheets("1")
   If .Range("C8") <> "" Then Stocke .Range("C8")
   If .Range("C9") <> "" Then Stocke .Range("C9")
   If .Range("D8") <> "" Then Stocke .Range("D8")
   If .Range("D9") <> "" Then Stocke .Range("D9")
End With
End Sub
Sub Stocke(Valeur)
With Workbooks("ClasseurV2.xlsx").Sheets("Feuil2")
    DL = .Range("A65500").End(xlUp).Row + 1
    .Cells(DL, "A") = Sheets("1").[B3]
    .Cells(DL, "B") = Sheets("1").[D3]
    .Cells(DL, "C") = Sheets("1").[C7]
    .Cells(DL, "D") = Valeur
End With
End Sub
Ca fonctionne merveilleusement bien. Je vous remercie vous m'avez sauvé énormément de temps.
Bonne journée 🙂
 
C'était un exemple. Le problème était le transfert dans un autre fichier. C'est tout.
Pour résoudre votre problème initial reprenez la macro initiale, modifiée avec le nouveau transfert :
VB:
Sub Transfert()
Application.ScreenUpdating = False
With Sheets("1")
   If .Range("C8") <> "" Then Stocke .Range("C8")
   If .Range("C9") <> "" Then Stocke .Range("C9")
   If .Range("D8") <> "" Then Stocke .Range("D8")
   If .Range("D9") <> "" Then Stocke .Range("D9")
End With
End Sub
Sub Stocke(Valeur)
With Workbooks("ClasseurV2.xlsx").Sheets("Feuil2")
    DL = .Range("A65500").End(xlUp).Row + 1
    .Cells(DL, "A") = Sheets("1").[B3]
    .Cells(DL, "B") = Sheets("1").[D3]
    .Cells(DL, "C") = Sheets("1").[C7]
    .Cells(DL, "D") = Valeur
End With
End Sub
Rebonjour,
Voilà qu'il m'apparait un nouveau problème. Ma programmation fonctionne très bien jusqu'à ce que je lui demande d'ouvrir le fichier dans un répertoire et d'aller y déposer les données. As-tu une idée de la raison. la VBA ouvre bien le fichier et trouve la dernière ligne mais bloque à cet emplacement : .Cells(DL, "A") = Sheets("1").[B3]
 
Bonjour Roseline,
Dans :
VB:
With Workbooks("ClasseurV2.xlsx").Sheets("Feuil2")
DL = .Range("A65500").End(xlUp).Row + 1
Avez vous bien le bon nom de fichier et le nom nom de feuille ?
Et DL est il pertinent ? ( non nul et pas en erreur )
 
Voilà une partie de mon code…..Je sais pas si avec cela tu vas pouvoir m'aider, sinon je peux retourner les fichiers?

Set wkbook1 = Workbooks.Open("U:\…..\….")
If wkbook1.ReadOnly Then
wkbook1.Close True
MsgBox ("Données non enregistrées, réessayer dans quelques minutes svp!")
Application.CutCopyModemode = False
Exit Sub

Else
Call Transfert
Call Stocke(Valeur)

Sub Transfert()
Application.ScreenUpdating = False
With Workbooks("xxxx").Sheets("xxx")
If .Range("C8") <> "" Then Stocke .Range("C8")
If .Range("C9") <> "" Then Stocke .Range("C9")
If .Range("D8") <> "" Then Stocke .Range("D8")
If .Range("D9") <> "" Then Stocke .Range("D9")
End With
End Sub


Sub Stocke(Valeur)
With Workbooks("xxx").Sheets("x")
DL = .Range("A65500").End(xlUp).Row + 1

.Cells(DL, "A") = Sheets("x").[B3]
.Cells(DL, "B") = Sheets("x").[D3]
.Cells(DL, "C") = Sheets("x").[C6]
.Cells(DL, "D") = Valeur
End With
End Sub
 
- 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
4
Affichages
201
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
805
Retour