Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

copier coller sur 1ere cellule vide avec condition

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 !

titiborregan5

XLDnaute Accro
Bonjour à tous,
je souhaite copier des valeurs de différents classeurs les unes à la suite des autres (que cela n'efface pas la/les précédentes), dans un autre classeur.
Plusieurs classeurs émetteurs pour un récepteur.
Ca j'y arrive. :d
Par contre, je souhaiterai qu'avant il vérifie si la donnée n'existe pas déjà.
Si elle existe, qu'il remplace la 1ère (déjà existante)
Si elle n'existe pas, il colle à la suite.

J'imagine qu'un if qqch doit exister mais je n'arrive pas à le formuler.

Merci d'avance.
 
Re : copier coller sur 1ere cellule vide avec condition

Bonjour,

regarde du coté de la propriété Find de Range:

Voici l'exemple de l'aide dans excel:

 
Re : copier coller sur 1ere cellule vide avec condition

Bonjour,
merci de la réponse.
Comment faire si je veux remplacer toute un plage de cellules et non juste une cellule?
Ou plutôt, ne serait il pas plus simple, si la valeur est déjà trouvée, une mise à jour se fait automatiquement.
En fait du classeur envoi je copie et colle les cellules A2:T5 dans le classeur réception.
sauf qu'il y a plusieurs classeurs envoi (qui change de nom automatiquement en fonction des projets) et donc je veux que les cellules se collent à la suite pour ne pas se superposer. Mais maintenant cela se fait avec 2 étapes de validation en plus, où les valideurs indiquent par un oui qu'ils ont validé.
Donc au lieu de chercher si la valeur (nom du projet en fait) existe déjà dans la feuille, et de remplacer la plage de cellules par la nouvelle plage (qui a le même format mais qui comporte 1 ou 2 oui), ne serait il pas plus simple que s'il trouve la valeur, il mette à jour automatiquement cette plage de cellules...

Pfiou c'est dur à expliquer, j'ose même pas imaginer à comprendre :d mais je peux rééssayer différement si qq1 le souhaite.

Merci d'avance

Thibault
 
Re : copier coller sur 1ere cellule vide avec condition

Re,

Pfiou c'est dur à expliquer, j'ose même pas imaginer à comprendre :d mais je peux rééssayer différement si qq1 le souhaite.
Oui, je te confirme lol.
Si tu pouvais envoyer un extrait du fichier en commentant le plus possible quitte à mettre des flêches, couleurs etc...
 
Re : copier coller sur 1ere cellule vide avec condition

Bonjour à tous,
je vous ai mis ci-joint les 2 classeurs excel. celui pour l'envoi 'reportingtest' et celui pour la réception 'suivitest'.
En gros j'aimerai que si le projet1 n'est pas encore dans le classeur 'suivitest' ça copie à la suite des autres projets, par contre s'il est déjà présent qu'il ne fasse qu'une mise à jour...
Bref je vous laisse regarder, tester et analyser la macro.
Je suis dispo pour réexpliquer ce que je veux plus précisément
merci d'avance à vous tous pour votre aide


tibo
 

Pièces jointes

Re : copier coller sur 1ere cellule vide avec condition

Re bonjour,

Je te propose le code ci-dessous (j'ai laissé une de tes lignes en commentaires pour que tu vois le changement, celle en rouge est inutile):

Code:
Private Sub Sauvegarder_Click()
Dim Suivi As Workbook, TrouveProjet As Range
            fichier = Cells(1, 1).Value
            chemin = "K:\XXX\Reporting"
            ActiveWorkbook.SaveAs Filename:=chemin & "\" & fichier & ".xls"
            rep = MsgBox("Votre fichier a été sauvegardé avec succès sous le nom : " & Chr(10) & Chr(10) & "                 - " & fichier & Chr(10) & Chr(10) & "A l'adresse suivante: " & Chr(10) & Chr(10) & "                 - " & chemin & Chr(10) & Chr(10) & "                        Merci de votre coopération            ", vbOKOnly, fichier)
'copie et colle dans classeur réception
        Set Suivi = Workbooks.Open("D:\VBA\Forum Excel\titiborregan05\suivitest.xls")
        Set SuiviFeuille = Suivi.Sheets("Suivi")
[B][COLOR=red]'        Workbooks("suivitest.xls").Activate[/COLOR][/B]
'        With Workbooks(fichier).Sheets("Récapitulatif")
        With ThisWorkbook.Sheets("Récapitulatif")
        Set TrouveProjet = Suivi.Sheets("Suivi").Columns("A").Find(.Range("A3").Value, LookIn:=xlValues, lookat:=xlWhole)
        If TrouveProjet Is Nothing Then
          LigSuiv = SuiviFeuille.Range("A65536").End(xlUp).Offset(1, 0).Row
          SuiviFeuille.Range(SuiviFeuille.Range("A" & LigSuiv), SuiviFeuille.Range("T" & LigSuiv + 3)).Value = .Range("A2:T5").Value
        Else
          SuiviFeuille.Range(TrouveProjet.Offset(-1, 0), TrouveProjet.Offset(2, 19)).Value = .Range("A2:T5").Value
        End If
        End With
    'save and close Reception
        ActiveWorkbook.Save
        ActiveWorkbook.Close
    'save and close document avec nom de fichier = cellule A1
            ThisWorkbook.Close
End Sub
 
Re : copier coller sur 1ere cellule vide avec condition

Enorme, c'est tout simplement énorme... Merci bcp...
Juste une petite précision.
Tu as vu qu'il y avait des histoires validation, comment faire pour qu'il sache que:
si aucun valideur: macro actuelle ok, il remplace les cellules par les nouvelles
si valideur 1 ok: meme si on change le projet à la base ça ne se change pas, par contre si c'est le valideur 2 qui le fait alors ça remplace
si valideur 2 ok (peu importe valideur 1 puisque 2 est son supérieur): aucune modif ne peut se coller à la place sauf si faite par valideur 2.

Quand je dis faite par valideur X, j'entends que le nom du fichier change à chaque fois qu'un valideur valide. par ex:
projet 1 : valideur 1 : vide ou non valideur 2 vide ou non ; nom = projet 1
projet 1 : valideur 1 : oui valideur 2 vide ou non ; nom = projet 1 version validée par valideur 1
projet 1 : valideur 1 : oui valideur 2 oui ; nom = projet 1 version validée par valideur 2

Donc selon qui a ou non validé on change la copie.

Je ne sais pas si c'est possible, mais pour l'instant on frole la perfection...
Encore merci énormément.
Tibo
 
Re : copier coller sur 1ere cellule vide avec condition

Re,

une chose m'échappe. Pourquoi faire une première sauvegarde du fichier reporting puisque tu refais une autre sauvegarde à la fin? J'ai pris l'initiative d'en laisser qu'une seule.
Le soucis c'est que tu ne dis pas comment tu veux éviter que le valideur1 ne puisse pas à nouveau modifier le même projet dans le fichier suivi. Pour le fichier reporting, pas de problème, excel te diras que le fichier (avec le nom du valideur) existe déjà.
Sinon, voici le code:

Code:
Private Sub Sauvegarder_Click()
  Dim Suivi As Workbook, TrouveProjet As Range
  fichier = Cells(1, 1).Value
  chemin = "K:\XXX\Reporting"
  'ActiveWorkbook.SaveAs Filename:=chemin & "\" & fichier & ".xls"
  'rep = MsgBox("Votre fichier a été sauvegardé avec succès sous le nom : " & Chr(10) & Chr(10) & "                 - " & fichier & Chr(10) & Chr(10) & "A l'adresse suivante: " & Chr(10) & Chr(10) & "                 - " & chemin & Chr(10) & Chr(10) & "                        Merci de votre coopération            ", vbOKOnly, fichier)
  'copie et colle dans classeur réception
  Set Suivi = Workbooks.Open("D:\VBA\Forum Excel\titiborregan05\suivitest.xls")
  Set SuiviFeuille = Suivi.Sheets("Suivi")
  With ThisWorkbook.Sheets("Récapitulatif")
    Set TrouveProjet = Suivi.Sheets("Suivi").Columns("A").Find(.Range("A3").Value, LookIn:=xlValues, lookat:=xlWhole)
    If TrouveProjet Is Nothing Then
      LigSuiv = SuiviFeuille.Range("A65536").End(xlUp).Offset(1, 0).Row
      SuiviFeuille.Range(SuiviFeuille.Range("A" & LigSuiv), SuiviFeuille.Range("T" & LigSuiv + 3)).Value = .Range("A2:T5").Value
    Else
      SuiviFeuille.Range(TrouveProjet.Offset(-1, 0), TrouveProjet.Offset(2, 19)).Value = .Range("A2:T5").Value
    End If
  End With
  'save and close Reception
  ActiveWorkbook.Save
  ActiveWorkbook.Close
  'save and close document avec nom de fichier = cellule A1
  With Sheets("Récapitulatif")
    If .Range("T2").Value <> "" And .Range("T4").Value = "" Then  'si valideur1 n'est pas vide et valideur2 est vide
      fichier = fichier & .Range("T2").Value
    ElseIf .Range("T4").Value <> "" Then  'si valideur2 n'est pas vide
      fichier = fichier & .Range("T4").Value
    End If
  End With
  ThisWorkbook.SaveAs Filename:=chemin & "\" & fichier & ".xls"
  rep = MsgBox("Votre fichier a été sauvegardé avec succès sous le nom : " & Chr(10) & Chr(10) & "                 - " & fichier & Chr(10) & Chr(10) & "A l'adresse suivante: " & Chr(10) & Chr(10) & "                 - " & chemin & Chr(10) & Chr(10) & "                        Merci de votre coopération            ", vbOKOnly, fichier)
  ThisWorkbook.Close
End Sub
 
Re : copier coller sur 1ere cellule vide avec condition

Salut,
une chose m'échappe. Pourquoi faire une première sauvegarde du fichier reporting puisque tu refais une autre sauvegarde à la fin? J'ai pris l'initiative d'en laisser qu'une seule.
en fait si on regarde bien, le document reporting ne se suavegarde jamais... par contre lorsqu'il y a sauvegarde, ça prend le nom du projet + mois année.

Après pour les validations, ej voudrais que excel sache que la dernière version à prendre est celle du dernier plus haut valideur (soit pas validé, soit validé par 1 soit validé par 2)... Mais ça au pire ce n'est pas grave


Merci encore
 
- 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

W
Réponses
8
Affichages
2 K
Willmaz
W
A
Réponses
17
Affichages
3 K
AlexandreB94
A
P
Réponses
2
Affichages
3 K
Packers#12
P
M
Réponses
4
Affichages
1 K
maximesavreux
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…