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

Ecraser une plage de cellule par une autre portant le même provenant d'un autre fichi

  • Initiateur de la discussion Initiateur de la discussion benoua
  • 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 !

benoua

XLDnaute Occasionnel
Bonjour à tous!

Encore besoin de votre aide!😱
Voilà je fais un fichier qui consolide des informations provenant de plein de fichiers et je fais en ce moment une macro qui permette de mettre à jour les infos.
J'ai procédé de la manière suivante :
- Un fichier Base Conso
- Des fichiers contenant les infos
Dans chaque fichier la macro suivante :

Code:
Dim filename As String
Sheets("Bases").Select
filename = Range("fichierexport")
Range("J3:AS40").Select
Selection.name = filename
Selection.Copy
        If ClasseurOuvert("Base de consolidation.xls") Then
        Workbooks("Base de consolidation.xls").Activate
        Else
        Workbooks.Open (Chemin + "BUDGET N\BASE DE CONSOLIDATION\Base de consolidation.xls")
        End If

fichierexport est le nom donné à une cellule qui permet d'avoir un nom de plage unique pour chaque fichier (donné en fonction des infos rentrées, doublon impossible)

J'aimerai que lorsque l'utilisateur clique sur le bouton de mise à jour, il prenne la plage (filename) et la colle dans le fichier Base Conso en remplaçant l'ancienne plage (filename) qui se trouve dans ce fichier, si elle existe. Sinon je ne sais pas comment faire pour qu'il ne me renvoie pas de message d'erreur.

Merci d'avance!
 
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

Bonjour,

Il manque le code pour coller dans le code.
Qu'est-ce qui permet de savoir si la plage existe? par son nom?
 
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

ouais en fait j'm'en suis arrêté la parce que j'bloque pour justement verifier l'existence de la plage et l'ecraser.
oui en fait dans la base conso si elle existe alors elle s'appelle filename et il faut mettre la nouvelle à la place (portant le même nom) et sinon copier coller à la fin.
 
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

Re,

dans ce cas, il faut vérifier que le nom existe dans le classeur, ce que fait le code suivant:

Code:
Dim filename as String
Dim existe As Boolean
For Each nom In ActiveWorkbook.Names
    If nom.Name = filename Then
        existe = True
        Exit For
    End If
Next
If existe Then
'ici le code pour écraser la plage existante
Else
'ici le code pour écrire à la suite
End If
A intégrer dans ton code.
 
Dernière édition:
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

Merci skoobi pour la formule pour vérifier!
et sinon comment je fais pour écraser une plage de cellule stp?
 
Dernière édition:
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

Re bonjour,

dans ton cas, comme tu as fais une copie "Selection.Copy", il suffit de mettre:
filename.Paste dans la première condition.
 
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

Re!
Merci skoobi, ca tourne nikel...sauf un foirage inexplicable....
Mon code :
Code:
Sub MaJConso()
Dim filename As String
Dim existe As Boolean
Dim x As Integer
Dim z As Boolean

Sheets("Bases").Select
filename = Range("fichierexport")
Range("J3:AS40").Select
Selection.name = filename
Range("J3:AS40").Select
Selection.name = filename
Selection.Copy
        
        If ClasseurOuvert("Base de consolidation.xls") Then
        Workbooks("Base de consolidation.xls").Activate
        Else
        Workbooks.Open (Chemin + "BUDGET N\BASE DE CONSOLIDATION\Base de consolidation.xls")
        End If

Sheets("temp").Select

        For Each nom In ActiveWorkbook.Names
            If nom.name = filename Then
                existe = True
                Exit For
            End If
        Next

        If existe = True Then
            Range(filename).PasteSpecial xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
                                :=False, Transpose:=False
        Else
            z = False
            x = 0
                While z = False
                    If Range("A5").Offset(z, 0) <> "" Then
                    z = z + 38
                    Else
                    Range("A5").Offset(z, 0).Select
                    z = True
        End If
        Wend
        Selection.PasteSpecial xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
                            :=False, Transpose:=False
  Selection.name = filename
End If

MsgBox ("Mise à jour terminée")
End Sub
Si la plage existe déjà il l'écrase pas de souci a priori à ce niveau là.
Si elle n'existe pas, il l'a colle pas où je voudrais qu'il la colle...
J'ai des lignes vides dans mes exports donc j'peux pas lui dire d'utiliser un End(xlUp) au risque d'avoir des plages qui se mélangenet, et donc sachant que mon export fait 37 lignes et que la première est obligatoirement remplie, j'lui ai dit de tester toutes les 38 lignes s'il y'a quelque chose et si oui il passe à celui d'après (A5, A43, A81, etc..), ou si c'est vierge il colle.
Pour le premier cas ca marche, ensuite il colle n'importe où, au lieu de coller en A8& par exemple, il colle en J92... Si quelqu'un sait d'où vient l'erreur...

Merci d'avance.
 
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

Re,

peux-tu envoyer le fichier zippé < 48.8ko sans données confidentielles mais contenant 2 ou 3 exemples parlant?
 
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

heuu, moins de 50ko ca va être difficle....
serait-il possible que tu me donnes en privée ton mail que je puisse t'envoyer ça ?

j'ai fait le truc au minimum et j'ai 400ko en tout...
promis j'te harcelerai pas à chacun de mes problèmes 😀
 
Dernière édition:
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

Skoobi a disparu...
Je cherche quelqu'un qui veuille bien se plonger dans mon pitit problème mais j'peux pas envoyer les pièces jointes, elles sont trop importantes même réduites au max...
 
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

re!
si quelqu'un a une idée pour mon problème j'suis preneur!
(a noter qu'il faudra changer le nom dans la macro pour l'activation du classeur "base de consolidation")
 
Re : Ecraser une plage de cellule par une autre portant le même provenant d'un autre

Re,

J'ai mis en commentaire l'ancien code et en bleu ce que j'ai fais:

Code:
  If existe = True Then
    Range(filename).PasteSpecial xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
                                                                                   :=False, Transpose:=False
  Else
'    z = False
'    x = 0
'    While z = False
'      If Range("A5").Offset(z, 0) <> "" Then
'        z = z + 38
'      Else
'        Range("A5").Offset(z, 0).Select
'        z = True
'      End If
'    Wend
[B][COLOR=Blue]    NbNom = ActiveWorkbook.Names.Count
    LigSuiv = NbNom * 38 + 5
    Range("A" & LigSuiv).PasteSpecial xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
                                                                             :=False, Transpose:=False[/COLOR][/B]
  End If

Comme chaque nom contient 38 lignes et que la première ligne d'écriture est la ligne 5, il suffit de multiplier le nombre de noms existants par 38 plus 5 😉.
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…