Modif Code pour empêcher écrasement de données

Bonjour à tous,

J'ai une macro qui balaye la colonne AF d'un classeur2 et me renvoie les données sur la feuille 1, colonne A d'un classeur1.

Le problème c'est que j'aimerais aussi écrire manuellement dans cette colonne A de mon classeur1 sans que la macro ne vienne toute écraser et remplacer mes données par les valeurs récupérées dans mon classseur2.

Que modifier dans le code suivant ?

Sub MAJData()

Dim wb As Workbook
Dim ws As Worksheet

Dim Ligne, Ligne2 As Integer

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

      Ligne = 14
      Ligne2 = 3

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

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

End Sub

Merci d'avance

Bonjour

Peut être en remplaçant cette ligne

If ws.Range("AF" & Ligne2) <> "" Then

par celle ci

If ws.Range("AF" & Ligne2) <> "" And Feuil1.Range("A" & Ligne) = "" Then

Si ok, clique sur la case à cocher verte à voté du bouton EDITER pour clôture le fil lors de ta réponse

Crdlt

Bonjour,

Merci pour cette réponse, je viens d'essayer et malheureusement si je rajoute une ligne manuellement sur ma colonne A et que je relance ma macro après avoir entré de nouvelles données dans mon autre classeur, celles-ci ne sont pas récupérées.

Je continue dy travailler dessus.

Merci

Re

Le code controle que la cellule en colonne A est vide. Si oui, la donnée est récupérée, si non on passe à la ligne suivante

Merci de donner plus d'explications voir un fichier pour comprendre

Crdlt

Bonjour,

C'est un fichier entreprise de plus de 10mo, certaines données sont plus ou moins confidentielles...

Cependant, je joins un classeur bidon tout simple avec un bouton de commande et une valeur en A14.

Si vous créez un deuxième classeur, que vous nommez la feuil1 "Suivi", que vous indiquez le chemin vers ce classeur dans la macro de mon classeur bidon, et, que vous saisissez des infos à partir de la colonne "AF3" vous constaterez que rien ne récupéré en dessous de la cellule A14. Si rien n'est saisi en A14, ca marche.

Voyez si vous pouvez tester par vous même

Merci à vous.

12test-johan.xlsm (16.14 Ko)

Re,

Ce que vous voulez faire c'est récupérer les données de AF du classeur 2 dans la colonne A du classeur 1 qui contient le code et ce, à partir de la ligne 14.

Si oui, il y un truc que je comprends pas au vu des explications.

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

Dans cette ligne, on est sur le classeur 2. Pourquoi la colonne 5 alors que la colonne AF est la 32 ?

Crdlt

Bonjour,

Merci pour votre implication. En effet c'est bien ce que je veux faire, récupérer AF Classeur2 sur A Classeur1. L'idée étant que je puisse aussi rajouter des infos manuellement sur cette colonne A du classeur1 sans que la macro ne vienne tout effacer à chaque fois.

Oups exact, c'est bien 32, bien que cela marchait quand même.

Cordialement.

Re

Je doute que cela fonctionnait ou alors faudrait voir le fichier original pour comprendre

Sinon faites un essai comme ceci :

Sub MAJDonnées()

Dim wb As Workbook
Dim ws As Worksheet

Dim Ligne As Integer, Ligne2 As Integer, lg As Integer

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

Ligne = 14
Ligne2 = 3

For Ligne2 = 3 To ws.Cells(ws.Rows.Count, 32).End(xlUp).Row
        If ws.Range("AF" & Ligne2) <> "" And Feuil1.Range("A" & Ligne) = "" Then
            Feuil1.Range("A" & Ligne) = ws.Range("AF" & Ligne2)
        Else:
            lg = Feuil1.Range("A" & Feuil1.Rows.Count).End(xlUp).Row + 1
            Feuil1.Range("A" & lg) = ws.Range("AF" & Ligne2)
        End If
    Ligne = Ligne + 1
Next Ligne2

wb.Close

End Sub

Si ok, lors de votre réponse, merci de clôturer le fil en cliquant sur la case à cocher à coté du bouton EDITER

Cordialement

Re !

Malheureusement ça ne marche tjs pas! Il doit être difficile pour vous de coder à distance sans les fichiers...

J'ai bricolé deux fichiers test qui sont les répliques version prototypes de mes vrais fichiers (qui eux sont trop lourds en taille). J'ai gardé l'ordre des colonnes, les titres, etc.

Voila comment ca marche :

1. Se rendre en Colonne AF du classeur2

2. Numéroter autant de cellules que vous souhaitez entre AF3 et AF13 avec le bouton de commande "numéroter"

3. Ouvrir le classeur 1 et faire "Actualiser" : les données apparaissent

Si on entre manuellement dans la colonne A du Classeur1 et qu'on actualise derrière, tout est effacé....

Si toutefois vous voulez bien essayer

Merci

Ci-joint les fichiers

Cdt,

re

Dans votre code existant, merci d'essayer en remplaçant cette ligne

Ligne = 14

par ceci

Ligne = Feuil1.Range("A" & Feuil1.Rows.Count).End(xlUp).Row + 1

Cordialement

Re,

Merci bien

Cette fois ça prend bien mes lignes entrées manuellement. Mais si maintenant je rajouter des lignes sur le classeur2, ca recopie à nouveau les anciennes :/

Cdt,


Peut être un code qui supprime les doublons de la colonne A ? chaque identifiant doit être unique

Merci encore

Peut être la fonction .RemoveDuplicates

re

Code à essayer.

Sub MAJData()

Dim wb As Workbook
Dim ws As Worksheet

Dim Ligne As Integer, Ligne2 As Integer, lg As Integer

Set wb = Workbooks.Open("C:\users\jpeyres\desktop\classeur2_test") 'Votre lien vers mon classeur2
Set ws = wb.Sheets("Suivi")

Ligne = Feuil1.Range("A" & Feuil1.Rows.Count).End(xlUp).Row + 1
Ligne2 = 3

For Ligne2 = 3 To ws.Cells(ws.Rows.Count, 32).End(xlUp).Row

    If ws.Range("AF" & Ligne2) <> "" Then
        On Error Resume Next
        lg = Feuil1.Range("A:A").Find(ws.Range("AF" & Ligne2), LookIn:=xlValues).Row
            If lg = 0 Then
                Feuil1.Range("A" & Ligne) = ws.Range("AF" & Ligne2)
                Ligne = Ligne + 1
            End If
        On Error GoTo 0
    End If
    lg = 0
Next Ligne2

End Sub

A vous relire

Crdlt

Bonjour à tous,

Si je comprend bien tu voudrais écraser des valeurs, sauf si tu les as saisies à la main ?

Une idée comme ça : il faudrait les reconnaitre.

Les manuelles tu pourrais les mettre en bleu (ou gras ou italique si plus pratique) et la macro éviterait ces cellules.

J'ai peut-être mal compris, j'ai juste lu et pas ouvert les fichiers.

Je ne prend pas la main Dan, juste une proposition pour essayer de faire avancer le schimlblick

eric

Bonjour,

Super, cette fois c'est tout bon, si ce n'est que du coup il me met des erreurs sur les formules de mes colonnes suivantes, mais je savais dès le départ que c'était une mauvaise idée !

Un grand merci à toi Dan

Au plaisir

Bne journée

Rechercher des sujets similaires à "modif code empecher ecrasement donnees"