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 modification 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'
 

Pièces jointes

  • Regroupement.xls
    40.5 KB · Affichages: 29
  • Regroupement.xls
    40.5 KB · Affichages: 33
Dernière modification 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)
 

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 ?
 

Pièces jointes

  • Regroupement.xls
    43 KB · Affichages: 32
  • Regroupement.xls
    43 KB · Affichages: 32

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'
 

Pièces jointes

  • Regroupement.xlsm
    19.7 KB · Affichages: 31
  • Regroupement.xlsm
    19.7 KB · Affichages: 27
Dernière modification par un modérateur:

Membres actuellement en ligne

Statistiques des forums

Discussions
314 655
Messages
2 111 605
Membres
111 217
dernier inscrit
aladinkabeya2