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

XL 2013 Importation et mise à jour (code de job)

an@s

XLDnaute Occasionnel
Bonsoir à tous,
dans l'exemple ci-joint j'essaie de faire l'importation des données de feuille Balance vers le classeur CB à partir de la cellule A8.
en plus de ça pour chaque ligne importée je saisie un code manuellement dans la colonne F et quand je fais l'importation une deuxième fois le code importe les nouvelles lignes et garde les anciennes avec le même code.
le problème sur mon exemple c'est que je n'ai pas une seule colonne de référence sans doublons, mais pour éviter cela il faut considérer trois colonnes A, C et D chose qui m'empêche d'appliquer le même code ci-dessous produit par JOB dans un exemple similaire.

Merci d'avance
An@s


VB:
Private Sub CommandButton1_Click()
Dim t, nlig&, d As Object, i&, rest(), j&
Application.ScreenUpdating = False
With Workbooks.Open(ThisWorkbook.Path & "\Paie-Mens.xlsx").Sheets("Feuil1")
  t = .Range("A5:AC" & .Range("F" & .Rows.Count).End(xlUp).Row + 2)
  nlig = UBound(t)
  .Parent.Close False
End With
'---restitution du 1er tableau---
[E:E].Copy [AE1] 'sauvegarde la colonne E (matricules) en colonne auxiliaire AE
Range("A3:AC" & Rows.Count).ClearContents 'RAZ
[A3].Resize(nlig, 29) = t
'---liste des noms du 1er tableau---
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(t)
  If t(i, 5) <> "" Then d(t(i, 5)) = i 'repère la ligne
Next i
'---création du 2ème tableau (rest)---
t = Range("AD3:AE" & Range("AE" & Rows.Count).End(xlUp).Row + 1)
ReDim rest(1 To nlig, 1 To 1)
For i = 1 To UBound(t)
  If t(i, 2) <> "" And d.Exists(t(i, 2)) Then rest(d(t(i, 2)), 1) = t(i, 1)
Next i
'---restitution du 1er tableau rest---
[AE:AE].Delete 'à l'origine on a mis des formules en colonne AE
Range("AD3:AD" & Rows.Count).ClearContents 'RAZ
[AD3].Resize(nlig) = rest
'---Bordures---
Rows("3:" & Rows.Count).Borders.LineStyle = xlNone 'RAZ
For i = nlig To 1 Step -1
  If Range("D" & i + 2) <> "" Then 'dernière ligne effective
    [A3].Resize(i, 30).Borders.Weight = xlThin
    [A3].Resize(i, 30).Borders(xlInsideHorizontal).LineStyle = xlDot
    '[A3].Resize(i, 30).Borders(xlInsideHorizontal).Weight = xlHairline 'si l'on préfère
    Exit For
  End If
Next i
With ActiveSheet.UsedRange: End With 'actualise les barres de défilement
End Sub
 

Pièces jointes

  • Balance.xlsx
    10.3 KB · Affichages: 26
  • CB.xlsm
    24.7 KB · Affichages: 30

Dranreb

XLDnaute Barbatruc
Si vous ne voulez pas, contrairement à beaucoup, rester novice éternellement, faite Débogage quand vous avez l'erreur, et dites moi sur quelle instruction il est arrêté.
Mais je commence à croire que vous n'avez pas du tout l'intention de mettre en service ma solution, qui marche parfaitement.
 

an@s

XLDnaute Occasionnel
au contraire j'aimerai bien avoir deux solutions pour m'en servir par la suite sur un autre projet peut être,
le message ne ramène pas vers débogage, il affiche incompatibilité de type et en cliquant sur OK la feuille balance s'ouvre c'est tout
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Remarque: Cette option inclut, comme il se doit, l'arrêt seulement sur les erreurs non gérées, avec débogage possible même si elle se produit dans un module objet.
Souvent à 1ère utilisation de VBA, l'option cochée est Arrêt sur toutes les erreurs. Cela empêche le fonctionnement correct d'un code qui suit un instruction On Error Resume Next.
 

an@s

XLDnaute Occasionnel
Bonjour Dranreb,
merci beaucoup, j'ai bien appliqué comme dans le post 33 mais il reste un petit souci.
après l'exécution du code, le classeur balance reste ouvert. il ne peut pas se fermer automatiquement après ouverture ?

Cordialement
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Si, vous pouvez ajouter une instruction WbkBal.Close juste avant la End Sub.
Pour la bonne forme il me semble qu'il devrait cependant rester ouvert s'il l'était déjà, et ne le fermer si c'est la macro elle même qui a été obligée de l'ouvrir. Ce que vous pouvez noter dans un Boolean par exemple.
 

ChTi160

XLDnaute Barbatruc
Bonsoir an@s
Bonsoir le Fil (Dranreb) , le Forum
Bien que tu aies du finaliser , je te mets le fichier 3 modifié 3Bis pour le Non transfert ds Ligne avec 0 ou Vide en colonne 6
jean marie
 

Pièces jointes

  • CB-Chti160-3Bis.xlsm
    168.2 KB · Affichages: 18

an@s

XLDnaute Occasionnel
Bonsoir Chti, Dranreb, le forum
Dranreb : la c'est ok...merci beaucoup pour votre solution
Chti : tu as mal compris ma dernière demande concernant l'élimination des zéros et vides.
je voulais faire cette manipulation dans le code de l'importation et non pas le votre.
je vous remercie encore une autre fois

Bien cordialement
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…