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

C

chewi

Guest
Bonjour à tous.

Voilà, mon petit problème, je suis occupé de créer une macro qui doit me transférer les données d'une plage de 3 cellules d'une feuille vers telle ou telle plage d'une autre feuille du même classeur suivant la valeur d'une autre cellule.

Seulement, j'essaie de faire des macros mais j'ai beaucoup de mal et celle-ci n'est pas correcte, je ne m'en sors pas avec la syntaxe adéquate.

Quelqu'un pourrait-il m'aider à corriger cette macro et me dire tout ce qui ne va pas?
J'ai notamment le message d'erreur 424: "Object required"

A la fin du code, il faut aussi que le contenu de la feuille1 soit effacer mais pas la feuille elle-même.

Toute suggestion est la bienvenue

Je vous remercie d'avance.

Sub Exportation()

With Sheets("Feuil1")
If UCase(Left(.Range("I2"), 2)) = "AV" Then
If IsEmpty(Feuil2.Range("D14")) Then
.Range("J2:J4").Copy Feuil2.Range("D14")
.Range("E2").Copy Feuil2.Range("D8")
ElseIf Not IsEmpty(Feuil2.Range("D14")) Then
.Range("J2:J4").Copy Feuil2.Range("E14")
.Range("E2").Copy Feuil2.Range("E8")
End If
ElseIf UCase(Left(.Range("I2"), 2)) = "AP" Then
If .Range("E2") = Feuil2.Range("D8") Then
.Range("J2:J4").Copy Feuil2.Range("D21")
ElseIf .Range("E2") = Feuil2.Range("E8") Then
.Range("J2:J4").Copy Feuil2.Range("E21")
End If
End If
Application.DisplayAlerts = False
.Delete
Application.DisplayAlerts = True
End With

End Sub
 
Re : macro - syntaxe

Salut chewi,

Je viens de tester ton code et chez moi pas de soucis, il fonctionne parfaitement. Le message d'erreur apparait sur quel ligne de code?

Sinon pour supprimer le contenu de la feuille 1 et non la feuille elle-même, remplace par .Cells.Clear les lignes suivantes :
Application.DisplayAlerts = False
.Delete
Application.DisplayAlerts = True


@+
 
Re : macro - syntaxe

Déjà à partir de la 3ème ligne ( If IsEmpty...), il m'indique une run-time error "424" (Object required).
Serais-ce peut-être du au contenu de mes cellules?
Je ne comprends pas, tu es la 2ème personne qui m'assure le bon fonctionnement et chez moi toujours rien!
Il faut savoir que je débute avec les macros et que c'est peut-être du à une bêtises mais dont j'ignore l'existence!

Merci pour ton aide
 
Re : macro - syntaxe

Re porcinet

J'utilise IsEmpty pour voir si ma cellule est vide ou non car si elle est vide, les données doivent y être exportées et et si ma cellule est déjà remplie, on regarde dans la colonne de droite si elle est libre? Si oui, les données y sont exportées, si pas on redécale à droite et ainsi de suite.
C'est pour remplir un tableau au fur et à mesure en fait et donc les données doivent se ranger les unes à la suite des autres.
Il a moyen de contourner je suppose en utilisant If ... = " "
Mais est-ce que IsEmpty sert vraiment à l'usage que je veux en faire?

Bonjour Kobaya,

Effectivement il s'agit bien d'un Excel Anglais chez moi aussi et c'est déjà là une bonne rectification que je viens de faire. merci

Mon code fonctionne déjà sans erreur (c'est déjà ça) mais je n'ai pas l'effet désiré.
Mes feuilles 1 et 2 sont complètement effacées. Tant mieux pour la 1 mais je voudrais que les données restent sur la feuille 2.

Déjà un grand merci pour votre aide

N'hésitez pas à m'éclairer, je ne demande qu'à apprendre!
 
Re : macro - syntaxe

Bonjour

Est-ce que ceci fonctionne mieux ?



Sub Exportation()

With Sheets("Feuil1")
  
Select Case UCase(Left(.Range("I2"), 2))
      
Case "AV"
         
If IsEmpty(Sheets("Feuil2").Range("D14")) Then
           .Range("J2:J4").Copy Sheets("Feuil2").Range("D14")
           .Range("E2").Copy Sheets("Feuil2").Range("D8")
         
Else
           .Range("J2:J4").Copy Sheets("Feuil2").Range("E14")
           .Range("E2").Copy Sheets("Feuil2").Range("E8")
         
EndIf
      
Case "AP"
         
If .Range("E2") = Sheets("Feuil2").Range("D8") Then
           .Range("J2:J4").Copy Sheets("Feuil2").Range("D21")
         
ElseIf .Range("E2") = Sheets("Feuil2").Range("E8") Then
           .Range("J2:J4").Copy Sheets("Feuil2").Range("E21")
         
End If
  
End Select
   Application.DisplayAlerts =
False
  .Delete
   Application.DisplayAlerts =
True
End With

 
Re : macro - syntaxe

re, Salut Hellboy,

Pour répondre à chewi, le IsEmpty sert bien (entre autre) a tester si la cellule est vide.
Sinon tu pourrais effectivement passer par un If Sheets("Feuil2").Range("D14").value= "" Then mais ton code est mieux.

Et peux etre que la proposition de Hellboy va te permettre de résoudre ton problème.

@+
 
Re : macro - syntaxe

Bonjour à tous,

Effectivement la proposition de Hellboy tinet vraiment bien la route, je vais me baser dessus pour continuer le travail.

J'ai juste remplacer :

Application.DisplayAlerts = False
.Delete
Application.DisplayAlerts = True

qui supprimer complètement la feuille
par :

.Cells.ClearContents

qui n'efface que le contenu

Merci à ceux qui m'ont aidé. Je reviendrai bientôt avec la suite.
 
Re : macro - syntaxe

Re à tous,

Reste un petit problème dans la cas de la macro de Hellboy: Les données doivent s'exportées dans la 1ère série de cellules vides.
Ce n'est donc pas si D8 rempli alors en E8 car si E8 déjà rempli, il faut aller en F8 et ainsi de suite, tant qu'une colonne est remplie, il faut un truc du style colonne+1 si remplie.
Cela s'applique aussi dans la 2ème partie (dans le cas "AP").
Il faut trouver la correspondance dans toute la ligne 8, qui pourrait aller jusque la cellule AZ 8 maximum. Vu le nombre de possibilités, c'est la raison pour laquelle il faudrait trouver le raccourci genre recherche dans toute la ligne ou quelque chose du style qui pourrait exister dont j'ignore l'existence.

PS: Quelqu 'un pourrait m'indiquer un bon tutorial qui s'adresserait aux débutants?

Merci d'avance
 
Re : macro - syntaxe

Salut tout le monde,

Pour faire ce que tu souhaites, il te suffit (du moins si j'ai bien compris) de bouclé sur les colonnes de la feuille 2 pour trouver la première cellule vide en partant de la gauche avec un truc du genre :
PHP:
For j=1 to Range("IV1")
   If IsEmpty(cells(1,j)) then
      'ton code pour la copie
   End If
Next j

Si tu n'arrive pas a adapter, joint un fihcier en passant par Accueil de Cjoint.com en pensant a mettre ce que tu as au départ, et le résultat souhaité.

@+
 
Re : macro - syntaxe

Bonjour à tous,

J'avais perdu ce post de vue,

Depuis, la solution a été trouvée (par Mytã).

Voici le code:

Code:
Sub DataExportEn()

Dim Colonne As Byte
Dim Trouve

With Sheets("Sheet1")
    If UCase(Left(.Range("I2"), 2)) = "AV" Then
        Colonne = Sheet2.Range("IV14").End(xlToLeft).Column + 1
        If Colonne < 4 Then Colonne = 4
            .Range("J2:J4").Copy Sheet2.Cells(14, Colonne)
            .Range("E2").Copy Sheet2.Cells(8, Colonne)
        
    ElseIf UCase(Left(.Range("I2"), 2)) = "AP" Then
        Set Trouve = Sheet2.Range("D8:IV8").Find(.Range("E2"), LookIn:=xlValues)
            If Trouve Is Nothing Then
            MsgBox ("Erreur, impossible de trouver cette valeur")
            Exit Sub
            End If
        .Range("J2:J4").Copy Sheet2.Cells(21, Trouve.Column)
    End If
    Application.DisplayAlerts = False
    Cells.ClearContents
    '.Delete
    Application.DisplayAlerts = True
End With

End Sub

Voilà.

Bien à vous,

Chewi
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
15
Affichages
786
Réponses
4
Affichages
735
Réponses
5
Affichages
912
Retour