XL 2013 VBA export de fichier+ modification de colonne

looky62

XLDnaute Occasionnel
Bjr la communauté,

Je vous partage mon fichier où je n'arrive plus a progresser dans l évolution de mon projet si qq un d'entre vous pourrez m'aider

Ci joint mon pb
j'ai un fichier source que j'importe par une macro nommé source ( pr simplifier elle n'est pas en VBA ici)
Ensuite j'ai un fichier " A modifier" que j importe ici dans l onglet 'a Modifier" , dans la colonne D, j'ai des "Non" que je dois insérer dans mon fichier source, à la place des "Oui"
et ensuite idéalement exporter le classeur " dans "résultat" et l exporter en xls, (ça c pas le plus dur!)

Où je bloque c la manière de faire, soit par une recherche V, ou un copier coller et je supprime les anciens av un systéme de doublon mais l'idéal est de les remplacer ds la colonne D::: car peut être mes colonnes s'enrichiront!
 

Pièces jointes

  • TEST MACRO VG.xlsm
    61.4 KB · Affichages: 6

looky62

XLDnaute Occasionnel
Hello

juste une question pour commencer
dans ta feuille source... en ligne 1000 et 1001, il y a des donnée qui semblent perdues toutes seules..
est ce que c'est un cas qu'on peut avoir, ou c'est juste un reliquat de tes essais ?
En fait je lance une macro après avoir importé mon fichier source pour connaître combien j ai de oui et de non !! Je ne sais pas si c la meilleur méthode !!
 

vgendron

XLDnaute Barbatruc
c'est pas très clair comme besoin
insérer - remplacer
dans le post 1 ce sont les OUI qui deviennent des NON
dans le post 5, ce sont les NON qui deviennent des OUI..

ref colonne.. ?? quelle colonne?

voir macro sur le BOUTON 1
 

Pièces jointes

  • TEST MACRO VG.xlsm
    66.1 KB · Affichages: 2

looky62

XLDnaute Occasionnel
c'est pas très clair comme besoin
insérer - remplacer
dans le post 1 ce sont les OUI qui deviennent des NON
dans le post 5, ce sont les NON qui deviennent des OUI..

ref colonne.. ?? quelle colonne?

voir macro sur le BOUTON 1
Pas évident d exprimer, j'essaie d'etre plus claire
L'onglet " source", c mon fichier client de base, où je donne accès ou pas à leur espace privilège en clonne D par oui ou non
L'onglet "A modifier" ce sont mes clients qui souhaitent un accès priviège

Ma réf client de base qui reste identique est la colonne A
et La valeur à modifer ce sont les O ou N en colonne D dans mon onglet" Source"
que je souhaite exporter ensuite

jsp que c plus compréhensible
 

vgendron

XLDnaute Barbatruc
Hello

J'ai été obligé d'enlever ta formule Alea.entrebornes et mettre des références à la main dans la feuille "à modifier" pour etre sur que les lignes à modifier sont bien dans la feuille source

pour identifier plus facilement les lignes modifiées, au lieu de mettre "OUI", j'ai mis "Modifié à OUI"

si ca te convient
regarde le code: il suffit de modifier le texte à mettre.
 

Pièces jointes

  • TEST MACRO VG.xlsm
    64.6 KB · Affichages: 3

looky62

XLDnaute Occasionnel
Hello

J'ai été obligé d'enlever ta formule Alea.entrebornes et mettre des références à la main dans la feuille "à modifier" pour etre sur que les lignes à modifier sont bien dans la feuille source

pour identifier plus facilement les lignes modifiées, au lieu de mettre "OUI", j'ai mis "Modifié à OUI"

si ca te convient
regarde le code: il suffit de modifier le texte à mettre.
C super, et ça paraît tellement simple, UN GRAND MERCI

Est ce que tu pourrais m'expliquer le VBA afin de bien comprendre et pouvoir le reproduire facilement

Sub remplacerOUINON()
Dim TabSource() As Variant
Dim TabModif() As Variant

With Sheets("A modifier")
TabModif = .Range("A1").CurrentRegion.Value
End With

With Sheets("Source")
TabSource = .Range("A1").CurrentRegion.Value
End With
For i = LBound(TabModif, 1) To UBound(TabModif, 1)
For j = LBound(TabSource, 1) To UBound(TabSource, 1)
If TabSource(j, 1) = TabModif(i, 1) Then
TabSource(j, 4) = "O"
End If
Next j
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource
End Sub
 

vgendron

XLDnaute Barbatruc
avec les commentaires :)
d'habitude, je les mets, mais la. j'étais pressé :)
VB:
Sub remplacerOUINON()
Dim TabSource() As Variant 'on déclare un tableau vba qui contiendra les données source'
Dim TabModif() As Variant'on déclare un tableau vba qui contiendra les données à modifier

With Sheets("A modifier") 'dans la feuille "A modifier"
TabModif = .Range("A1").CurrentRegion.Value 'on met les données dans le tablo==> CurentRegion est équivalent à un Ctrl+A sur la cellule A1'
End With

With Sheets("Source") 'avec la feuille Source'
TabSource = .Range("A1").CurrentRegion.Value 'on met dans le tablo'
End With
For i = LBound(TabModif, 1) To UBound(TabModif, 1) 'pour chaque référence à modifier du tableau TabModif'
For j = LBound(TabSource, 1) To UBound(TabSource, 1) 'pour chaque ligne du tableau TabSource'
If TabSource(j, 1) = TabModif(i, 1) Then 'si on est sur la référence à modifier'
TabSource(j, 4) = "O" 'on met un O dans la 4eme colonne du tableau =colonne D'
End If
Next j
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource 'on colle le résultat dans la feuille "Resultat"'
End Sub
 

looky62

XLDnaute Occasionnel
avec les commentaires :)
d'habitude, je les mets, mais la. j'étais pressé :)
VB:
Sub remplacerOUINON()
Dim TabSource() As Variant 'on déclare un tableau vba qui contiendra les données source'
Dim TabModif() As Variant'on déclare un tableau vba qui contiendra les données à modifier

With Sheets("A modifier") 'dans la feuille "A modifier"
TabModif = .Range("A1").CurrentRegion.Value 'on met les données dans le tablo==> CurentRegion est équivalent à un Ctrl+A sur la cellule A1'
End With

With Sheets("Source") 'avec la feuille Source'
TabSource = .Range("A1").CurrentRegion.Value 'on met dans le tablo'
End With
For i = LBound(TabModif, 1) To UBound(TabModif, 1) 'pour chaque référence à modifier du tableau TabModif'
For j = LBound(TabSource, 1) To UBound(TabSource, 1) 'pour chaque ligne du tableau TabSource'
If TabSource(j, 1) = TabModif(i, 1) Then 'si on est sur la référence à modifier'
TabSource(j, 4) = "O" 'on met un O dans la 4eme colonne du tableau =colonne D'
End If
Next j
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource 'on colle le résultat dans la feuille "Resultat"'
End Sub
Merci @vgendron

pour ton explication, mon projet c un peu plus complexifié , je n'ai plus de Oui à NON de réf à modifier mais une liste de réf en fonction de 2 boutons je dois sois :

1er On vient Prendre la liste des réf des sites issus d'une liste "A modifer" et on vient mettre à OUI (colonne D) ces réf de sites ds le fichier source sans toucher aux autres OUI et NON

2em On vient remettre à NON (Colonne D) ttes les ref du fichier sources puis on vient mettre à OUI la liste issu du fichier " A modifier "

J'ai mis le détail ds l'onglet "TDB" j'ai mis les 13 premières réf en exemple à changer en fonction des 2 cas si tu arrives à ouvrir mes chacra ! Je n'arrive pas avec ce nouveau cas de faire de modif!
 

Pièces jointes

  • TEST MACRO VG.xlsm
    60 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
Hello

on est d'accord que le 1er cas, correspond à la macro déjà proposée avant? (si c'est pas le cas.. c'est que je n'ai pas compris...)

voici donc deux macro, une par bouton
VB:
Sub PremierCas()
Dim TabSource() As Variant
Dim TabModif() As Variant

With Sheets("A modifier")
    TabModif = .Range("A1").CurrentRegion.Value
End With

With Sheets("Source")
    TabSource = .Range("A1").CurrentRegion.Value
End With
For i = LBound(TabModif, 1) To UBound(TabModif, 1)
    For j = LBound(TabSource, 1) To UBound(TabSource, 1)
        If TabSource(j, 1) = TabModif(i, 1) Then
            TabSource(j, 4) = "modifié en O"
        End If
    Next j
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource
End Sub

Sub DeuxièmeCas()
Dim TabSource() As Variant
Dim TabModif() As Variant

With Sheets("A modifier")
    TabModif = .Range("A1").CurrentRegion.Value
End With

With Sheets("Source")
    TabSource = .Range("A1").CurrentRegion.Value
End With
For i = LBound(TabModif, 1) To UBound(TabModif, 1)
    For j = LBound(TabSource, 1) To UBound(TabSource, 1)
        If TabSource(j, 1) = TabModif(i, 1) Then
            TabSource(j, 4) = "modifié en O"
        Else
            TabSource(j, 4) = "N"
        End If
    Next j
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource
End Sub
 

looky62

XLDnaute Occasionnel
Hello

on est d'accord que le 1er cas, correspond à la macro déjà proposée avant? (si c'est pas le cas.. c'est que je n'ai pas compris...)

voici donc deux macro, une par bouton
VB:
Sub PremierCas()
Dim TabSource() As Variant
Dim TabModif() As Variant

With Sheets("A modifier")
    TabModif = .Range("A1").CurrentRegion.Value
End With

With Sheets("Source")
    TabSource = .Range("A1").CurrentRegion.Value
End With
For i = LBound(TabModif, 1) To UBound(TabModif, 1)
    For j = LBound(TabSource, 1) To UBound(TabSource, 1)
        If TabSource(j, 1) = TabModif(i, 1) Then
            TabSource(j, 4) = "modifié en O"
        End If
    Next j
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource
End Sub

Sub DeuxièmeCas()
Dim TabSource() As Variant
Dim TabModif() As Variant

With Sheets("A modifier")
    TabModif = .Range("A1").CurrentRegion.Value
End With

With Sheets("Source")
    TabSource = .Range("A1").CurrentRegion.Value
End With
For i = LBound(TabModif, 1) To UBound(TabModif, 1)
    For j = LBound(TabSource, 1) To UBound(TabSource, 1)
        If TabSource(j, 1) = TabModif(i, 1) Then
            TabSource(j, 4) = "modifié en O"
        Else
            TabSource(j, 4) = "N"
        End If
    Next j
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource
End Sub
Encore merci effectivement c ça, sauf pr le 2em cas Où on vient remettre à NON (Colonne D) ttes les ref du fichier sources puis on vient mettre à OUI la liste issu du fichier " A modifier "

sur l'onglet résultat il y a un décalage en cellule D1?! Je ne comprends pas , ci joint le fichier
 

Pièces jointes

  • TEST MACRO VG.xlsm
    83.8 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
quand tu parles de décalage, c'est sur la ligne d'entete??
c'est du au fait que les boucles (for i, for j) commencent dès le début du tableau "lbound()" ce qui inclut les lignes d'entetes

si tu ne veux pas prendre en compte les entetes, il suffit de changer le début des boucles
for i= lbound() + 1

VB:
Sub PremierCas()
Dim TabSource() As Variant
Dim TabModif() As Variant

With Sheets("A modifier")
    TabModif = .Range("A1").CurrentRegion.Value
End With

With Sheets("Source")
    TabSource = .Range("A1").CurrentRegion.Value
End With
For i = LBound(TabModif, 1) + 1 To UBound(TabModif, 1)
    For J = LBound(TabSource, 1) + 1 To UBound(TabSource, 1)
        If TabSource(J, 1) = TabModif(i, 1) Then
            TabSource(J, 4) = "modifié en O"
        End If
    Next J
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource
End Sub

Sub DeuxièmeCas()
Dim TabSource() As Variant
Dim TabModif() As Variant

With Sheets("A modifier")
    TabModif = .Range("A1").CurrentRegion.Value
End With

With Sheets("Source")
    TabSource = .Range("A1").CurrentRegion.Value
End With
For i = LBound(TabModif, 1) + 1 To UBound(TabModif, 1)
    For J = LBound(TabSource, 1) + 1 To UBound(TabSource, 1)
        If TabSource(J, 1) = TabModif(i, 1) Then
            TabSource(J, 4) = "O"
        Else
            TabSource(J, 4) = "N"
        End If
    Next J
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource
End Sub
 

looky62

XLDnaute Occasionnel
quand tu parles de décalage, c'est sur la ligne d'entete??
c'est du au fait que les boucles (for i, for j) commencent dès le début du tableau "lbound()" ce qui inclut les lignes d'entetes

si tu ne veux pas prendre en compte les entetes, il suffit de changer le début des boucles
for i= lbound() + 1

VB:
Sub PremierCas()
Dim TabSource() As Variant
Dim TabModif() As Variant

With Sheets("A modifier")
    TabModif = .Range("A1").CurrentRegion.Value
End With

With Sheets("Source")
    TabSource = .Range("A1").CurrentRegion.Value
End With
For i = LBound(TabModif, 1) + 1 To UBound(TabModif, 1)
    For J = LBound(TabSource, 1) + 1 To UBound(TabSource, 1)
        If TabSource(J, 1) = TabModif(i, 1) Then
            TabSource(J, 4) = "modifié en O"
        End If
    Next J
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource
End Sub

Sub DeuxièmeCas()
Dim TabSource() As Variant
Dim TabModif() As Variant

With Sheets("A modifier")
    TabModif = .Range("A1").CurrentRegion.Value
End With

With Sheets("Source")
    TabSource = .Range("A1").CurrentRegion.Value
End With
For i = LBound(TabModif, 1) + 1 To UBound(TabModif, 1)
    For J = LBound(TabSource, 1) + 1 To UBound(TabSource, 1)
        If TabSource(J, 1) = TabModif(i, 1) Then
            TabSource(J, 4) = "O"
        Else
            TabSource(J, 4) = "N"
        End If
    Next J
Next i
Sheets("Resultat").Range("A1").Resize(UBound(TabSource, 1), UBound(TabSource, 2)) = TabSource
End Sub
Merci, pour la précision for i= lbound() + 1, par contre
pr le 2em cas : Où on vient remettre à NON (Colonne D) ttes les ref du fichier sources puis on vient mettre à OUI la liste issu du fichier " A modifier ", il laisse uniquement les "Non" sauf la ligne 13!! Tu peux m'éclairer?
 

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260