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)

  • Initiateur de la discussion Initiateur de la discussion an@s
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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.
 
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
 
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.
 
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
 
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.
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
569
Réponses
10
Affichages
714
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…