VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de données

Johan

XLDnaute Occasionnel
Bonjour,

je dispose d'un classeur excel A permettant de suivre des actions d'amélioration. Certaines d'entre elles sont automatiquement récupérées d'un classeur B et viennent ainsi renseigner la colonne A de mon classeur A

Le problème c'est que du coup elles viennent effacer tout ce que j'écris sur ce classeur A, dans cette même colonne...

Que modifier/ajouter dans le code suivant pour éviter ce problème ? En gros faire comprendre à macro de ne pas venir écrire s'il existe une valeur déja saisie dans cette colonne!

Sub MAJD()

Dim wb As Workbook
Dim ws As Worksheet

Dim Ligne, Line As Integer



Set wb = Workbooks.Open("C:\users\blablabla.xlsm")
Set ws = wb.Sheets("Suivi")


Ligne = 14
Line = 3

For Line = 3 To ws.Cells(ws.Rows.Count, 5).End(xlUp).Row


If ws.Range("AF" & Line) <> "" Then
Feuil1.Range("A" & Ligne) = ws.Range("AF" & Line)
Ligne = Ligne + 1
End If
Next Line


End Sub



Y'a t-il également un moyen de refermer directement le classeur B sans cliquer manuellement sur la croix ? Ou mieux de faire la meme manip sans l'ouvrir ?

Merci à toutes les âmes volontaires!!
 

Johan

XLDnaute Occasionnel
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Bonjour, merci pour votre réponse!

Ce nouveau code fonctionne et ne vient plus effacer les données rentrées manuellement dans ma colonne A, mais le problème c'est que du coup, à chaque fois que je lance la macro je récupère les infos de mon classeur B que j'avais déja sur mon classeur A, il les recopie autant de fois que je lance la macro!! Il ne comprend plus qu'il faut juste aller chercher les informations nouvelles...

Une idée ?

Merci
 

Alza

XLDnaute Junior
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Bonjour,
Oui il est possible de vérifier si la donnée est déjà existante, essaye ça :

Code:
Sub MAJD()

Dim wb As Workbook
Dim ws As Worksheet
Dim Ligne, Line As Integer

Set wb = Workbooks.Open("C:\users\blablabla.xlsm")
Set ws = wb.Sheets("Suivi")
Set F1 = wb.Sheets("Feuil1")
Set rg = F1.Range("A" & Ligne).Find(ws.Range("AF" & Line) ) 'rg trouve la valeur dans le tableau

Ligne = 14
Line = 3

For Line = 3 To ws.Cells(ws.Rows.Count, 5).End(xlUp).Row

If ws.Range("AF" & Line) <> "" Then
If Not rg Is Nothing Then 'si trouve une valeur, elle existe déjà on ne l'ajoute pas
    MsgBox "Déjà existant"
    Next Line
Else 'sinon on peut l'ajouter
feuil1.cells(rows.count,1).end(xlup)(2) = ws.Range("AF" & Line)
Ligne = Ligne + 1
End If
End If
Next Line

End Sub
PS : Ce serait plus simple si tu nous donnais un ptit exemple de ton fichier en le joignant ;)
Alza'
 
Dernière édition par un modérateur:

Johan

XLDnaute Occasionnel
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Bonjour, et merci pour cette réponse de qualité

Ce code la me renvoie un message "Next sans for" en ciblant le premier "next line" la ligne MsgBox de votre code

De plus en supprimant ce Next là, le code bug désormais sur la ligne :

Set rg = F1.Range("A" & Ligne).Find(ws.Range("AF" & Line) )

Difficile pour moi de joindre un fichier, et j'en ai bien conscience... Pour deux raison : le fichier source qui renvoie les données fait + de 10 Mo, les deux fichiers contiennent des données plus ou moins confidentielles sur mon entreprise...

Merci à vous
 

Alza

XLDnaute Junior
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Je me doutais qu'il y aurait des petits problèmes à ces niveaux, j'ai tenté sans trop être sur du résultat, je corriges ça des que je peux (du moins 'j’essaye !)
Alza'
 

Johan

XLDnaute Occasionnel
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Sans doute un souci au niveau de :

Set F1 = wb.Sheets("Feuil1")
Set rg = F1.Range("A" & Ligne).Find(ws.Range("AF" & Line) )

F1 ne doit pas être la feuil1 de mon classeur wb "blablabla" mais bien celui que j'utilise pour récupérer mes données et qui contient la macro (thisworkbook.sheets(feuil1) ?)

Merci en tout cas
 

Alza

XLDnaute Junior
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Re,
J'ai complètement changé de méthode pour utiliser quelque chose de bien plus simple et plus intuitif, les dictionnaires !
J'espère que cela ne te déranges pas ?
/!\
Question : J'ai géré les doublons, cela pose problème ?
Question 2 : Je supprime toutes les données de la colonne 1 de Feuil 1 afin de les replacer après, donc les cases peuvent changer, cela pose problème ?
Question 3 : J'ai mit un traitement sur 10 000 lignes (prendre toute la colonne entraine un temps de traitement) c'est suffisant ?

Je te met en pièce jointe mon fichier test et tu me dis si ça marche et si c'est ce que tu veux (normalement tu as juste à cliquer sur le bouton j'ai déjà mit le chemin de ton fichier).

Edit : j'oubliais tu veux un tri par ordre alphabétique ?

Alza'
 

Fichiers joints

Dernière édition par un modérateur:

Johan

XLDnaute Occasionnel
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Re!

Merci encore pour le temps que tu m'accordes, qui plus est sans avoir mes fichiers...

Je suis preneur de tout ce qui marche à vrai dire! Pour le coup ta macro marche bien mais c'est la colonne AF du fichier que tu viens ouvrir qui doit venir s'ajouter à la colonne A de ton fichier Regroupement.

Je ne dois avoir aucun doublon étant donné que ce sont des numéros d'identifiant uniques qui doivent être transférés.
Pour la question deux je préférerais que les données récupérées viennent se placer dans la dernière ligne non-vide de la colonne A

10K lignes largement suffisant, ca ne devrait même pas dépasser 1000-1500.

A part ça, c'était parfait !
 

Alza

XLDnaute Junior
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Re!

Merci encore pour le temps que tu m'accordes, qui plus est sans avoir mes fichiers...

Je suis preneur de tout ce qui marche à vrai dire! Pour le coup ta macro marche bien mais c'est la colonne AF du fichier que tu viens ouvrir qui doit venir s'ajouter à la colonne A de ton fichier Regroupement.
En effet c'était plus simple pour mes tests de mettre A et j'ai oublié de reswap ! :rolleyes:
Pour la question deux je préférerais que les données récupérées viennent se placer dans la dernière ligne non-vide de la colonne A
Il y a des trous dans ta colonne A ? (des lignes vides à part la dernière ?)
 

Johan

XLDnaute Occasionnel
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

PS : Je n'ai pas précisé mais je travaille sous forme de tableau dans ma feuille (insérér => tableau) pour faciliter les noms de plages. Du coup j'ai peur que la macro ne vienne écrire sur la première ligne en dehors du tableau ! (nom de mon tableau PLAN_ACTIONS)
 

Johan

XLDnaute Occasionnel
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

non pas de trou dans la colonne A
 

Alza

XLDnaute Junior
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Re,
Voici une version modifiée qui ajoute à la suite de A sans bouger les cellules déjà présentes (j'ai du changer la gestion des doublons avec la solution que je te proposais plus avant par contre !).
Dis moi si tu vois des erreurs que je n'aurais pas repéré !
Cela te conviens ?
 

Fichiers joints

Johan

XLDnaute Occasionnel
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Re

Merci encore, ca fonctionne comme je le souhaite.
Petit bémol, quand j'efface toutes les données "bidons" sur ta feuille et que je lance la macro, ca me dit "dépassement de capacité"

Enfin, comment faire pour écrire à partir de la ligne 14 ?
derLigne = ActiveSheet.Range("a14").End(xlDown).Row + 1 ne marche pas
 

Alza

XLDnaute Junior
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Bonjour Johan,
Oui excuse moi j'ai commencé le vba récemment et le end(xlDown) est une mauvaise habitude que j'ai pris :mad:
En utilisant le End(xlUp) ton problème de dépassement des capacités est normalement réglé, j'ai rajouté une petite condition pour que ça écrive à partir de la ligne 14 (si tu veux changer la ligne de départ tu as juste à changé le 14 en la ligne que tu souhaites dans le if), je crois que cette fois on tient le bon fil ?! ;)
Par contre si tu rencontres des problèmes avec la mise en forme du tableau j'avoue que la j'ai jamais eu l'occasion de faire ce genre de choses, tiens moi au courant ^^
Bonne journée,
Alza'
 

Fichiers joints

Dernière édition par un modérateur:

Johan

XLDnaute Occasionnel
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Bonjour Alza !

Merci à toi ca marche nickel ! Je peux à la fois rentrer des données manuellement et venir chercher celles renseignées sur l'autre classeurs sans tout chambouler! Le seul souci maintenant c'est que j'avais des formules de type INDEX/EQUIV (même principe que RechercheV) en colonne B et C de mon classeurA (celui ou on lance la macro), et elles ne se calculent plus, même en manuel, la cellule reste vide avec la formule à l'intèrieur...

Que modifier dans ton code pour que la macro vienne aussi recopier les valeurs en Colonne B du classeur blablabla sur la colonne B du classeur qui déclenche la macro ?


Je suis vraiment désolé de te faire perdre autant de temps !!! C'est tjs ça avec VBA, quand tu résouds un problème tu en crées un autre :mad:

Dans tous les cas merci !
 

Alza

XLDnaute Junior
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Tu veux dire dans blablabla colonne B tu as des données associées à la colonne A que tu dois ramener aussi ?
Aurais tu possibilité de faire 2 fichier exemple avec le ficher de réception et le fichier source Dans lesquels tu mets des données factices et ce que tu souhaites ramener/à quel endroit.
 

Johan

XLDnaute Occasionnel
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Ok je te bricole ça en respectant la structure des mes fichiers !
 

Johan

XLDnaute Occasionnel
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Voilà qui est fait !

2 classeurs : SuiviNC_test et PlanActions_test, avec les mêmes structures que mes fichiers de travail (nb de colonnes, nom des colonnes, emplacement des lignes...)

Sur le fichier SuiviNC, on vient "Numéroter" des actions (commandbutton) en face des actions que l'on estime sensible, puis on ferme.

Sur le fichier PlanActions on fait "Actualiser" (commandbutton) pr récupérer les actions de l'autre fichier, mais les formules ne sont pas récupérées (colonnes rouges).

Le but serait à partir du bouton "Actualiser" de récupérer la colonne AF et les colonnes I,K,L,N,T,W correspondantes!

Laisse tomber si c'est un travail de titan^^

Merci à toi

A ta disposition si tu veux plus de précisions
 

Fichiers joints

Alza

XLDnaute Junior
Re : VBA Empêcher une macro d'effacer cellules déja saisies lors d'un transfert de do

Désolé j'ai fais 2-3 essais mais comme le format de ton tableau d'arrivé est différent de celui de départ j'avoue que je ne sais pas comment faire, je verrais lundi si j'ai le temps mais je ne garantit rien :(
 

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